【问题标题】:Serve private, user-uploaded media from Google Cloud Storage提供来自 Google Cloud Storage 的私有、用户上传的媒体
【发布时间】:2018-09-28 19:56:30
【问题描述】:

我正在评估在我的新项目中使用 GCP,但是,我仍在尝试弄清楚如何实现以下功能以及它将产生什么样的成本。

TL;DR

从 GCP 为用户上传的媒体提供服务,同时让用户完全控制谁可以访问它们的最佳策略是什么?

功能说明

作为用户,我想以私密且安全的方式上传某种媒体(例如:图片、视频等)。
媒体必须对我和我已授予访问权限的特定用户子组可见。
任何人都不能访问媒体,即使他获得了 URL。

媒体内容随后将显示在网站上。

困境

我想使用 Cloud Storage 来存储所有媒体,但是,我正在努力为授权部分找到合适的解决方案。

据我所知,与“访问控制”相关的功能大多是在项目和组织级别定制的。

到目前为止,最接近的功能是签名 URL,但这并不能满足即使您拥有该 URL 也无法访问它的要求,即使它很快就会过期,也许它可能是一个很好的折衷方案。 这种方法的另一个问题是媒体无法在浏览器级别缓存,从长远来看,这可以节省相当多的带宽......

昂贵的解决方案?

我想到的一个解决方案是,我可以通过 GCE 实例提供它,方法是在其中放置一个验证用户的应用程序,可能通过 JWT,然后在使用适当的缓存标头时将其流回。

这应该可以满足所有要求,但我担心出口成本会飙升:(


感谢愿意提供帮助的人!

【问题讨论】:

  • 无论是来自 GCE 还是 GCS,您都会收取相同的出口价格?
  • @Hitobat 你是对的,现在我仔细检查了,CE 和 Storage 之间的流量对于同一区域应该是免费的,所以唯一的出口成本是 CE 的,这确实是一样的作为存储!感谢您指出:)

标签: google-cloud-platform google-cloud-storage access-control


【解决方案1】:

签名 URL 是您想要的解决方案。

创建一个代表您的应用程序的服务帐户。当您的应用程序的用户想要上传对象时,向他们提供签名 URL 以执行上传。只有您的服务帐户(以及您项目的其他成员)才能读取新对象。

当用户想要查看对象时,执行您喜欢的任何检查,然后向他们提供签名 URL 以读取对象。如果您担心 URL 被共享,请设置较短的过期时间。

除非您从中获得一些额外的好处,否则我不会推荐基于 GCE 的方法。我看不出它如何增加任何额外的安全性来直接而不是通过签名的 URL 提供数据。

【讨论】:

  • 如果我错了,请纠正我,但我不认为媒体可以在浏览器级别正确缓存,因为 URL 由于签名和过期而发生变化;这可以为常用媒体(如用户个人资料图像等)节省大量流量……事实证明,这样做的价格应该是相同的,所以我目前倾向于该解决方案。你能看到任何其他更喜欢签名 URL 的理由吗?
猜你喜欢
  • 2021-01-06
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
相关资源
最近更新 更多