GCP环境Terragrunt配置服务账号模拟出现403权限不足问题
问题原因
这不是Terragrunt的限制,属于配置缺失问题:
- Terragrunt访问GCS远程状态的逻辑独立于Terraform GCP Provider,不会默认读取
GOOGLE_IMPERSONATE_SERVICE_ACCOUNT环境变量,也不会为服务账号模拟操作默认携带所需的OAuth作用域,因此会出现你遇到的两种问题:初始化时优先用原始凭证访问GCS、添加模拟参数后报作用域不足。 - Terraform GCP Provider会自动识别模拟相关的环境变量,且默认初始化时携带全量云平台操作作用域,所以相同凭证在Terraform中可以正常运行。
解决方法
在你的terragrunt.hcl的remote_state.config块中新增impersonate_service_account_scopes配置,添加模拟操作所需的作用域即可,修改后的完整配置参考如下:
remote_state { backend = "gcs" generate = { path = "backend.tf" if_exists = "overwrite" } config = { skip_bucket_creation = true bucket = "my bucket" prefix = "state prefix" impersonate_service_account = "my service account email" # 新增作用域配置,这里使用通用云平台全权限作用域,也可按需替换为更小权限的作用域集合 impersonate_service_account_scopes = ["https://www.googleapis.com/auth/cloud-platform"] } }
如果希望复用已有的GOOGLE_IMPERSONATE_SERVICE_ACCOUNT环境变量避免硬编码服务账号邮箱,也可以调整为:
impersonate_service_account = get_env("GOOGLE_IMPERSONATE_SERVICE_ACCOUNT", "")
额外确认项:你使用的CI/CD原始服务账号需要持有目标模拟服务账号的
roles/iam.serviceAccountTokenCreator角色,你在Terraform中可正常模拟说明该项一般已经配置,如修改配置后仍报错可优先排查该权限。
内容的提问来源于stack exchange,提问作者Alssanro
相关产品推荐
相关产品推荐

