错误:gcloud.composer.environments.update当 terraform 以第二个帐户身份运行时无法模拟

问题描述

我在运行 terraform apply 时收到以下错误(请参见下文)。

我正在运行 terraform 12.x。

GCP Cloud Build 在除 project-abcd(这些帐户所在的位置)之外的不同项目中运行

我的 terraform 代码尝试在 GCP 云构建容器中执行 gcloud 命令。它通过冒充 composer-bq-sa@prj-abcd.iam.gserviceaccount.com

terraform 运行的服务帐户是: terraform_service_account = "org-terraform@abcd.iam.gserviceaccount.com" (冒充前)

此 IAM 帐户 (org-terraform@abcd.iam.gserviceaccount.com)(非服务帐户)具有以下角色绑定(总共 9 个): (该电子邮件没有服务帐户)

Composer Administrator
Compute Network Admin
Service Account Token Creator
Owner
Access Context Manager Admin
Security Admin
Service Account Admin
Logs Configuration Writer
Security Center Notification Configurations Editor

服务帐户 (composer-bq-sa@prj-abcd.iam.gserviceaccount.com) 是其成员之一:org-terraform@abcd.iam.gserviceaccount。 com 当我查看标题为“可以访问此服务帐户的成员”的屏幕并查看 org-terraform@abcd.iam.gserviceaccount.com 时,我看到它具有以下角色绑定(仅4):

Service Account Token Creator
Owner
Security Admin
Service Account Admin

即使 IAM 帐户显然具有正确的角色并且它是它所模拟的服务帐户的成员之一,为什么我仍会收到以下错误

错误

module.gcloud_composer_bucket_env_var.null_resource.run_command[0] (local-exec): WARNING: This command 
is using service account impersonation. All API calls will be executed as [**composer-bq-sa@prj-abcd.iam.gserviceaccount.com**].
module.gcloud_composer_bucket_env_var.null_resource.run_command[0] (local-exec): ERROR: 
(gcloud.composer.environments.update) Failed to impersonate [**composer-bq-sa@prj-abcd.iam.gserviceaccount.com**]. Make sure the account that's trying to impersonate it has access to the service account itself and the "roles/iam.serviceAccountTokenCreator" role.

解决方法

回顾:
要授予用户模拟服务帐户的权限,请按照 this 文档中列出的说明进行操作。
根据用例,您可以授予用户以下角色:

  • roles/iam.serviceAccountUser
  • roles/iam.serviceAccountTokenCreator
  • roles/iam.workloadIdentityUser