使用 CDN 通过 Firebase 存储对象的下载网址访问这些对象?



我在 Firebase 存储中有包含下载网址的图像文件。 我可以通过下载 URL 访问这些内容。

我已经设置了一个 Google Cloud Platform CDN 来指向我的 Firebase Storage 存储桶。 当我尝试访问存储桶中的图像时,我收到访问被拒绝

。 响应。设置 GCP CDN 的说明指向存储桶说使用以下格式: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 存储中存储桶的权限设置为:

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

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

如何通过 Firebase Storage 对象的下载网址和 Google Cloud Platform CDN 访问该对象?

过程是 -

  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