【发布时间】: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