You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Action对接GCP身份联合认证遇403权限错误求助

问题排查:GitHub Action通过Workload Identity认证GCP时403权限拒绝

核心问题

报错提示Permission 'iam.serviceAccounts.getAccessToken' denied,结合审计日志可知:通过Workload Identity Pool认证的GitHub主体(repo:vyshkov/gcp-serverless:ref:refs/heads/main)未被授予获取目标服务账号AccessToken的权限。

服务账号自身的资源操作权限(比如存储桶上传)和获取该服务账号AccessToken的权限是两个独立的权限体系,后者需要给外部联合认证主体授予特定角色。

解决步骤

1. 给GitHub主体授予服务账号的Workload Identity User角色

执行以下gcloud命令,将roles/iam.workloadIdentityUser角色绑定到目标服务账号,授权指定的GitHub repo分支主体:

gcloud iam service-accounts add-iam-policy-binding githubsa@learning-words-trial.iam.gserviceaccount.com \
  --role="roles/iam.workloadIdentityUser" \
  --member="principalSet://iam.googleapis.com/projects/736194043976/locations/global/workloadIdentityPools/my-pool/repo:vyshkov/gcp-serverless:ref:refs/heads/main"

如果需要授权整个repo(所有分支),可以简化member参数:

--member="principalSet://iam.googleapis.com/projects/736194043976/locations/global/workloadIdentityPools/my-pool/repo:vyshkov/gcp-serverless"

2. 验证权限绑定是否生效

执行命令查看服务账号的IAM策略,确认角色已添加:

gcloud iam service-accounts get-iam-policy githubsa@learning-words-trial.iam.gserviceaccount.com

输出中应包含类似以下的条目:

bindings:
- members:
  - principalSet://iam.googleapis.com/projects/736194043976/locations/global/workloadIdentityPools/my-pool/repo:vyshkov/gcp-serverless:ref:refs/heads/main
  role: roles/iam.workloadIdentityUser

3. 额外检查项

  • 确认Workload Identity Provider已正确配置GitHub作为身份源,受众(Audience)设置正确(通常为https://github.com/vyshkov/gcp-serverless)
  • 确认Workload Identity Pool和Provider处于启用状态
  • 若使用了分支保护,确保GitHub Action的运行上下文与绑定的主体匹配(比如绑定的是main分支,Action是否在main分支触发)

内容的提问来源于stack exchange,提问作者Vololodymyr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 05:47:37