使用GCS存储桶作为Terraform远程状态后端遇403权限问题求助
问题背景
使用Terraform GCS远程状态后端时遭遇403权限错误,相关配置代码如下:
terraform { backend "gcs" { bucket = "bucket-terraform_tfstate" prefix = "terraform/state" } }
报错信息:
Error: Failed to get existing workspaces: querying Cloud Storage failed: googleapi: Error 403: user@xxx does not have serviceusage.services.use access to the Google Cloud project., forbidden
异常特征:所有客户及项目均出现该问题,通过gsutil list可正常访问存储桶,角色权限配置无误;此前可正常运行的旧项目也触发相同报错,切换至本地状态则无异常。
排查与解决步骤
检查Service Usage API启用状态
Terraform GCS后端在交互时会调用Service Usage API验证项目状态,即便存储桶权限配置正确,若该API未启用仍会触发此错误。
执行以下命令检查API状态:gcloud services list --enabled --project 你的项目ID若未找到
serviceusage.googleapis.com,则启用该API:gcloud services enable serviceusage.googleapis.com --project 你的项目ID核对Terraform使用的身份凭证
确认Terraform与gsutil使用的是否为同一身份凭证:- 查看环境变量
GOOGLE_APPLICATION_CREDENTIALS是否指向了特定服务账号密钥文件,导致与gsutil默认凭证不一致 - 运行
gcloud auth application-default print-access-token,验证当前默认应用凭证对应的账号是否具备serviceusage.services.use权限
- 查看环境变量
确认权限配置与生效情况
确保相关账号已被授予Service Usage Consumer角色(roles/serviceusage.serviceConsumer),该角色包含serviceusage.services.use权限。若刚配置权限,需等待数分钟让权限生效,同时排查是否有组织级政策限制了Service Usage API的调用。检查Terraform版本兼容性
部分旧版本Terraform的GCS后端可能对Service Usage API的依赖逻辑有变更,尝试升级至最新稳定版,或回退到之前可正常运行的版本,排查是否为版本引入的问题。
内容的提问来源于stack exchange,提问作者MACP

