谷歌云存储提示“权限不足”

3 投票
1 回答
4179 浏览
提问于 2025-05-01 14:28

我正在使用这个接口

 get_media(bucket=*, object=*, ifGenerationNotMatch=None, generation=None, ifMetagenerationMatch=None, ifGenerationMatch=None, ifMetagenerationNotMatch=None, projection=None) 

但是我遇到了这个错误:

apiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/storage/v1/b/my-logs/o/clickstream.1413365729497.log?alt=json returned "Insufficient Permission">

代码如下:

service = build('storage', 'v1')
contents = service.objects().get(bucket=item['bucket'], object=item['name']).execute(http=http)

这里的item是之前一次成功调用buckets.list得到的。这就是为什么服务账户的权限错误让我觉得很奇怪。

现在我是在本地环境中进行操作,我的身份验证信息是:

with open(FILE_KEY, 'rb') as f:
    key = f.read()

credentials = SignedJwtAssertionCredentials(
    SERVICE_EMAIL_ADDRESS,
    key,
    scope='https://www.googleapis.com/auth/devstorage.full_control',
)

http = httplib2.Http()
http = credentials.authorize(http)

这些对象(还有我之后上传的新测试对象)都是用默认的访问控制权限创建的。为什么服务账户无法获取文件内容呢?

暂无标签

1 个回答

1

这里有两个可能会影响你操作的事情:

  1. 要列出一个存储桶里的对象,你需要对这个存储桶有读取权限;而获取一个对象,即使只是获取它的一些基本信息,也需要对这个对象有读取权限。可能你的服务账号有对存储桶的读取权限,但没有对对象的读取权限。
  2. 服务账号默认不属于项目的拥有者、编辑者或查看者组,所以它们不会出现在存储桶或对象的默认访问控制列表(ACL)中。

你的存储桶的访问控制列表里有没有明确列出这个服务账号?对象里有没有?这个服务账号是否在存储桶的默认对象访问控制列表中,这样新写入的对象如果没有其他设置,可以让这个服务账号读取它?

更多信息可以查看 访问控制

撰写回答