【问题标题】:Use a CDN to access Firebase Storage objects through their Download URL?使用 CDN 通过下载 URL 访问 Firebase 存储对象?
【发布时间】:2020-01-14 17:25:17
【问题描述】:

我在 Firebase 存储中有图像文件,这些文件具有下载 URL。我可以通过下载 URL 访问这些内容。

我已经设置了一个 Google Cloud Platform CDN 来指向我的 Firebase 存储桶。当我尝试访问存储桶中的图像时,我收到 Access denied. 响应。

设置 GCP CDN 的说明指向一个 Bucket,说要使用以下格式: https://[IP_ADDRESS]/static/[REGION]/[OBJECT_NAME]

我使用外部负载平衡器 IP 地址,“我们”作为区域,我已经为 [object_name] 尝试了几件事。

图像文件对象的下载 URL 如下所示:

https://firebasestorage.googleapis.com/v0/b/xxxx.appspot.com/o/-LmBkDlSNaSqtFI8AfFX%2Ffoo%2Fbar_-LmDYUM32YieXcpjm7jR.png?alt=media&token=61E4F4A8-99BF-495E-89F0-03BB565D0D8A

所以,我尝试使用 /o/ 之后的所有内容作为 [object_name] 我尝试了存储位置路径。 我尝试在这两个中对斜杠进行 URL 编码。

在所有情况下,我都会得到以下信息:

<Error>
    <Code>AccessDenied</Code>
    <Message>Access denied.</Message>
    <Details>Anonymous caller does not have storage.objects.get access to buttons-dev.appspot.com/static/us/-LmBkDlSNaSqtFI8AfFH/circles/circle_-LmDYUM32YieTcpjm7jR.png.
</Details>
</Error>

Firebase Storage 中存储桶的权限设置为:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

但是,下载 URL 应该适用于直接查看特定文件。 另外,我尝试将allow: read; 设置为权限,但没有任何改变。

如何通过下载 URL 和 Google Cloud Platform CDN 访问 Firebase 存储对象?

【问题讨论】:

  • 使用下载 URL 或其他直接访问 URL 时会绕过安全规则。只有当访问来自 Firebase SDK 时,规则才重要。
  • 是的!我明白了。那么,是否可以让谷歌云平台 CDN 缓存通过下载 URL 访问的内容?
  • 我认为除了撤销其访问权限之外,没有任何方法可以改变 Firebase SDK 获取的下载 URL 的行为。
  • 我不想改变这种行为。我想使用 GCP CDN 来缓存它。有什么建议吗?
  • 这实际上是一种行为的改变(行为是缓存)。我认为您不能简单地重新路由该 URL 以通过任何其他 CDN 或缓存系统。 URL 就是这样 - 直接访问 Storage 中的底层对象。

标签: firebase google-cloud-storage firebase-storage firebase-security


【解决方案1】:

过程是-

  1. 设置负载均衡器并为其启用 CDN

  2. 允许公开访问您要通过 CDN 访问的图像或整个存储桶。它的说明在这个链接中 - https://cloud.google.com/storage/docs/access-control/making-data-public

  3. 如果您在 Firebase 存储中有一个名为 foo/bar/image.png 的文件

    然后只需使用http://[LOAD_BALANCER_IP_ADDRESS]/foo/bar/image.png 访问它

在您的示例中,这将起作用

http://[LOAD_BALANCER_IP_ADDRESS]/-LmBkDlSNaSqtFI8AfFX%2Ffoo%2Fbar_-LmDYUM32YieXcpjm7jR.png

基本 URL 取决于您在主机和路径规则中设置的内容。如果您只有一个后端设置,则上述设置将按原样运行。

完整指南 - https://cloud.google.com/load-balancing/docs/https/adding-backend-buckets-to-load-balancers

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 2018-05-23
    • 2019-05-30
    • 2018-05-02
    • 2018-01-09
    相关资源
    最近更新 更多