amazon-web-services - 如何与组织中的用户共享私有 S3 对象或文件夹?
问题描述
网站上的用户会将视频和图像上传到 S3 存储桶。然后,每个用户都应该能够通过简单地输入他们的电子邮件(类似于谷歌文档)与网站上的其他用户分享他们的视频/图像。
S3 允许生成预签名 URL,但 URL 的最长有效期为 7 天。如何永久共享 S3 对象?
我知道 S3 没有文件夹的概念,但有没有办法与用户共享文件夹?
解决方案
首先,值得定义“用户”的含义。
IAM 用户通常应用于您自己组织内的员工,用于创建和管理 AWS 资源。不应为您的应用程序的最终用户创建IAM 用户。
因此,以下所有提及的“用户”均指应用程序用户。
您的应用程序的一般流程是:
- 用户通过您实施的任何身份验证方法登录到您的应用程序
- 如果用户想要访问特定文件,或者您希望呈现包含文件链接的网页,则应用程序应验证用户是否有权访问该对象
- 如果允许访问,应用程序应生成一个Amazon S3 预签名 URL,该 URL 提供对对象的限时访问(预签名 URL 仅适用于特定对象。不可能为以下对象生成预签名 URL一个文件夹。)
- 这些预签名 URL 通常在用户请求文件时或在显示引用文件的页面时按需生成
上述流程的一个示例是照片共享应用程序,用户可以在其中彼此共享照片。共享过程可能非常复杂(公共照片、私人照片、用户与其他用户共享照片子集),因此应用程序将负责确定访问权限(而不是 IAM)。
如果您希望提供到对象的永久链接,则需要实现自己的逻辑。该链接应引用所需的对象,并且应特定于请求访问的用户。您的应用程序将:
- 验证该用户是否仍然有权访问该对象(自生成链接后权限可能已更改)
- 如果用户被允许访问,要么直接提供对象的内容,要么将请求重定向到一个短暂的预签名 URL
这样的永久链接需要由您的应用程序专门实施。它类似于 DropBox 生成的链接。访问验证由应用程序执行,而不是 Amazon S3。
推荐阅读
- javascript - 提交后仍会重定向 AJAX 调用的联系表单
- unity3d - 如何从 Animator 中检索当前正在播放的动画?
- wordpress - 如何在wordpress插件联系表7中验证当前服务器时间?
- python - 如何使用 matplotlib 绘制 0/1 的数组
- docker - 使用主机网络启动 Docker 容器,同时保持 SSH 进入容器的能力?
- python - 如何使用 cx freeze 使用 setup.py 构建 msi 扩展
- python - 在 Python 中的字典中查找两个值之间的路径
- neo4j - 在 Cypher Neo4j 中找到正确的路径
- mysql - Sql 查询为每个匹配项选择一个结果
- join - 加入第二高值 (Impala)