terraform - 需要权限 iam.serviceAccounts.setIamPolicy 才能对服务帐户执行此操作
问题描述
我有以下 terraform 脚本,用于创建一个新的服务帐户并使其成为所有者。脚本创建服务帐户,但在分配角色时会引发错误
resource "google_service_account" "pci_api_service_account" {
account_id = "pci-api"
display_name = "Api"
project = var.project_id
}
resource "google_service_account_iam_member" "pci_api_owner_binding" {
# service_account_id = "projects/pcb-poc-pci/serviceAccounts/infra-admin-sa@pcb-poc-pci.iam.gserviceaccount.com"
service_account_id = google_service_account.pci_api_service_account.name
role = "roles/owner"
member = "serviceAccount:${google_service_account.pci_api_service_account.email}"
depends_on = [
google_service_account.pci_api_service_account
]
}
我已经infra-admin-sa
通过运行验证了服务帐户
gcloud auth activate-service-account --project=pcb-poc-pci --key-file ~/sa/pcb-poc-pci-test-sa-94aa6c81d650.json
当我运行时terragrunt apply
,第二个脚本出现此错误
错误:为服务帐户“projects/pcb-poc-pci/serviceAccounts/pci-api@pcb-poc-pci.iam.gserviceaccount.com”应用 IAM 策略时出错:为服务帐户“projects/pcb-poc”设置 IAM 策略时出错-pci/serviceAccounts/pci-api@pcb-poc-pci.iam.gserviceaccount.com': googleapi: 错误 403: 需要权限 iam.serviceAccounts.setIamPolicy 才能对服务帐户项目/pcb-poc-pci/ 执行此操作serviceAccounts/pci-api@pcb-poc-pci.iam.gserviceaccount.com.,禁止
根据此处的谷歌文档和错误消息,服务帐户管理员应该足够了,我的服务帐户已经拥有
不知道我错过了什么
解决方案
解决方案 1
尽管我使用了命令,但似乎命令行没有选择正确的凭据/服务帐户gcloud auth activate-service-account
。
所以我将此添加到我的脚本中
provider "google" {
credentials = file(var.service_account_file_path)
project = var.project_id
}
现在它工作正常
解决方案 2
根据下面的@John Hansley 评论
export GOOGLE_APPLICATION_CREDENTIALS=fullpath.json
然后 terraform 将选择该服务帐户文件,并且脚本将成功运行。
这种方法是首选,因为 CICD 管道和其他开发人员中设置地形变量的问题较少
推荐阅读
- python - CDAP 的间歇性服务暂停和 Python 集成
- python - Python中模块的不同日志级别
- wordpress - 我们可以使用 divi builder 编辑 WP-bakery 模板吗?
- pandas - 如何将 dict 列分解为新的数据框
- r - 从另一列派生一列的数据
- python - 如何在python中获取日期作为finename
- python-3.x - 使用python创建yml文件
- javascript - 在正常函数中获取错误未捕获的类型错误:p1() 未定义。如果...否则没有给出预期的输出
- wordpress - 如何将元素或“添加到购物车”按钮直接重定向到结帐页面
- npm - 运行“下一个构建”时下一个 JS 构建失败 ~ 无法解析 next.js