Amazon S3 的安全最佳实践 - Amazon Simple Storage Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

Amazon S3 的安全最佳实践

Amazon S3 提供了您在开发和实施自己的安全策略时需要考虑的许多安全功能。以下最佳实践是一般准则,并不代表完整的安全解决方案。由于这些最佳实践可能不适合您的环境或不满足您的环境要求,因此将其视为有用的考虑因素而不是惯例。

Amazon S3 预防性安全最佳实践

Amazon S3 的以下最佳实践可以帮助防止安全事故。

确保您的 Amazon S3 存储桶使用正确的策略且不可公有访问。

除非您明确地要求 Internet 上的任何人都能读写您的 S3 存储桶,否则您应该确保您的 S3 存储桶不是公有的。以下是您可以采取的一些步骤:

  • 使用 Amazon S3 阻止公有访问。借助 Amazon S3 阻止公有访问,账户管理员和存储桶所有者可以轻松设置集中控制,以控制对已实施的 Amazon S3 资源的公有访问(与资源的创建方式无关)。有关更多信息,请参阅使用 Amazon S3 阻止公有访问

  • 找出允许通配符标识(如委托人“*”,事实上这代表“任何人”)或允许通配符操作“*”(事实上这允许用户在 Amazon S3 存储桶中进行任何操作)的 Amazon S3 存储桶策略。

  • 类似地,注意向“任何人”或者“任何经过身份验证的 AWS 用户”提供读、写或完整访问权限的 Amazon S3 存储桶访问控制列表 (ACL)。

  • 使用 ListBuckets API 扫描您的所有 Amazon S3 存储桶。然后,使用 GetBucketAclGetBucketWebsiteGetBucketPolicy 确定存储桶是否拥有符合要求的访问管理和配置。

  • 使用 AWS Trusted Advisor 检查您的 Amazon S3 实现。

  • 考虑使用 s3-bucket-public-read-prohibiteds3-bucket-public-write-prohibited 托管的 AWS Config Rules 实现持续的侦测性控制。

有关更多信息,请参阅 Amazon Simple Storage Service 控制台用户指南 中的设置存储桶和对象访问权限

实现最低权限访问

在授予权限时,您可以决定谁获得哪些 Amazon S3 资源的哪些权限。您可以对这些资源启用希望允许的特定操作。因此,您应仅授予执行任务所需的权限。实施最低权限访问对于减小安全风险以及可能由错误或恶意意图造成的影响至关重要。

为实现最低权限访问,可以使用以下工具:

有关选择一个或多个前述机制时所要考虑的事项的指南,请参阅Amazon S3 资源访问权限管理简介

对需要 Amazon S3 访问权限的应用程序和 AWS 服务使用 IAM 角色。

对于 Amazon EC2 或其他 AWS 服务上访问 Amazon S3 资源的应用程序,在其 AWS API 请求中必须包含有效的 AWS 凭证。您不应直接在该应用程序或 Amazon EC2 实例中存储 AWS 凭证。这些是不会自动轮换的长期凭证,如果它们受到损害,可能会对业务产生重大影响。

相反,您应该使用 IAM 角色来管理需要访问 Amazon S3 的应用程序或服务的临时凭证。在使用角色时,您不需要将长期凭证(如用户名和密码或访问密钥)分配给 Amazon EC2 实例或 AWS 服务(例如 AWS Lambda)。角色可提供临时权限供应用程序在调用其他 AWS 资源时使用。

有关更多信息,请参阅 IAM 用户指南 中的以下主题:

启用多重验证 (MFA) 删除

MFA 删除可以帮助阻止意外删除存储桶。如果未启用 MFA 删除,任何具有充分特权根目录的密码的用户或 IAM 用户都可以永久删除 Amazon S3 对象。

MFA 删除要求对以下任一操作进行额外身份验证:

  • 更改存储桶的版本控制状态

  • 永久删除对象版本

有关更多信息,请参阅 MFA 删除

考虑静态数据加密

您可以通过以下选项在 Amazon S3 中保护静态数据:

  • 服务器端加密 – 请求 Amazon S3 在将对象保存到数据中心的磁盘上之前加密对象,然后在下载对象时进行解密。服务器端加密可以帮助减少数据面临的风险:通过使用存储在一个不同机制(而不是存储数据本身的机制)中的密钥来加密数据。

    Amazon S3 提供了以下服务器端加密选项:

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

    • 在 AWS Key Management Service 中存储客户主密钥的服务器端加密 (SSE-KMS)。

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

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

  • 客户端加密 – 在客户端加密数据并将加密的数据上传到 Amazon S3。在这种情况下,您需要管理加密过程、加密密钥和相关的工具。如服务器端加密一样,客户端加密可以帮助减少面临的风险:通过使用存储在一个不同机制(而不是存储数据本身的机制)中的密钥来加密数据。

    Amazon S3 提供多个客户端加密选项。有关更多信息,请参阅使用客户端加密保护数据

