Cloud Build访问存储桶被拒:GitHub Actions构建镜像失败排查
问题排查与解决思路
1. Cloud Build默认服务账号权限缺失
gcloud builds submit执行过程中,除了你的github-sa账号,Cloud Build的默认服务账号(格式为<项目号>@cloudbuild.gserviceaccount.com)也需要对目标存储桶具备操作权限。即便github-sa拥有Storage Object Admin权限,若Cloud Build服务账号无对应权限,仍会触发访问失败。
- 检查该默认服务账号是否被授予
Storage Object Admin或Cloud Build Editor角色,确保它能读写dev-00-ebcd_cloudbuild存储桶。
2. 存储桶IAM绑定存在问题
即便通过Terraform配置了角色,也可能出现IAM策略延迟生效或配置逻辑错误:
- 手动验证存储桶的IAM绑定,确认
github-sa确实被授予了针对dev-00-ebcd_cloudbuild存储桶的Storage Object Admin权限(需确认绑定范围是存储桶而非项目,避免权限作用对象错误)。 - 检查Terraform代码中是否正确指定了存储桶的资源ID,防止权限绑定到错误资源上。
3. 工作负载身份验证的 impersonation 权限未配置
github-sa的角色配置正常不代表允许被GitHub Actions的身份impersonate:
- 确认在GCP中,已为GitHub Actions对应的身份(格式通常为
principalSet://iam.googleapis.com/projects/<项目号>/locations/global/workloadIdentityPools/<池ID>/attribute.repository/<你的GitHub仓库>)授予roles/iam.serviceAccountTokenCreator角色,允许其模拟github-sa。
4. Cloud Build API未启用
虽然github-sa拥有Service Usage Admin角色,但Cloud Build API本身可能未被启用:
- 执行
gcloud services list --enabled检查cloudbuild.googleapis.com是否在启用列表中;若未启用,运行gcloud services enable cloudbuild.googleapis.com(github-sa有权限执行该命令)。
5. 存储桶名称或路径错误
确认错误提示中的存储桶名称dev-00-ebcd_cloudbuild是否准确:
- Cloud Build默认存储桶格式通常为
<项目ID>_cloudbuild,检查你的项目ID是否为dev-00-ebcd,避免因拼写错误访问不存在的存储桶。
内容的提问来源于stack exchange,提问作者Stefan Falk
相关产品推荐
相关产品推荐

