首页 > 解决方案 > 如何实现对 S3 存储桶中单个对象的访问控制?

问题描述

我有一个默认为私有的 S3 存储桶。现在我想对这个桶的对象实现访问控制。

例如,如果存储桶包含三个对象 A、B、C,则对象 A、B 可以是公共的,而对象 C 可以是私有的。
应该可以将公共对象设为私有,反之亦然。私有对象只能由选定的应用程序用户访问,公共对象将可供所有人访问。有没有办法实现它?
到目前为止,我已经研究了对象标记。但我不完全确定它是否适用于我的情况。

标签: amazon-s3

解决方案


您是正确的,Amazon S3 中的对象默认是私有的。

然后,您可以通过多种方法授予访问权限:

  • 在单个对象上设置访问控制列表 (ACL)以使其公开(或将其设置回私有)
  • 创建存储桶策略以授予对整个存储桶或存储桶内路径的访问权限
  • 向IAM 用户添加策略以允许该用户访问所有/部分 Amazon S3 存储桶
  • 创建预签名 URL以授予对私有对象的限时访问权限

因此,您当然可以将特定对象设为 Public,然后使用 ACL 将它们更改为 Private。

要使特定用户可以访问特定对象,您应该使用预签名 URL。它们的工作方式如下:

  • 用户对您的应用程序进行身份验证
  • 当用户希望访问私有对象时,应用程序负责确定是否允许他们访问它
  • 如果是这样,那么应用程序会生成一个预签名的 URL。它只需要几行代码,并且不需要对 S3 的 API 调用。
  • 然后,应用程序像任何其他链接一样提供预签名 URL,例如将其放入<a>标签或<img>标签中。与 Internet 上的任何其他资源一样,该对象将在有限的时间内可访问。
  • 持续时间到期后,URL 将不再有效(拒绝访问)

这样,您的应用程序可以完全控制谁可以访问哪些对象以及授权用户可以直接从 Amazon S3 访问这些对象。此外,应用程序用户不需要特定于 AWS 的登录;他们将对您的应用程序进行身份验证。

请参阅:与他人共享对象 - Amazon Simple Storage Service


推荐阅读