我正在尝试用terraform建立一个共享的VPC主机项目,然后我得到
│ Error: Error enabling Shared VPC Host "master-vpc": googleapi: Error 403: Required 'compute.organizations.enableXpnHost' permission for 'projects/master-vpc', forbidden
│
│ with google_compute_shared_vpc_host_project.host,
│ on main.tf line 282, in resource "google_compute_shared_vpc_host_project" "host":
│ 282: resource "google_compute_shared_vpc_host_project" "host" {我已经看到了与我的前提完全匹配的这个职位,但我似乎无法遵循他们的解决方案,因为他们使用的是一些与云运行环境相链接的服务帐户,这不是我的情况。我使用一个具有“组织管理严格性”的terraform-admin服务帐户。图1

因为terraform-admin是通过terraform (我通过帐户键在本地运行)创建资源的,所以它应该有足够的权限来添加资源google_compute_shared_vpc_host_project。
下面是我进一步分配给account network-admin (我想用它管理VPC的帐户)和terraform-admin的权限,后者是一般的基础设施超级管理。
resource "google_project_iam_member" "master-vpc-owner-role" {
project = google_project.master-vpc.project_id
member = "serviceAccount:${google_service_account.master-vpc-network-admin.email}"
role = "roles/owner"
}
resource "google_project_iam_member" "master-vpc-project-iam-admin-role" {
project = google_project.master-vpc.project_id
role = "roles/resourcemanager.projectIamAdmin"
member = "serviceAccount:${google_service_account.master-vpc-network-admin.email}"
}
# roles/compute.xpnAdmin does not seem to cascade to the project
resource "google_folder_iam_member" "net-ops-folder-compute-xpnAdmin-role-for-net-admin" {
folder = google_folder.net-ops.name
member = "serviceAccount:${google_service_account.master-vpc-network-admin.email}"
role = "roles/compute.xpnAdmin"
}
# Create the shared VPC
resource "google_compute_shared_vpc_host_project" "host" {
# project = google_project.master-vpc.project_id
project = "${var.project_master_vpc.project_id}"
}有人能解释一下我做错了什么吗?
我在本地运行terraform apply是通过gcloud auth使用经过身份验证的帐户吗?
FYI,为了将基础结构更改应用于我的组织,我使用了一个凭据文件。
provider "google" {
credentials = file(var.credentials_file)
region = var.region
zone = var.zone
}"roles/compute.xpnAdmin"分配给master-vpc,这就是为什么我将它分配给父文件夹Net-ops,但是错误“需要”对'projects/master-vpc‘的权限。我遗漏了什么?Net-ops文件夹级别上启用此角色是否足够,还是必须将其放在组织级别?(我也不确定这是否是个好主意,因为它会授予network-admin一些组织级别的操作)发布于 2022-02-01 09:35:47
roles/compute.xpnAdmin的角色需要在组织级别上设置.这意味着通过terraform处理资源创建的terraform-admin需要具有这个角色。
下面是如何授予它的方法:
# On the organization level :
# "roles/compute.xpnAdmin" to create the VPC
resource "google_organization_iam_member" "org-compute-xpnAdmin-role-for-terraform-admin" {
org_id = <your organization's ID>
role = "roles/compute.xpnAdmin"
member = "serviceAccount:${google_service_account.terraform_infra_admin.email}"
}
# Create the shared VPC
resource "google_compute_shared_vpc_host_project" "host" {
# project = google_project.master-vpc.project_id
project = var.project_master_vpc.project_id
}当然,这意味着在这种情况下,组织的基础设施管理员也是创建VPC的人。
发布于 2022-02-01 16:03:45
Terraform中使用的服务帐户应与GCP中使用的相同。因此,这是您的terraform-admin,正如Imad所提到的,这个帐户需要在组织级别上具有"roles/compute.xpnAdmin“角色。这是因为此角色提供了管理共享VPC主机项目的权限,并且Google建议共享VPC管理器是共享VPC主机项目的所有者,如本链接中的注释所示。
https://stackoverflow.com/questions/70929630
复制相似问题