首页 > 解决方案 > 如何与组织中的用户共享私有 S3 对象或文件夹?

问题描述

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

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

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

标签: amazon-web-servicesamazon-s3software-designsystem-design

解决方案


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

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

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

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

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

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

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

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

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


推荐阅读