Google Cloud Build存储桶同步及本地执行gsutil rsync均出现403权限异常求助
解决GCS rsync时403权限拒绝(即使有Storage Admin/Owner权限)的问题
看起来你遇到了个挺让人头疼的权限问题——不管是Cloud Build的服务账号,还是本地的项目所有者账号,明明加了足够的权限,执行gsutil rsync时还是被拒绝访问目标桶的storage.objects.list权限。我来分享几个可能的原因和对应的解决办法:
1. 目标存储桶不在当前操作的项目中,跨项目权限未配置
这是最常见的原因之一:如果gs://my-bucket-destination属于另一个GCP项目,那你在当前项目给账号加的所有权限(包括Owner)都不会生效在目标桶上。GCP的IAM权限是分项目/资源的,跨项目的话必须在目标资源所在的项目里单独配置权限。
解决步骤:
- 先确认目标桶的所属项目:执行
gsutil ls -L gs://my-bucket-destination | grep "Project" - 切换到目标桶所在的项目,打开IAM页面,添加你的两个账号:
- Cloud Build服务账号:
xxxxxx@cloudbuild.gserviceaccount.com - 本地用户账号:
XXXXX@YYYY.com
- Cloud Build服务账号:
- 给他们分配至少
Storage Object Viewer权限(这个权限包含storage.objects.list),或者直接用Storage Admin
2. 目标桶启用了Bucket Policy Only(BPO),项目级IAM被忽略
如果目标桶开启了BPO,那么项目级的IAM权限会被完全忽略——哪怕你是项目Owner,也必须直接在桶的IAM设置里配置权限,项目级的权限不会继承过来。
验证和解决:
- 先检查目标桶的BPO状态:执行
gsutil bucketpolicyonly get gs://my-bucket-destination - 如果返回
Enabled,那直接去目标桶的IAM页面,添加你的两个账号,分配需要的权限(比如Storage Object Admin或者Storage Object Viewer)
3. 权限缓存延迟(可能性较低,但值得排查)
GCP的IAM权限有时候会有几分钟的缓存延迟,刚添加的权限可能不会立即生效。不过你提到加了Owner权限还是不行,这个可能性相对小,但可以试试:
- 本地账号:执行
gcloud auth revoke XXXXX@YYYY.com,然后重新登录gcloud auth login - Cloud Build:重新触发一次构建,或者等待10分钟左右再试
4. VPC Service Controls限制了访问
如果目标桶所在项目启用了VPC Service Controls,那么只有在允许的范围内(比如特定VPC、IP段、服务)才能访问桶。你的Cloud Build环境或者本地机器的IP可能不在允许列表里,导致被拒绝。
解决步骤:
- 检查目标桶所属项目的VPC Service Controls配置,确认是否有访问限制
- 如果有,将Cloud Build的服务账号加入允许的身份列表,或者把本地机器的IP添加到允许的IP范围中
内容的提问来源于stack exchange,提问作者user3201492
相关产品推荐
相关产品推荐

