GitHub Actions部署Google Cloud Run权限不足及最小权限配置咨询
Cloud Run GitHub Actions CD 最小权限配置方案
错误原因说明
你碰到的Permission 'iam.serviceAccounts.getAccessToken' denied问题,核心是权限授予范围不对:roles/iam.serviceAccountTokenCreator角色确实包含该权限,但必须确保你的新服务账号,对Cloud Run部署时使用的运行服务账号(也就是你要actAs的那个SA)拥有这个角色权限,而不是仅在项目级别给新服务账号授予该角色。
最小权限清单
1. 身份验证与令牌生成权限
- 给新服务账号授予
roles/iam.serviceAccountTokenCreator角色,作用范围限定为Cloud Run的运行服务账号(而非整个项目),该角色包含iam.serviceAccounts.getAccessToken等令牌生成所需权限。
2. Cloud Run部署核心权限(需加入自定义角色)
run.services.get:获取现有Cloud Run服务信息,用于增量更新部署run.services.update:更新Cloud Run服务配置与镜像(首次部署需额外加run.services.create)iam.serviceAccounts.actAs:允许新服务账号以Cloud Run运行服务账号的身份执行部署操作,作用范围限定为Cloud Run的运行服务账号- 如果部署私有镜像(如GCR/Artifact Registry):
- Artifact Registry:
artifactregistry.repositories.downloadArtifacts - Container Registry:
storage.objects.get
- Artifact Registry:
- 若需从Secret Manager拉取部署密钥:
secretmanager.versions.access(你已配置此权限)
关键排查步骤
- 验证权限范围:在IAM控制台中找到Cloud Run的运行服务账号,检查是否已将新服务账号添加为成员并授予
roles/iam.serviceAccountTokenCreator和iam.serviceAccounts.actAs权限 - 检查GitHub Actions配置:确保
cloud-run.yml中指定的服务账号、身份验证参数(如Workload Identity的audience)与实际配置一致 - 用命令确认权限:
# 查看新服务账号对运行SA的权限 gcloud iam service-accounts get-iam-policy [RUN_SERVICE_ACCOUNT_EMAIL] --filter="bindings.members:serviceAccount:[NEW_SERVICE_ACCOUNT_EMAIL]"
内容的提问来源于stack exchange,提问作者Tushar Roy
相关产品推荐
相关产品推荐

