Google App Engine 上的 Production App 突然无法访问 Google Cloud Storage

Posted

技术标签:

【中文标题】Google App Engine 上的 Production App 突然无法访问 Google Cloud Storage【英文标题】:Production App on Google App Engine suddenly lost access to Google Cloud Storage 【发布时间】:2019-09-25 16:58:36 【问题描述】:

我们在 Google App Engine 上运行的生产应用(python 2.7 标准环境)突然失去了在 Google Cloud Storage 上写入(创建对象)的权限,而我们这边的代码没有任何更改。

代码能够创建新的存储桶,但不能在其中创建新对象。

似乎默认的应用引擎服务帐户没有被授予权限。 不用说,服务帐户具有存储对象创建者角色,以及项目级别的编辑者角色。

奇怪的是,在测试环境项目上运行的完全相同的代码仍然可以完美运行。 我们正在使用 api 客户端库来获取凭据,如下所示:

from oauth2client.appengine import AppAssertionCredentials
from apiclient.discovery import build as discovery_build

credentials = AppAssertionCredentials(scope=scope)
http = credentials.authorize(httplib2.Http())
service = discovery_build('storage', 'v1', http=http)

然后使用服务进行 api 调用。 所有创建对象的调用都突然失败并显示以下消息: "匿名调用者没有 storage.objects.create 访问 /"

有什么想法会突然出错吗??

【问题讨论】:

OAuth 访问令牌已过期(我怀疑正常错误是 403),或者您的代码未在 API 调用中使用访问令牌。 Anonymous caller 表示没有 HTTP 授权标头。对我来说,这表明您的代码中存在错误。 Google 客户端库会自动更新过期的令牌。我没用过AppAssertionCredentials。是否有理由使用此类而不是 ADC(应用程序默认凭据)样式类?能够创建存储桶但不能创建对象的问题可能表明您在这些 API 调用中使用了不同的凭据。 John,感谢您的评论,但是,1. 完全相同的代码在测试环境中运行,没有缺陷(相同的代码,不同的项目)。 2. 桶创建使用完全相同的凭据,并且成功。 3. 生产应用程序运行完美,直到几个小时前,没有更改任何代码...... 您的问题中没有提供足够的信息或代码让我知道问题所在。 嘿,我们目前遇到了同样的问题。它从 25.9 开始,在 26.9 上运行良好,但在 27.9 上再次出现,从那以后就一直存在。您在这些日期遇到同样的问题吗? 【参考方案1】:

这原来是 Google Cloud Storage (GCS) 的问题。 打开付费支持票,大约 90 小时后,Google GCS 工程师进行了回滚,解决了该问题,但未找到或报告问题的根本原因。 非常麻烦的是,一个生产应用程序会以这种方式受到如此长时间的影响,最终没有任何解释。

【讨论】:

以上是关于Google App Engine 上的 Production App 突然无法访问 Google Cloud Storage的主要内容,如果未能解决你的问题,请参考以下文章

Google App Engine 上的 Production App 突然无法访问 Google Cloud Storage

Google Apps 域上的 Google App Engine

Google App Engine 上的 web.py

部署失败:Google App Engine 上的 Kotlin Spring Boot 应用

Google App Engine 上的 Django TemplateDoesNotExist

OSX 上的 Google App Engine SDK 路径在哪里?