【问题标题】:Permission denied writing from App Engine to associated Cloud Storage bucket权限被拒绝从 App Engine 写入关联的 Cloud Storage 存储分区
【发布时间】:2014-12-11 19:49:59
【问题描述】:

我们有一个在 App Engine 上运行并在 Cloud Storage 上创建文件的项目。两者连接为同一个云平台项目的一部分。

在 App Engine 中,我们有一个“Google API 控制台项目编号”,在 Cloud Console -> Credentials 中,我们在“客户端 ID”下列出了该项目编号 (1[.......]. apps.googleusercontent.com) 和“电子邮件地址”(1[..........]@developer.gserviceaccount.com)。

每天早上,我们都有一些将文件上传到 Cloud Storage 存储桶的 cron 作业。这自 2013 年 9 月以来一直运行良好,但截至今天上午(2014 年 10 月 16 日),我们从 Cloud Storage 收到“权限被拒绝”错误。

我们正在使用 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 说一切正常。

【问题讨论】:

  • bucket上的ACL有没有可能发生了变化?您可以通过gsutil getacl gs://<bucket-name>查看。
  • @tx802 某处发生了变化……不知道在哪里,但我已经解决了。将发布带有详细信息的答案。

标签: google-app-engine google-cloud-storage


【解决方案1】:

按照@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 运行以来发生了什么变化,但现在它成功了。

【讨论】:

  • 服务帐户非常令人困惑,但至少在我们的项目中,&lt;project-id&gt;@developer.gserviceaccount.com 地址“用于验证在该项目中的 VM 实例上运行的代码”。但我看到一些奇怪的服务帐户是在“云平台之前”的 App Engine 项目上创建的。
  • 致@tx802 的评论——我们真的需要命名服务帐户;)
猜你喜欢
  • 2018-11-24
  • 2018-01-15
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 2020-10-31
  • 2016-11-15
  • 2017-07-07
相关资源
最近更新 更多