amazon-web-services - 通过 API 为 AWS S3 授予第三方访问权限
问题描述
如何让其他用户访问我的 AWS S3 存储桶,而无需为其创建 IAM 角色并发送密钥/秘密。我希望第三方自己决定凭据。
这甚至可能吗?
基本上我正在寻找类似于 S3 的 OAuth 的东西
解决方案
默认情况下,Amazon S3 存储桶是私有的。
可以通过多种方式授予对对象的访问权限:
- 存储桶策略可以使存储桶或存储桶的一部分可公开访问(不适用于您的用例)
- 对象上的访问控制列表 (ACL)可以使其公开访问(不适用于您的用例)
- 可以向IAM 用户授予对 Amazon S3 存储桶的权限(但 IAM 用户只能用于您的员工,不能用于应用程序用户)
- 可以临时承担IAM 角色,但首先需要身份验证(更多内容见下文)
- 可以生成预签名 URL以提供对 Amazon S3 对象的限时访问
对于您的用例,最适用的方法是:
- 用户对您的应用程序进行身份验证。这可以使用 Amazon Cognito 或您希望使用的任何身份验证方法。
- 当用户希望访问私有对象时,您的应用程序将确定他们是否有权进行此类访问(通过您自己的代码完成)。
- 如果他们被允许访问,应用程序应该生成一个预签名的 URL。此 URL 可以包含在 和 等标签
<a>
中<img>
。 - 当用户访问 URL 时,他们将能够直接从 Amazon S3 访问对象。
- 一旦到期时间过去,预签名 URL 将不再有效。
因此,欢迎您使用 OAuth 或任何其他身份验证方法,但您的应用程序有责任确定它们是否有权访问单个对象,如果是,则生成并返回预签名 URL。(这只是几行代码,生成它不需要 API 调用。)
请参阅:与他人共享对象 - Amazon Simple Storage Service
Amazon Cognito 能够颁发与IAM 角色关联的凭证,然后用户可以使用这些凭证对 AWS 进行 API 调用。但是,它是许多用户共享的通用角色,并不是授予用户特定权限的一种方式。
推荐阅读
- python - TypeError:“NoneType”对象不可调用:当我尝试使用 openpyxl 在 Python 中处理 excel 文件时出现此错误
- python - 保存 Keras 模型和权重
- javascript - 在 html 画布上使用鼠标绘制线未在正确位置绘制线
- exception - xampp 控制面板 EAccessViolation
- python - 获取垂直 QHeaderView 的宽度
- junit - 使用 toString() 无效使用匹配器异常
- linux-kernel - sysfs 中的 USB 总线端口表示
- android - 回收站视图未在 kotlin 中显示 JSON 数据
- python - 在循环期间添加相同的对象之前无法检查列表中是否存在对象
- angular - 如何在 Angular 9 中进行路由?