如何与组织中的用户共享私有 S3 对象或文件夹?

Jun*_*nes 0 software-design amazon-s3 amazon-web-services system-design

网站上的用户将视频和图像上传到 S3 存储桶。然后,每个用户都应该能够通过简单地输入他们的电子邮件(类似于谷歌文档)与网站上的其他用户分享他们的视频/图像。

S3 允许生成预签名 URL,但 URL 的最长有效期为 7 天。如何永久共享 S3 对象?

我知道 S3 没有文件夹的概念,但有没有办法与用户共享文件夹?

Joh*_*ein 6

首先,值得定义“用户”的含义。

一个IAM用户通常应当用于职工自己的组织内,用于创建和管理AWS资源。IAM用户应为你的应用程序的最终用户创建。

因此,以下所有提及的“用户”均指应用程序用户

您的应用程序的一般流程是:

  • 用户通过您实施的任何身份验证方法登录到您的应用程序
  • 如果用户想要访问特定文件,或者您希望显示包含文件链接的网页,则应用程序应验证用户是否有权访问该对象
  • 如果访问是允许的,应用程序应该产生一个Amazon S3的预先签订网址签署预先给出对象有时间限制的访问(A URL仅适用于特定对象,它是能够产生预签名URL一个文件夹。)
  • 这些预先签名的 URL 通常在用户请求文件或显示引用文件的页面时按需生成

上述流程的一个示例是照片共享应用程序,用户可以在其中相互共享照片。共享过程可能非常复杂(公共照片、私人照片、用户与其他用户共享照片子集),因此应用程序将负责确定访问权限(而不是 IAM)。

如果您希望提供指向对象的永久链接,则需要实现自己的逻辑。该链接应引用所需的对象,并且应特定于请求访问的用户。您的应用程序将:

  • 验证该用户是否仍然有权访问该对象(自链接生成后权限可能已更改)
  • 如果用户被允许访问,要么直接提供对象的内容,要么将请求重定向到一个短期的预签名 URL

这种永久链接需要由您的应用程序专门实现。它类似于 DropBox 生成的链接。访问验证由应用程序执行,而不是 Amazon S3。