【问题标题】:Proper way to store public and private files in a Cloud在云中存储公共和私人文件的正确方法
【发布时间】:2016-10-06 10:43:29
【问题描述】:

我正在尝试找到一种方法来存储 1 TB 的公共和私人文件和图像,这些文件和图像每天都会以极快的速度扩展。

目前,我使用连接到我们的网络服务器的小型 NAS 来存储我们所有的数据。对于每个请求,我们的 Web 应用程序可以决定登录的用户(基于 cookie)是否有权查看文件。

我目前正在将 Google Cloud Storage 视为存储我们所有数据的一种方式。此解决方案非常适合我们的公共文件,但我找不到使它适用于我们的私人文件的好方法。

我知道 Google Cloud Storage 允许我们创建在有限时间内有效的签名 URL,但我不确定这对于大量请求是否真的安全有效。

我能想到的另一种方法是拥有一种代理服务器,如果用户有权限,它将从谷歌云存储下载文件并将其交付给客户端,但这不会浪费带宽?

根据您的经验,是否有存储此类数据的好方法?它不必是 Google Cloud Storage,但它必须易于扩展。

谢谢!

【问题讨论】:

  • 签名 URL 是执行此操作的受支持方式。您有哪些安全和效率问题?
  • 您能否告诉我用户需要多久通过身份验证才能下载文件?签名 URL 很可能会起作用,但如果您需要生成超过每秒一千个左右的数据,您可能需要评估这项工作的成本。
  • 我担心任何拥有签名 URL 的人都可以访问该文件。这难道不是一种通过默默无闻的安全感并被认为是不好的吗?我们所有的用户都经过身份验证。一些图像,如用户缩略图是公开的,但其他图像如个人 PDF 和文件交付必须保持私密。我怀疑在运营的第一年我们是否需要每秒签署超过 50 个请求。
  • 我看不到签名 URL 的分发如何带来额外的安全风险。大概您的意图是授予用户对对象内容的临时访问权限。用户拥有内容后,数据就无法控制,用户可以与任何人共享该内容。无论用户如何获取内容(通过签名 URL 或其他机制),您都容易受到此攻击。
  • 我想我知道我将如何进行。公共文件将驻留在公共存储桶中,私有文件将驻留在私有存储桶中。我不会生成一堆可能永远无法访问的签名 URL,而是添加一个“下载”链接,该链接将在我们的 Web 应用程序中验证用户的身份和权限。如果用户有权访问,此链接将生成签名 URL 并将用户重定向到该 URL。签名的 URL 的生存时间很短,因此不应共享它或导致任何我能想到的安全问题。感谢您的意见!

标签: cloud google-cloud-storage


【解决方案1】:

私有存储分区确实是隔离非公共文件的最佳方式。我在需要用户授权的 ASP.NET 应用程序中设置了我的设置,因此我的下载脚本对帐户进行身份验证,然后按存储桶和文件名提供文件。

【讨论】:

  • 感谢您的回答。我对我的应用程序逻辑进行了一些更改,这就是我最终要做的。我仍然想知道应用程序是否应该从私有存储桶下载文件并将其提供给用户,或者我是否应该生成一个短时间的签名 URL 并将用户重定向到它。
  • 不客气。如果您此时不需要对用户进行身份验证或授权,为什么不让应用程序下载它并让用户的浏览器根据用户的偏好来处理它呢?您还可以在下载代码中为文件命名,这样用户就不会看到其云存储地址。
猜你喜欢
  • 2011-08-17
  • 2019-01-25
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 2017-05-13
  • 2016-05-30
  • 2021-09-08
  • 1970-01-01
相关资源
最近更新 更多