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
相关产品推荐
相关产品推荐

