【问题标题】:Firebase storage access rules have private cache controlFirebase 存储访问规则具有私有缓存控制
【发布时间】:2022-08-19 08:28:10
【问题描述】:

我正在尝试将 Cloud CDN 添加到我的 Firebase 存储桶中,但我遇到了由具有 cache-control 的桶提供的图像的问题。

我有以下非常广泛的 firebase 规则:

rules_version = \'2\';
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read: if true;
    }
  }
}

我希望这将允许我的 firebase 存储桶中的所有对象都可见。我的存储桶位于gs://lookieloo-app.appspot.com。我有一个位于/user-videos/test1.png 的文件。

我已经设置了一个 Cloud CDN 以指向此存储桶,其中包含以下详细信息:

请注意,CDN 设置为缓存静态内容。

我的负载均衡器似乎运行良好:

我的负载均衡器具有以下 IP 地址:

我希望访问http://35.190.28.68/user-videos/test1.png 会导致图像被正确加载,但我看到访问被拒绝:

但是,我发现如果我手动编辑 Google Cloud Storage 中的文件权限以获得公共访问权限

然后图像按预期从负载均衡器加载(注意 URL 与之前的屏幕截图相同):

有趣的是,如果我从https://firebasestorage.googleapis.com/v0/b/lookieloo-app.appspot.com/o/user-videos%2Ftest1.png 的firebase URL 加载文件并检查网络响应,我会看到cache-control 标头的值为private

如何使用 Firebase 存储规则使指定文件夹中的内容可公开访问,以便 Cloud CDN 提供这些内容?

  • 负载平衡和 Cloud CDN 似乎设置正确。您是否希望 GCP CDN 缓存通过 Firebase URL/下载 URL 访问的内容。我不相信这是可能的,因为这不是缓存的行为。请查看有关Cacheable content 的文档。
  • 不,我希望 Cloud CDN 缓存通过负载均衡器 IP 地址访问的内容,例如 35.190.28.68/user-videos/test1.png,但如果不将该对象标记为可公开访问,这似乎是不可能的。
  • 启用Cloud CDN 用于提供更接近用户的内容以加速您的网站和应用程序,但它不会绕过 Google Cloud Storage 中的权限。你需要先Make all objects in a bucket publicly readable
  • 是的,所以我在上面展示的具有广泛读取权限的 firebase 规则是不够的 - 从存储桶的角度来看,该对象也必须是“公共的”。那是对的吗?
  • 那是对的。

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


【解决方案1】:

解释说Cloud CDN将提供更接近用户的内容,这会加速网站和应用程序,但不会绕过谷歌云存储中的权限。为了Caching 工作,请确保Make all objects in a bucket publicly readable 并且它应该满足Cacheable content 的要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 2020-03-19
    • 2020-05-24
    • 2019-07-20
    • 2022-01-18
    • 2017-08-11
    • 2012-10-06
    相关资源
    最近更新 更多