从VM实例上传文件至Google Cloud Storage时遭遇访问拒绝错误
解决GCS上传访问拒绝问题的排查步骤
确认存储桶有效性
先验证存储桶是否存在且名称正确:gcloud storage buckets list | grep test-us-east注意GCS桶名是全局唯一的,若输出为空,说明桶不存在或拼写错误(包括大小写、特殊字符)。
验证VM绑定的服务账号状态
- 检查VM当前活跃的服务账号:
确保输出中gcloud auth listvm-instances-sa@gcpplatform.iam.gserviceaccount.com是当前活跃账号,若不是,切换账号:gcloud config set account vm-instances-sa@gcpplatform.iam.gserviceaccount.com - 若刚绑定服务账号到VM,必须重启VM才能让服务账号权限生效,重启后再执行上传命令。
- 检查VM当前活跃的服务账号:
检查存储桶Bucket Policy Only(BPO)设置
如果存储桶开启了BPO,项目级IAM权限会被忽略,仅桶级IAM权限生效。验证BPO状态:gcloud storage buckets describe gs://test-us-east --format="value(bucketPolicyOnly.enabled)"若返回
True,需确认桶级IAM中确实已添加该服务账号的Storage Admin权限,可通过以下命令查看:gcloud storage buckets get-iam-policy gs://test-us-east排查组织级拒绝政策
检查组织或项目是否存在IAM拒绝政策,限制了该服务账号的GCS操作:- 进入Google Cloud控制台的IAM页面
- 切换到「拒绝政策」标签
- 查找是否有针对
vm-instances-sa@gcpplatform.iam.gserviceaccount.com或存储桶test-us-east的拒绝规则
测试基础权限与工具兼容性
- 用
gsutil替代gcloud storage测试上传,排查工具差异:gsutil cp temp_files/test.txt gs://test-us-east/test.txt - 先测试桶的访问权限:
若此命令也报错,说明确实是桶的访问权限问题;若能正常列出,再排查文件读取权限:gcloud storage ls gs://test-us-east
确保当前用户对源文件有读取权限(权限位包含ls -l temp_files/test.txtr)
- 用
内容的提问来源于stack exchange,提问作者MadaraUchiha
相关产品推荐
相关产品推荐

