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

How to share a private S3 objects or folder with a user in a organisation?

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

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

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

首先,有必要定义一下 "user" 的含义。

IAM 用户 通常应该供您自己组织内的员工使用,用于创建和管理 AWS 资源。应为您的应用程序的最终用户创建 IAM 用户。

因此,下面提到的所有 'user' 都是指 应用程序用户

您申请的一般流程是:

  • 用户通过您实施的任何身份验证方法
  • 登录您的应用程序
  • 如果用户想要访问特定文件,或者您希望显示包含 link 文件的网页,则应用程序应验证用户是否有权 访问对象
  • 如果允许访问,应用程序应生成一个 Amazon S3 预签名 URL 以提供对对象的限时访问(预签名 URL 仅适用于特定对象。不可能 为文件夹生成预签名 URL。)
  • 这些预签名的 URL 通常 按需生成 当用户请求文件或显示引用该文件的页面时

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

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

  • 验证该用户是否仍然有权访问该对象(权限可能在 link 生成后发生了变化)
  • 如果允许用户访问,则直接提供对象的内容或将请求重定向到短期预签名 URL

这样的永久 link 需要由您的应用程序专门实施。它类似于 DropBox 生成的 links。访问验证由应用程序而非 Amazon S3 执行。