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 上的 Kotlin Spring Boot 应用