首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误403:在尝试通过terraform设置共享VPC时,项目需要“compute.organizations.enableXpnHost”许可

错误403:在尝试通过terraform设置共享VPC时,项目需要“compute.organizations.enableXpnHost”许可
EN

Stack Overflow用户
提问于 2022-01-31 16:44:13
回答 2查看 770关注 0票数 1

我正在尝试用terraform建立一个共享的VPC主机项目,然后我得到

代码语言:javascript
复制
│ 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的权限,后者是一般的基础设施超级管理。

代码语言:javascript
复制
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,为了将基础结构更改应用于我的组织,我使用了一个凭据文件。

代码语言:javascript
复制
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一些组织级别的操作)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-01 09:35:47

roles/compute.xpnAdmin的角色需要在组织级别上设置.这意味着通过terraform处理资源创建的terraform-admin需要具有这个角色。

下面是如何授予它的方法:

代码语言:javascript
复制
# 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的人。

票数 0
EN

Stack Overflow用户

发布于 2022-02-01 16:03:45

Terraform中使用的服务帐户应与GCP中使用的相同。因此,这是您的terraform-admin,正如Imad所提到的,这个帐户需要在组织级别上具有"roles/compute.xpnAdmin“角色。这是因为此角色提供了管理共享VPC主机项目的权限,并且Google建议共享VPC管理器是共享VPC主机项目的所有者,如本链接中的注释所示。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70929630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档