gpt4 book ai didi

google-cloud-platform - Terraform:不允许跨项目引用

转载 作者:行者123 更新时间:2023-12-05 04:02:09 25 4
gpt4 key购买 nike

我发现 google_compute_firewall 有一些奇怪的地方,计算实例位于共享子网中。

我假设防火墙规则需要关联到该子网所属的网络。但是我们无法将防火墙规则添加到该网络,因为:

google_compute_firewall.intacct-firewall: Error creating Firewall: googleapi: Error 400: Invalid value for field 'resource.network': 'projects/it-production-186816/global/networks/production'. Cross project referencing is not allowed for this resource., invalid

无法在共享网络上找到任何有关防火墙规则的文档。我们是否将防火墙添加到本地 VPC 而不是共享 VPC?

计算镜像具有以下网络配置:

  network_interface {
subnetwork = "${var.subnetwork}"
subnetwork_project = "${var.vpc_parent}"
access_config = {
nat_ip = "${google_compute_address.dokku.address}"
}
}

因此,虽然计算实例在 project-1 中,但它使用的网络在 project-2

编辑:

我的主.tf:

# Backend config
terraform {
backend "gcs" {
bucket = "intacct-staging-remote-backend"
project = "fr-intacct-staging"
credentials = "./creds/serviceaccount.json"
}
}
#
# Provider config
provider "google" {
region = "${var.gcp_region}"
project = "${var.gcp_project}"
credentials = "${file("./creds/serviceaccount.json")}"
}
#
# Static IP Address for the app
resource "google_compute_address" "dokku" {
name = "fr-intacct-staging-ip"
address_type = "EXTERNAL"
}
#
# Compute Instance Config
resource "google_compute_instance" "dokku" {
project = "${var.gcp_project}"
name = "dokku-host1"
machine_type = "${var.comp_type}"
zone = "${var.gcp_zone}"
allow_stopping_for_update = "true"

tags = ["intacct"]

# Install Dokku
metadata_startup_script = <<SCRIPT
sudo yum install -y wget
wget https://raw.githubusercontent.com/dokku/dokku/v0.14.5/bootstrap.sh
sudo DOKKU_TAG=${var.dokku_version} bash bootstrap.sh
sudo dokku apps:create fr-intacct-staging
sudo echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sudo systemctl restart network
setenforce 0
SCRIPT

boot_disk {
initialize_params {
image = "${var.compute_image}"
}
}
network_interface {
subnetwork = "${var.subnetwork}"
subnetwork_project = "${var.vpc_parent}"
access_config = {
nat_ip = "${google_compute_address.dokku.address}"
}
}
}
#
# Firewall rule for app access
resource "google_compute_firewall" "intacct-firewall" {
name = "intacct-firewall"
network = "projects/it-production-186816/global/networks/production"
allow {
protocol = "tcp"
ports = [ "80" ]
}
source_ranges = [ "0.0.0.0/0" ]
target_tags = [ "intacct" ]
}

为另一个项目使用另一个提供者配置来添加防火墙规则似乎是错误的。

如果是这样,那就这样吧......但是由于正在使用的服务帐户对另一个项目有权限,我们必须为另一个项目使用另一个提供商似乎是错误的?

最佳答案

错误没有问题,您应该在声明网络的项目中执行您的 terraform。

如果它是 project-2(因为你在多项目环境中),你应该在 project-2 上执行你的 terraform,而不是声明你的 terraform 使用 project-1 在另一个项目中进行配置。这正是错误告诉您的内容:)

更新

让我们更精确一些。

所以你可以声明另一个提供者,这是我更愿意做的,因为我会准确地知道代码的执行位置和项目,但你也可以像在计算实例上那样尝试在资源中指定项目,对于防火墙规则:

resource "google_compute_firewall" "intacct-firewall" {
project = "projcet-2"
name = "intacct-firewall"
network = "projects/it-production-186816/global/networks/production"
allow {
protocol = "tcp"
ports = [ "80" ]
}
source_ranges = [ "0.0.0.0/0" ]
target_tags = [ "intacct" ]
}

这样做有一个问题,您使用的服务帐户应该有权在两个项目中执行操作。

关于google-cloud-platform - Terraform:不允许跨项目引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54685697/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com