首页 > 解决方案 > 通过 API 为 AWS S3 授予第三方访问权限

问题描述

如何让其他用户访问我的 AWS S3 存储桶,而无需为其创建 IAM 角色并发送密钥/秘密。我希望第三方自己决定凭据。

这甚至可能吗?

基本上我正在寻找类似于 S3 的 OAuth 的东西

标签: amazon-web-servicesamazon-s3oauth

解决方案


默认情况下,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 调用。但是,它是许多用户共享的通用角色,并不是授予用户特定权限的一种方式。


推荐阅读