google-cloud-platform - 通过 Google Cloud Storage 提供用户上传的私有(private)媒体

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

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

TL;DR

从 GCP 提供用户上传媒体的最佳策略是什么,同时让用户完全控制哪些人可以访问这些媒体?

功能描述

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

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

困境

我想使用云存储来存储所有媒体,但是,我很难找到适合授权部分的解决方案。

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

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

昂贵的解决方案?

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

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


感谢所有提供帮助的人!

最佳答案

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

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

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

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

关于google-cloud-platform - 通过 Google Cloud Storage 提供用户上传的私有(private)媒体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52561937/

相关文章:

python - 在 Google Cloud Compute 实例启动时启动 python 脚本

python - BigQuery API 的 GKE Pod 下载速度很慢

curl - 在Docker容器中运行Apache Cassandra

wordpress - 是否可以使用 "Always free products"在 Google Cloud 上永久免费运行 Wordpress 站点?

c# - 如何修复不一致且缓慢的 Google Cloud Storage 响应时间?

swift - 为什么访问控制有用?

google-cloud-platform - 缺少对 "billingAccounts/XXXXXXXXXXXXXXXXXXXXXXXX": billing. resourceAssociations.create Terraform (GCP) 的权限

linux - 如何使用 linux cmd 提示符压缩带有 unicode 编码的文件?

java - Java 可以启动 Windows UAC 吗?

php - 使用通配符提供访问控制允许来源