提供来自Google云端存储的用户上传的私有媒体

时间:2018-09-28 19:56:31

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

我正在为我的新项目评估使用GCP,但是,我仍在尝试弄清楚如何实现以下功能以及其将产生的费用。

TL; DR

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

功能描述

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

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

困境

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

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

到目前为止,最接近的功能是签名URL,但这不能满足即使您拥有URL也无法访问它的要求,即使该URL不久之后就会失效,这也许是一个很好的折衷方案。 br /> 这种方法的另一个问题是无法在浏览器级别缓存媒体,从长远来看可以节省大量带宽。

昂贵的解决方案?

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

这应该满足所有要求,但是我担心出口成本飞涨:(


谢谢任何有帮助的人!

1 个答案:

答案 0 :(得分:1)

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

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

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

除非您从中受益,否则我不建议您使用基于GCE的方法。我看不到它如何增加任何额外的安全性来直接提供数据,而不是通过签名的URL。