Google云端存储提供“权限不足”

时间:2014-11-04 16:34:00

标签: python google-cloud-storage

我正在使用此endpoint

 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)

使用默认的acl权限创建对象(以及我之后上传的新测试对象)。为什么这对服务帐户检索文件内容不起作用?

1 个答案:

答案 0 :(得分:1)

这可能会干扰两件事:

  1. 在存储桶中列出对象需要对存储桶具有READ权限,而获取对象(即使只是其元数据)需要对该对象具有READ权限。您的服务帐户可能拥有第一个权限,而不是第二个权限。
  2. 默认情况下,服务帐户不是项目所有者,编辑者或查看者组的一部分,因此它们不会显示在存储桶默认ACL或对象默认ACL中。
  3. 您的存储区ACL是否明确拥有服务帐户?对象?服务帐户是否在存储桶的默认对象ACL中列出,因此写入的新对象不会覆盖该ACL,允许服务帐户读取它?

    另见Access Control