对传输中的数据执行加密

您可以使用 HTTPS (TLS) 帮助防止潜在攻击者使用中间人攻击或类似攻击来窃听或操纵网络流量。您应该在 Amazon S3 存储桶策略上使用 aws:SecureTransport 条件,以只允许通过 HTTPS (TLS) 的加密连接。

也可以考虑使用 s3-bucket-ssl-requests-only 托管的 AWS Config 规则来实现持续的侦测性控制。

考虑使用 S3 对象锁定

借助 S3 对象锁定,您可以使用“一次写入,多次读取”(WORM) 模式来存储对象。S3 对象锁定可帮助防止意外或不当的数据删除。例如,您可以使用 S3 对象锁定来帮助保护 AWS CloudTrail 日志。

启用版本控制

版本控制是在相同的存储桶中保留对象的多个变量的方法。对于 Amazon S3 桶中存储的每个对象,您可以使用版本控制功能来保存、检索和还原它们的各个版本。使用版本控制能够轻松从用户意外操作和应用程序故障中恢复数据。

也可以考虑使用 s3-bucket-versioning-enabled 托管的 AWS Config 规则来实现持续的侦测性控制。

有关更多信息,请参阅 使用版本控制

考虑 Amazon S3 跨区域复制

虽然 Amazon S3 默认跨多个地理位置不同的可用区存储数据,但合规性要求所规定的数据存储距离可能更远。通过跨区域复制 (CRR),可以在远距离 AWS 区域之间复制数据以帮助满足这些要求。CRR 允许在不同 AWS 区域中的存储桶之间自动以异步方式复制对象。有关更多信息,请参阅Replication

注意

CRR 要求源和目标 S3 存储桶都已启用版本控制。

也可以考虑使用 s3-bucket-replication-enabled 托管的 AWS Config 规则来实现持续的侦测性控制。

考虑使用 VPC 终端节点进行 Amazon S3 访问

Amazon S3 的 VPC 终端节点是 Amazon Virtual Private Cloud (Amazon VPC) 内的一种逻辑实体,只允许连接到 Amazon S3。您可以使用 Amazon S3 存储桶策略来控制从特定 Amazon VPC 终端节点或特定 VPC 对存储桶的访问。一个 VPC 终端节点可以帮助阻止流量潜在地穿越开放 Internet 和进入开放 Internet 环境中。

Amazon S3 的 VPC 终端节点提供两种方式来控制对 Amazon S3 数据的访问:

  • 您可以控制允许通过特定 VPC 终端节点访问的请求、用户或组。

  • 可以使用 S3 存储桶策略控制哪些 VPC 或 VPC 终端节点有权访问 S3 存储桶。

  • 您可以使用没有 Internet 网关的 VPC 来阻止数据泄露。

有关更多信息,请参阅 的 VPC 终端节点的示例存储桶策略Amazon S3

Amazon S3 监测和审计最佳实践

Amazon S3 的以下实践可以帮助检测潜在的安全弱点和事故。

确定和审计您所有的 Amazon S3 存储桶

确定您的 IT 资产是监管和安全性的一个至关重要的方面。您需要了解您所有的 Amazon S3 资源,以评估它们的安全态势并对潜在的薄弱领域采取措施。

使用标签编辑器确定安全性敏感或审计敏感资源,然后在您需要搜索这些资源时使用这些标签。有关更多信息,请参阅搜索要标记的资源

出于业务、合规性和法规要求,使用 Amazon S3 清单来审计和报告对象的复制和加密状态。有关更多信息,请参阅 Amazon S3 清单

为您的 Amazon S3 资源创建资源组。有关更多信息,请参阅什么是 AWS 资源组?

使用 AWS 监控工具实现监控

监控是保持 Amazon S3 和您的 AWS 解决方案的可靠性、安全性、可用性和性能的重要部分。AWS 为您提供了一些可以用来监控 Amazon S3 和您的其他 AWS 服务的工具。例如,您可以监控 Amazon S3 的 CloudWatch 指标,特别是 PutRequestsGetRequests4xxErrorsDeleteRequests。有关更多信息,请参阅 使用 监控指标Amazon CloudWatch监控Amazon S3

