我们有一个在App Engine上运行的项目,并在云存储上创建文件。这两个连接是同一个云平台项目的一部分。
在App Engine中,我们有一个" Google API控制台项目编号",并且在云端控制台中 - >凭证我们在"客户ID"下列出了该项目编号。 (1 [..........]。apps.googleusercontent.com)和"电子邮件地址" (1 [..........] @ developer.gserviceaccount.com)。
每天早上,我们都会有一些cron作业将文件上传到我们的云存储桶。自2013年9月以来,这已经完美无缺,但截至今天上午(2014年10月16日),我们已经获得了许可,并且#34;来自云存储的错误。
我们正在使用cloudstorage客户端库,它会引发cloudstorage.ForbiddenError。这是日志&异常输出:
Expect status [201] from Google Storage. But got status 403.
Path: u'/bucketname/icon_20141016.png'.
Request headers: {'x-goog-resumable': 'start', 'x-goog-api-version': '2', 'content-type': 'image/png', 'accept-encoding': 'gzip, *'}.
Response headers: {'alternate-protocol': '443:quic,p=0.01', 'content-length': '151', 'via': 'HTTP/1.1 GWA', 'x-google-cache-control': 'remote-fetch', 'vary': 'Origin', 'server': 'UploadServer ("Built on Oct 9 2014 15:35:27 (1412894127)")', 'date': 'Thu, 16 Oct 2014 11:56:10 GMT', 'content-type': 'application/xml; charset=UTF-8'}.
Extra info: None.
由于我们在两个服务之间使用云平台连接,我觉得我只能诊断生产App Engine实例上的问题。我宁愿不部署新版本并冒险破坏生产服务器。今天早上这似乎也是一个云存储问题,但the only status page我发现一切正常。
答案 0 :(得分:2)
正如@ tx802建议的那样,我仔细检查了桶ACL。
$ gsutil getacl gs://bucket
<Entry>
<Scope type="UserByEmail">
<EmailAddress>1[..........]@developer.gserviceaccount.com</EmailAddress>
</Scope>
<Permission>FULL_CONTROL</Permission>
</Entry>
我查看了App Engine应用程序设置,看到服务帐户实际上是appname@appspot.gserviceaccount.com
,因此我完全控制了该帐户:
$ gsutil chacl -u appname@appspot.gserviceaccount.com:FC gs://bucket
我不确定自昨天的cron运行以来发生了什么变化,但现在它成功了。