我在 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 访问该对象?
过程是 -
-
设置负载均衡器并为其启用 CDN
-
允许公有访问要通过 CDN 访问的映像或整个存储桶。有关它的说明在此链接中 - https://cloud.google.com/storage/docs/access-control/making-data-public
-
如果您的 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