谷歌云存储提供了 '权限不足'
我使用这个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权限创建。为什么这对服务帐户无法检索文件内容?
有两件事情可以在这里干扰:
- 清单在桶中的对象要求在水桶读取权限,而得到一个对象,甚至只是它的元数据,需要在物体上读取权限。这可能是您的服务帐户有第一个权限,而不是第二个权限。
- 默认情况下,服务帐户不属于项目所有者,编辑者或查看者组,因此它们不会显示在存储桶默认ACL或对象默认ACL中。
您的存储桶ACL上是否明确有服务帐户?对象?服务帐户是否列在存储区的默认对象ACL中,因此写入的新对象不会覆盖该ACL,从而允许服务帐户读取它?
另请参阅Access Control。
我将服务帐户的电子邮件添加到对象本身,但我仍收到403.任何想法? – Tjorriemorrie 2014-11-05 16:03:33
@Tjorriemorrie你能弄明白吗?我想我遇到了同样的情况,我可以将对象上传到存储桶,但无法使用服务帐户更改ACL – 2015-04-25 23:19:38
对不起,我很困惑。我看到了对service.objects.get()的调用,但我也看到了对service.objects()。get_media()的调用。哪个失败? – 2014-11-04 18:58:09