访问控制最佳实践 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

访问控制最佳实践

Amazon S3 提供了各种安全功能和工具。以下方案应作为您在执行特定任务或在特定环境中操作时可能需要使用哪些工具和设置的指南。正确应用这些工具有助于维护数据的完整性,并有助于确保目标用户可以访问您的资源。

注意

有关将 Amazon S3 Express One Zone 存储类与目录存储桶配合使用的更多信息,请参阅 什么是 S3 Express One Zone?目录桶

创建新存储桶

创建新存储桶时,您应该应用以下工具和设置来帮助确保 Amazon S3 资源受到保护。

S3 对象所有权用于简化访问控制

S3 对象所有权是 Amazon S3 存储桶级别的设置,您可以使用该设置来控制上传到存储桶的对象的所有权,并禁用或启用访问控制列表(ACL)。默认情况下,对象所有权设为强制存储桶拥有者设置,并且所有 ACL 均处于禁用状态。禁用 ACL 后,存储桶拥有者拥有存储桶中的每个对象,并使用策略专门管理对数据的访问权限。

对象所有权有三个设置,您可以使用它们来控制上传到存储桶的对象的所有权,并禁用或启用 ACL:

已禁用 ACL
  • 强制存储桶拥有者(默认)– ACL 已禁用,存储桶拥有者自动拥有并完全控制存储桶中的每个对象。ACL 不再影响 S3 存储桶中对数据的权限。存储桶专门使用策略来定义访问控制。

已启用 ACL
  • 首选存储桶拥有者 – 存储桶拥有者拥有并完全控制其他账户使用 bucket-owner-full-control 标准 ACL 写入存储桶的新对象。

  • 对象编写者 – 上载对象的 Amazon Web Services 账户拥有该对象,对其拥有完全控制权,并且可以通过 ACL 授予其他用户访问该对象的权限。

有关更多信息,请参阅 为您的存储桶控制对象所有权和禁用 ACL。

屏蔽公共访问权限

S3 屏蔽公共访问权限提供四种设置,以帮助您避免无意中公开 S3 资源。您可以任意组合将这些设置应用于单个接入点、存储桶或整个 Amazon Web Services 账户。如果您将某一设置应用于某个账户,则该设置将应用于该账户拥有的所有存储桶和接入点。默认情况下,为新存储桶启用四个屏蔽所有公共访问权限设置。我们建议您将所有这四个设置保持为启用状态,除非您知道您需要为您的特定使用案例关闭其中一个或多个设置。您可以使用 Amazon S3 控制台修改各个“屏蔽公共访问权限”设置。

有关更多信息,请参阅 “公有”的含义

如果要向特定用户授予访问权限,我们建议您使用 Amazon Identity and Access Management(IAM)策略,而不是禁用所有“屏蔽公共访问权限”设置。将“屏蔽公共访问权限”保持为启用状态是一种安全最佳实践。将“屏蔽公共访问权限”与 IAM 身份结合使用,有助于确保被“屏蔽公共访问权限”设置屏蔽的任何操作都会被拒绝,除非已向被请求的用户授予特定权限。

有关更多信息,请参阅 屏蔽公共访问权限设置

使用 IAM 身份授予访问权限

为需要 S3 访问权限的新团队成员设置账户时,请使用 IAM 用户和角色来确保最低权限。还可以实施一种形式的 IAM 多重验证 (MFA) 来支持强大的身份基础。通过使用 IAM 身份,您可以向用户授予独特的权限,并指定用户可以访问哪些资源以及他们可以执行什么操作。IAM 身份提供了增强的功能,此类功能包括要求用户在访问共享资源之前先输入登录凭证,并将权限层次结构应用于单个存储桶中的不同对象。

有关更多信息,请参阅 示例 1:存储桶拥有者向其用户授予存储桶权限

存储桶策略

通过存储桶策略,您可以对存储桶访问权限进行个性化设置,以帮助确保只有那些您已批准的用户才能访问资源并在其中执行操作。除了存储桶策略之外,我们建议使用存储桶级别的“屏蔽公共访问权限”设置来进一步限制对数据的公共访问。

有关更多信息,请参阅 使用存储桶策略

创建策略时,请避免在 Principal 元素中使用通配符(*),因为使用通配符将允许任何人访问您的 Amazon S3 资源。而应明确列出允许访问存储桶的用户或组。在适用的情况下向他们授予特定权限,而不是包含通配符来执行其操作。

为进一步保持最低权限的做法,Effect 元素中的 Deny 语句应尽可能宽泛,而 Allow 语句应尽可能受限。与 s3:* 操作配对的 Deny 效果是为策略条件语句中包含的用户实现选择加入最佳实践的另一个好方法。

有关指定策略生效的条件的更多信息,请参阅Amazon S3 条件键示例

VPC 设置中的存储桶

