我正在使用此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权限创建对象(以及我之后上传的新测试对象)。为什么这对服务帐户检索文件内容不起作用?
答案 0 :(得分:1)
这可能会干扰两件事:
您的存储区ACL是否明确拥有服务帐户?对象?服务帐户是否在存储桶的默认对象ACL中列出,因此写入的新对象不会覆盖该ACL,允许服务帐户读取它?