【问题标题】:Can't access image files in Google Cloud storage from App Engine无法从 App Engine 访问 Google Cloud 存储中的图像文件
【发布时间】:2021-11-27 04:22:39
【问题描述】:

我们的 GAE 应用多年来一直运行良好。我正在尝试切换到 IAM 角色来管理默认的存储桶(细粒度访问)。它不起作用。

切换到统一访问后,我将 StorageAdmin 权限授予 GAE 服务帐户。此时我们的代码在 getServingUrl() 中失败:

String filename = "/gs/" + bucketName + "/" + fileName;
String url = service.getServingUrl( ServingUrlOptions.Builder.withGoogleStorageFileName(filename ));

抛出 IllegalArgumentException,但没有详细的错误消息。

所以,我更多地使用权限。我将所有具有 StorageAdmin 权限的用户添加到存储桶。有两件有趣的事情需要注意:1)我可以直接从浏览器访问图像,使用:https://storage.googleapis.com/bucket/filename.png。 2)我们的应用程序没有任何变化。仍然得到与上述相同的行为!

对我来说,这毫无意义。 allUsers 不是意味着任何人或任何服务都可以访问这些文件吗?为什么添加 GAE 服务帐号不起作用?

【问题讨论】:

  • 可以参考一下链接吗:stackoverflow.com/questions/48093210/… 有用吗?
  • 并非如此。我们想使用签名的 URL,但访问被拒绝。似乎 GAE 被拒绝访问。这导致了一些在切换到统一访问方面的实验。当所有用户都被允许访问时,为什么 GAE 不能访问(即使我可以从 Web 浏览器访问)?!?!
  • 其实,让我重新表述一下最初的问题。当只使用统一访问时,任何谷歌服务(应用引擎、云功能等)可以访问云存储中的任何内容吗?如果有,怎么做?

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


【解决方案1】:

云存储允许两种类型的权限访问任何存储桶或对象,它们是 IAM 和 ACL ,因此如果您使用 IAM 访问存储桶,请确保您遵循 @987654321 中提到的规范@如:

在大多数情况下,建议使用 IAM 来控制对资源的访问。 IAM 控制整个 Google Cloud 和 允许您在存储桶和项目级别授予权限。您应该将 IAM 用于适用于存储桶中多个对象的任何权限,以减少 意外暴露的风险。要独占使用 IAM,请启用统一存储桶级访问权限以禁止所有 Cloud Storage 资源的 ACL。

如果您对同一资源使用 IAM 和 ACL,Cloud Storage 会授予该资源更广泛的权限集。例如,如果您的 IAM 权限仅 允许少数用户访问 my-object,但您的 ACL 将 my-object 公开,然后 my-object 公开。一般来说,IAM 无法检测到 ACL 授予的权限,ACL 无法检测 IAM 授予的权限。

您也可以参考stackoverflow question,其中 OP 遇到了类似的问题,并通过将对象的访问控制列表中的权限更改为 READ 或 FULL_CONTROL 来解决。

【讨论】:

  • @MikeDee 发布了答案,有帮助吗?
猜你喜欢
  • 2017-07-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2021-07-05
  • 2020-06-11
相关资源
最近更新 更多