在企业设置中添加用户时,您可以使用 Virtual Private Cloud (VPC) 端点来允许虚拟网络中的任何用户访问您的 Amazon S3 资源。VPC 端点使开发人员能够根据用户所连接的网络为用户组提供特定的访问权限。如果请求不是源自指定的端点,您可以使用 VPC 端点拒绝存储桶访问,而不是将每个用户添加到 IAM 角色或组。

有关更多信息,请参阅 使用存储桶策略控制从 VPC 端点的访问

存储和共享数据

使用以下工具和最佳实践来存储和共享您的 Amazon S3 数据。

版本控制和对象锁定以实现数据完整性

如果您使用 Amazon S3 控制台管理存储桶和对象,我们建议实施 S3 版本控制和 S3 对象锁定。这些功能有助于防止意外地更改关键数据,并使您能够回滚意料之外的操作。当有多个具有完全写入和执行权限的用户访问 Amazon S3 控制台时,此回滚功能特别有用。

有关 S3 版本控制的信息,请参阅在 S3 存储桶中使用版本控制。有关对象锁定的信息,请参阅使用 S3 对象锁定

对象生命周期管理以实现成本效率

要管理您的对象以使这些对象在其整个生命周期内经济高效地进行存储,您可以将生命周期配置与 S3 版本控制配对。生命周期配置定义您希望 Amazon S3 在对象的生命周期内执行的操作。例如,您可以创建一个生命周期配置,该策略将对象转换为另一个存储类,将对象存档,或在指定时间段后删除它们。您可以使用共享前缀或标签为存储桶中的所有对象或为对象子集定义生命周期配置。

有关更多信息,请参阅 管理存储生命周期

针对多个办公地点的跨区域复制

创建可由不同办公地点访问的存储桶时,请考虑实施 S3 跨区域复制。跨区域复制有助于确保所有用户都能访问他们所需的资源,并提高运营效率。跨区域复制通过跨不同 Amazon Web Services 区域 中的 S3 存储桶复制对象,提高了可用性。但是,使用此功能会增加存储成本。

有关更多信息,请参阅 复制对象

安全静态网站托管的权限

将存储桶配置为用作公开访问的静态网站时,您必须禁用所有“屏蔽公共访问权限”设置。在为静态网站编写存储桶策略时,请确保仅允许 s3:GetObject 操作,而非 ListObjectPutObject 权限。这样做有助于确保用户无法查看存储桶中的所有对象或添加自己的内容。

有关更多信息,请参阅 设置访问网站的权限

我们建议将“屏蔽公共访问权限”保留为启用状态。如果要将所有四个“屏蔽公共访问权限”设置保持为启用状态并托管静态网站,则可以使用 Amazon CloudFront 来源访问控制(OAC)。Amazon CloudFront 提供了设置安全静态网站所需的功能。Amazon S3 静态网站仅支持 HTTP 端点。CloudFront 使用 Amazon S3 的持久存储,同时提供额外的安全标头,如 HTTPS。HTTPS 通过加密正常 HTTP 请求并防范常见的网络攻击来增强安全性。

有关更多信息,请参阅《Amazon CloudFront 开发人员指南》中的安全静态网站入门

共享资源

您可以通过多种不同的方式与特定用户组共享资源。您可以使用以下工具将一组文档或其他资源共享给单个用户组、一个部门或一个办公室。尽管这些工具都可以用来实现相同的目标,但某些工具可能比其他工具更好地与您的现有设置配对。

S3 对象所有权

S3 对象所有权是 Amazon S3 存储桶级别的设置,您可以使用该设置来控制上传到存储桶的对象的所有权,并禁用或启用访问控制列表(ACL)。默认情况下,对象所有权设为强制存储桶拥有者设置,并且所有 ACL 均处于禁用状态。禁用 ACL 后,存储桶拥有者拥有存储桶中的每个对象,并使用策略专门管理对数据的访问权限。

Amazon S3 中的大多数现代使用案例不再需要使用 ACL。我们建议您将 ACL 保持为禁用状态,除非有必须单独控制每个对象的访问权限的特殊情况。

有关更多信息,请参阅 为您的存储桶控制对象所有权和禁用 ACL。

用户策略

您可以使用 IAM 组和用户策略与有限的一组用户共享资源。创建新的 IAM 用户时,系统会提示您创建这些用户并将其添加到组中。但是,您可以随时创建用户并将其添加到组。如果您打算与之共享这些资源的各个用户已在 IAM 中设置,则可以将他们添加到公共组。然后,您可以使用 IAM 用户策略与该组共享存储桶。还可以使用 IAM 用户策略共享存储桶中的各个对象。

有关更多信息,请参阅 允许 IAM 用户访问某个存储桶

访问控制列表