有关另一个示例,请参阅示例:Amazon S3 存储桶活动。此示例介绍如何创建 Amazon CloudWatch 警报,当对 PUT 或 DELETE 存储桶策略、存储桶生命周期、存储桶复制执行 Amazon S3 API 调用时,或者 PUT 存储桶 ACL 时,会触发此警报。

启用 Amazon S3 服务器访问日志记录

服务器访问日志记录详细地记录对存储桶提出的各种请求。服务器访问日志可以在安全和访问审计方面为您提供帮助,帮您了解您的用户群和了解您的 Amazon S3 账单。有关启用服务器访问日志记录的说明,请参阅 Amazon S3 服务器访问日志记录

也可以考虑使用 s3-bucket-logging-enabled 托管的 AWS Config 规则来实现持续的侦测性控制。

使用 AWS CloudTrail

AWS CloudTrail 提供用户、角色或 AWS 服务在 Amazon S3 中执行的操作的记录。可以使用 CloudTrail 收集的信息确定向 Amazon S3 发出了什么请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间以及其他详细信息。例如,您可以确定影响数据访问的 Put 操作的 CloudTrail 实体,尤其是 PutBucketAclPutObjectAclPutBucketPolicyPutBucketWebsite。当您设置 AWS 账户时,默认情况下 CloudTrail 处于启用状态。您可以在 CloudTrail 控制台中查看最近的事件。要为 Amazon S3 存储桶创建活动和事件的持续记录,您可以在 CloudTrail 控制台中创建跟踪。有关更多信息,请参阅 AWS CloudTrail User Guide 中的 记录数据事件以便跟踪

创建跟踪时,可以配置 CloudTrail 以记录数据事件。数据事件是在资源上或在资源内执行的资源操作的记录。在 Amazon S3 中,数据事件记录单个存储桶的对象级 API 活动。CloudTrail 支持 Amazon S3 对象级 API 操作的子集,例如 GetObjectDeleteObjectPutObject。有关如何将 CloudTrail 与 Amazon S3 结合使用的更多信息,请参阅 记录 Amazon S3 API呼叫使用 AWS CloudTrail。在 Amazon S3 控制台中,您还可以配置 S3 存储桶以启用 CloudTrail 的对象级日志记录

AWS Config 提供了托管规则 (cloudtrail-s3-dataevents-enabled),您可以使用该规则来确认至少有一个 CloudTrail 跟踪正在记录 S3 存储桶的数据事件。有关更多信息,请参阅 AWS Config Developer Guide 中的 cloudtrail-s3-dataevents-enabled

启用 AWS Config

此主题中列出的几个最佳实践建议创建 AWS Config 规则。AWS Config 让您能够评估、审计和评价您的 AWS 资源的配置。AWS Config 监控资源配置,让您能够针对需要的安全配置评估所记录的配置。使用 AWS Config,您可以查看配置更改以及 AWS 资源之间的关系,调查详细的资源配置历史记录,并判断您的配置在整体上是否符合内部指南中所指定的配置要求。这可以帮助您简化合规性审核、安全性分析、变更管理和操作故障排除。有关更多信息,请参阅 AWS Config 开发人员指南 中的使用控制台设置 AWS Config。当指定要记录的资源类型时,确保您包括了 Amazon S3 资源。

有关如何使用 AWS Config 监控并响应允许公有访问的 Amazon S3 存储桶的示例,请参阅 AWS 安全博客 上的如何使用 AWS Config 来监控和响应允许公有访问的 Amazon S3 存储桶

考虑将 Amazon Macie 与 Amazon S3 结合使用

Macie 使用机器学习来自动发现、分类和保护 AWS 中的敏感数据。Macie 可识别敏感数据,如个人身份信息 (PII) 或知识产权。它为您提供仪表板和提醒,可让您查看如何访问或移动此数据。有关更多信息,请参阅 Amazon Macie 是什么?

监控 AWS 安全公告

您应该经常为您的 AWS 账户检查在 Trusted Advisor 中发布的安全公告。尤其注意有关具有“开放访问权限”的 Amazon S3 存储桶的警告。 您可以使用 describe-trusted-advisor-checks 以编程方式完成此操作。

再者,积极地监控向您的每一个 AWS 账户注册的原始邮件地址。AWS 将就可能影响您的紧急安全事件使用该邮箱地址与您联系。

具有广泛影响的 AWS 操作性问题将在 AWS 服务运行状况控制面板上发布。操作性问题也会通过 Personal Health Dashboard 发布给个人账户。有关更多信息,请参阅 AWS Health 文档