从Google Bucket拉取文件遇ACCESS DENIED EXCEPTION:403如何解决?
解决Google Cloud Storage 403权限拒绝问题的步骤
这个报错说明你的账号tim@gmail.com没有对存储桶dcct_-dcm_account870执行storage.objects.list的权限,咱们一步步排查解决:
1. 先确认当前使用的访问身份是否正确
首先得搞清楚批处理文件是用哪个账号访问GCS的:
- 如果用的是gcloud CLI,运行
gcloud auth list查看当前活跃的账号是不是tim@gmail.com,有没有其他账号的凭证干扰访问? - 如果批处理里用的是服务账号密钥文件,那要确认这个密钥对应的服务账号是否有权限,而不是默认用了你的个人邮箱账号。
2. 检查存储桶的IAM权限配置
登录Google Cloud控制台,找到dcct_-dcm_account870这个存储桶,进入「权限」标签页:
- 搜索
tim@gmail.com,看看有没有给这个账号分配包含storage.objects.list权限的角色:- 常用的合适角色:
Storage Object Viewer(包含list和get对象的权限,适合只读场景)、Storage Admin(全权限,不建议生产环境随意使用),或者自定义精细权限的角色 - 如果搜索不到这个账号,说明还没添加权限,直接点击「添加权限」,输入邮箱,选择对应的角色保存即可。
- 常用的合适角色:
3. 检查存储桶的政策限制
有些存储桶可能启用了Bucket Policy Only模式,这种模式下ACL权限会被忽略,所有权限都通过IAM管理:
- 在存储桶的「权限」页面顶部看看有没有相关提示,如果启用了这个模式,确保IAM的配置是正确的
- 另外排查组织层面的政策,比如有没有设置限制特定账号访问存储桶的规则。
4. 验证批处理里的命令是否正确
检查批处理文件里的GCS访问命令:
- 确认存储桶路径拼写正确,比如
gs://dcct_-dcm_account870/有没有打错字符? - 如果是用服务账号密钥,命令里是不是指定了
--key-file参数,且密钥文件的路径正确、文件没损坏? - 手动运行批处理里的单条命令,看看是不是同样报错,排除脚本本身的逻辑问题。
5. 刷新或重新获取访问凭证
如果是用gcloud CLI的个人账号凭证:
- 运行
gcloud auth refresh刷新凭证,或者重新登录gcloud auth login tim@gmail.com
如果是用服务账号密钥: - 检查密钥是否过期或被删除,必要的话在Cloud控制台重新生成一个新的密钥文件,替换批处理里的路径。
补充说明:
storage.objects.list权限是用来列出存储桶内对象的,哪怕你只是拉取单个文件,有些命令(比如gsutil cp gs://bucket/* ./)也会先执行list操作,所以必须要有这个权限才能正常运行。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

