我有下面的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
时,我得到了第二个脚本的错误
错误:应用服务帐户的IAM策略时出错,'projects/pcb-poc-pci/serviceAccounts/pci-api@pcb-poc-pci.iam.gserviceaccount.com':错误设置服务帐户的IAM策略,'projects/pcb-poc-pci/serviceAccounts/pci-api@pcb-poc-pci.iam.gserviceaccount.com':googleapi: Error 403: iam.serviceAccounts.setIamPolicy被禁止在服务帐户projects/pcb-poc-pci/serviceAccounts/pci-api@pcb-poc-pci.iam.gserviceaccount.com.,上执行此操作。
这些是该服务帐户的角色。
基于google 这里和错误消息,服务帐户管理应该足够了,我的服务帐户已经有了
不知道我错过了什么
发布于 2021-03-05 14:31:17
解决方案1
似乎命令行没有选择正确的凭据/服务帐户,尽管我使用了gcloud auth activate-service-account
命令。
所以我把这个添加到我的脚本中
provider "google" {
credentials = file(var.service_account_file_path)
project = var.project_id
}
现在一切都很好
解决方案2
@John评论如下
export GOOGLE_APPLICATION_CREDENTIALS=fullpath.json
然后terraform将选择服务帐户文件,脚本将成功运行。
这种方法是首选的,因为在CICD管道和其他开发程序中问题较少,可以设置terraform变量。
https://stackoverflow.com/questions/66483002
复制相似问题