Google Cloud Storage 上媒体文件的访问控制

问题描述

我在 App Engine 上部署了一个社交媒体应用,用户可以在其中上传照片/视频并与私人群组共享。对于写入,我有一个 POST 端点,它接受上传文件并将它们写入一个非公开的 GCS 存储桶。对于读取,GET 端点使用 Cloud sql 检查此用户是否有权访问媒体文件 - 如果是,则返回文件流。该文件仅存储 48 小时,平均每天检索 20 次。用户使用 Firebase 电子邮件链接登录进行身份验证。

  1. 当前方法的问题在于,我的 GET 端点是一个昂贵的中间人,用于读取 GCS 文件流并将其传递给客户端,这会增加调用 API 的成本。
  2. 在 App Engine 上缓存文件没有意义,因为对于我的用例来说缓存命中率会非常低。
  3. 如果我将 GCS 存储桶设为公开,GET API 可能会返回 GCS 文件 URL 而不是文件流。但这意味着任何人都可以使用此公共 URL 访问该文件,而不仅仅是我的应用程序或受限用户。此外,整个存储桶现在都很脆弱。
  4. 我可以为每个 GCS 文件对象创建一个 ACL,但 ACL 仅适用于拥有 Google 帐户的用户,并且我的应用使用电子邮件链接身份验证。如果文件需要与 100 多人共享,每个对象的 ACL 条目也有限制。
  5. 我的最后一个选择是创建一个短期有效的签名链接,以实现有限的未经授权的共享。
  6. 还会标记 Google 相册。如果合作伙伴共享计划可以帮助解决这个问题,那么我可以从 GCS 迁移到 Google 相册进行存储。

这看起来像是基于媒体的应用程序的常见用例。是否有任何推荐的设计模式以经济高效的方式实现目标?

这是我学习 GCP 的第一周,所以我上面分享的一些观点可能有误。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...