作为一般规则,我们建议您使用 S3 存储桶策略或 IAM 用户策略进行访问控制。使用策略而非 ACL 可以简化权限管理。Amazon S3 ACL 是 Amazon S3 中早于 IAM 的原始访问控制机制。但是,某些访问控制方案要求使用 ACL。例如,假设存储桶拥有者要授予对于对象的访问权限,但并不是所有对象都归该存储桶拥有者所有。在这种情况下,对象拥有者必须首先使用对象 ACL 向存储桶拥有者授予权限。

Amazon S3 中的大多数现代使用案例不再需要使用 ACL。我们建议您禁用 ACL,除非有必须单独控制每个对象的访问权限的特殊情况。使用对象所有权,您可以禁用 ACL 并依赖策略进行访问控制。禁用 ACL 时,您可以轻松地维护包含由不同 Amazon Web Services 账户上传的对象的存储桶。作为存储桶拥有者,您拥有存储桶中的所有对象,并可以使用策略管理对它们的访问。

重要

如果您的存储桶针对 S3 对象所有权使用强制存储桶拥有者设置,则必须使用策略授予对存储桶及其中对象的访问权限。启用强制存储桶拥有者设置后,设置访问控制列表 (ACL) 或更新 ACL 的请求将失败并返回 AccessControlListNotSupported 错误代码。我们仍然支持读取 ACL 的请求。

有关 ACL 的更多信息,请参阅 示例 3:存储桶拥有者授予不属于自己的对象的权限

前缀

尝试共享存储桶中的特定资源时,您可以使用前缀复制文件夹级别的权限。Amazon S3 控制台支持将文件夹概念作为通过为对象使用共享的名称前缀而对于对象进行分组的一种方式。然后,要授予 IAM 用户访问与该前缀相关联的资源的明确权限,您可以在 IAM 用户策略的条件中指定该前缀。

有关更多信息,请参阅 使用文件夹在 Amazon S3 控制台中整理对象

标记

如果您使用对象标签对存储进行分类,则可以与指定的用户共享已使用特定值标记的对象。通过资源标签,您可以根据与用户尝试访问的资源相关联的标签来控制对对象的访问。要允许访问标记的资源,请使用 IAM 用户策略中的 ResourceTag/key-name 条件。

有关更多信息,请参阅《IAM 用户指南》中的使用资源标签控制对 Amazon 资源的访问

保护数据

使用以下工具来帮助保护传输中的数据和静态数据,这两者对于保持数据的完整性和可访问性至关重要。

Object encryption

Amazon S3 提供了多种对象加密选项,用于保护传输中的数据和静态数据。服务器端加密在将对象保存到数据中心的磁盘上之前加密对象,然后在下载对象时对数据进行解密。只要您验证了您的请求并且拥有访问权限,您访问加密和未加密对象的方式就没有区别。设置服务器端加密时,您有三个相互排斥的选项:

  • 具有 Amazon S3 托管密钥的服务器端加密 (SSE-S3)

  • 具有 Amazon Key Management Service (Amazon KMS) 密钥的服务器端加密 (SSE-KMS)

  • 具有客户提供密钥的服务器端加密 (SSE-C)

有关更多信息,请参阅 使用服务器端加密保护数据

客户端加密是在将数据发送到 Amazon S3 之前加密数据的行为。有关更多信息,请参阅 使用客户端加密保护数据

签名方法

签名版本 4 是将身份验证信息添加到通过 HTTP 发送的 Amazon 请求的过程。出于安全考虑,大多数 Amazon 请求都必须使用访问密钥(包括访问密钥 ID 和秘密访问密钥)进行签名。这两个密钥通常称为您的安全凭证。

有关更多信息,请参阅对请求进行身份验证 (Amazon Signature Version 4)Signature Version 4 签名过程

日志记录和监控

监控是维护 Amazon S3 解决方案的可靠性、可用性和性能的重要组成部分,以便在发生多点故障时,您可以更轻松地调试多点故障。日志记录可以帮助您深入了解用户收到的任何错误,以及何时发出了什么样的请求。Amazon 提供了几种用于监控 Amazon S3 资源的工具:

  • Amazon CloudWatch

  • Amazon CloudTrail

  • Amazon S3 访问日志

  • Amazon Trusted Advisor

有关更多信息,请参阅 Amazon S3 中的日志记录和监控

Amazon S3 与 Amazon CloudTrail 集成,后者是在 Amazon S3 中提供用户、角色或 Amazon Web Service所采取操作的记录的服务。此功能可与 Amazon GuardDuty 配对,以通过分析 CloudTrail 管理事件和 CloudTrail S3 数据事件来监控 Amazon S3 资源威胁。这些数据源监控不同类型的活动。例如,与 Amazon S3 相关的 CloudTrail 管理事件包括列出或配置 S3 项目的操作。GuardDuty 分析来自您的所有 S3 存储桶的 S3 数据事件,并监控它们是否存在恶意和可疑活动。

有关更多信息,请参阅《Amazon GuardDuty 用户指南》中的 Amazon GuardDuty 中的 Amazon S3 保护