来自 S3 或其他地方的共享内容

Shared content from S3 or elsewhere

如果您有一个应用程序,其中用户的数据存储在 S3 存储桶中,但他们可以 select 与谁共享数据,保护此数据的最佳技术是什么?例如,如果 Instagram 使用 S3(或其他一些集中式存储提供商),他们将如何保护他们的图像数据,以便您只能看到您被授权查看的图片?

来自大 url 字符串的晦涩似乎是一种方法,但我很好奇是否有更好的技术?

默认情况下,Amazon S3 中的所有对象都是私有的。然后您可以添加权限,以便人们可以访问您的对象。这可以通过以下方式完成:

  • 适用于单个对象的访问控制列表
  • 将规则应用于整个存储桶的存储桶策略
  • IAM 将权限应用到特定用户和组
  • A 预签名 URL 授予对单个对象的临时访问权限

如果你想"select who to share it with",有两个选择:

  • 如果此人在 IAM 中定义为用户,则针对该 用户
  • 分配权限
  • 如果此人 在 IAM 中定义(例如 Instagram 用户),则使用 预签名 URL

A Pre-Signed URL 授予对 S3 对象的访问权限,作为 "overriding" 访问控制的一种方式。通过附加到期时间和签名,可以通过 URL 访问通常私有的对象。这是从 Amazon S3 提供私人内容的好方法。

基本上,如果应用程序确定用户有权访问 Amazon S3 中的某个对象,它可以生成 link 提供对该对象的临时访问权限 .拥有该 link 的任何人都可以访问该对象,但一旦时间段到期,它将不再有效。

预签名 URL 可以通过 AWS SDK(适用于大多数流行的编程语言)生成。也可以通过AWS Command-Line Interface (CLI).

中的aws s3 presign命令生成

预签名 URL 甚至可以在网页 中使用 。例如,HTML 可能引用使用 <img> 标签的图片,其中 src 是预签名的 URL。这样就可以在页面上显示私密图片,但是搜索引擎就抓不到了。