Google app engine Google云存储上媒体文件的访问控制

Google app engine Google云存储上媒体文件的访问控制,google-app-engine,google-cloud-platform,google-cloud-storage,google-photos-api,Google App Engine,Google Cloud Platform,Google Cloud Storage,Google Photos Api,我在app Engine上部署了一个社交媒体应用程序,用户可以在其中上传照片/视频,并与私人群组共享。对于写入,我有一个POST端点,它接受上载的文件并将它们写入一个非公共的GCS bucket。对于读取,GET端点使用云SQL检查此用户是否有权访问媒体文件-如果有,则返回文件流。该文件仅存储48小时,平均每天检索20次。使用Firebase电子邮件链接登录对用户进行身份验证 当前方法的问题是,我的GET端点是一个昂贵的中间人,用于读取GCS文件流并将其传递给客户机,这增加了调用API的成本 在

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

  • 当前方法的问题是,我的GET端点是一个昂贵的中间人,用于读取GCS文件流并将其传递给客户机,这增加了调用API的成本
  • 在appengine上缓存文件没有意义,因为缓存命中率对于我的用例来说非常低
  • 如果我将GCS bucket公开,getapi可以返回GCS文件URL而不是文件流。但这意味着任何人都可以使用这个公共URL访问该文件,而不仅仅是我的应用程序或有限的用户。另外,整个桶现在都很脆弱
  • 我可以为每个GCS文件对象创建一个ACL,但ACL仅适用于具有Google帐户的用户,并且我的应用程序使用电子邮件链接身份验证。如果文件需要与100多人共享,每个对象的ACL条目也有限制
  • 我的最后一个选择是创建一个短期有效的签名链接,允许有限的未经授权的共享
  • 还标记谷歌照片。如果合作伙伴共享计划可以帮助解决这个问题,那么我可以从GCS迁移到Google Photos进行存储
  • 这看起来像是基于媒体的应用程序的常见用例。是否有任何推荐的设计模式以经济高效的方式实现目标


    这是我学习GCP的第一周,所以我在上面提到的一些问题上可能错了。

    你不应该考虑3(明显的安全原因),也不应该考虑4(处理ACL可能变得困难+你提到的限制)。我不知道谷歌照片,所以我对6没有意见。第五个解决方案很聪明,您可以直接将签名的URL存储到您的云SQL中。但是,当前的方法是否非常昂贵,以至于您需要实施另一个解决方案?毕竟,从bucket到App引擎检索文件流似乎并不那么昂贵,有什么困扰您呢?我还没有在生产中测试当前的解决方案。只是感觉从地面军事系统加载数据并在没有任何处理的情况下传递给客户是错误的。它将增加从GCS获取计算实例的网络成本,以及读取文件流实例的计算成本。