Amazon S3 的安全最佳实践
Amazon S3 提供了在您开发和实施自己的安全策略时需要考虑的大量安全特征。以下最佳实操是一般准则,并不代表完整的安全解决方案。这些最佳实践可能不适合您的环境或不满足您的环境要求,请将其视为有用的建议而不是惯例。
Amazon S3 安全最佳实践
Amazon S3 的以下最佳实践可以帮助预防安全事故。
- 禁用访问控制列表(ACL)
-
S3 对象所有权是 Amazon S3 存储桶级别的设置,您可以使用该设置来控制上传到存储桶的对象的所有权和禁用或启用 ACL。默认情况下,对象所有权设为强制存储桶拥有者设置,并且所有 ACL 均处于禁用状态。禁用 ACL 后,存储桶拥有者拥有存储桶中的所有对象,并使用访问管理策略来专门管理对数据的访问权限。
Amazon S3 中的大多数现代使用案例不再要求使用访问控制列表(ACL)。我们建议您禁用 ACL,除非有必须单独控制每个对象的访问权限的特殊情况。要禁用 ACL 并获得存储桶中每个对象的所有权,请为 S3 对象所有权应用强制存储桶拥有者设置。禁用 ACL 时,您可以轻松通过不同的 AWS 账户 上传的对象维护存储桶。
禁用 ACL 时,数据的访问控制基于策略,如下所示:
-
AWS Identity and Access Management(IAM)用户策略
-
S3 存储桶策略
-
虚拟私有云(VPC)端点策略
-
AWS Organizations 服务控制策略(SCP)
禁用 ACL 简化了权限管理和审计。对于新存储桶,默认情况下 ACL 处于禁用状态。您还可以对现有存储桶禁用 ACL。如果现有存储桶中已有对象,在禁用 ACL 后,对象和存储桶 ACL 将不再是访问评估过程的一部分。相反,将根据策略授予或拒绝访问权限。
在禁用 ACL 之前,请确保执行以下操作:
-
查看存储桶策略,以确保此策略涵盖了您打算在账户外授予对存储桶的访问权限的所有方式。
-
将存储桶 ACL 重置为默认(由存储桶拥有者完全控制)。
禁用 ACL 后,会出现以下行为:
-
您的存储桶仅接受未指定 ACL 的
PUT
请求或指定了存储桶拥有者完全控制的 ACL 的PUT
请求。这些 ACL 包括bucket-owner-full-control
标准 ACL 或以 XML 表示的此 ACL 的等效形式。 -
支持存储桶拥有者完全控制 ACL 的现有应用程序没有影响。
-
包含其他 ACL 的
PUT
请求(例如,向某些 AWS 账户 进行自定义授权)将失败并返回 HTTP 状态代码400 (Bad Request)
,和错误代码AccessControlListNotSupported
。
有关更多信息,请参阅 为您的存储桶控制对象所有权和禁用 ACL。。
-
- 确保您的 Amazon S3 存储桶使用正确的策略且不可公有访问
-
除非您明确要求互联网上的任何人都能读写您的 S3 存储桶,否则请确保 S3 存储桶不是公有的。以下是您可以采取的屏蔽公共访问权限的一些步骤:
-
使用 S3 屏蔽公共访问权限。借助 S3 屏蔽公共访问权限,您可以轻松地设置集中控制,以限制对 Amazon S3 资源的公共访问。无论资源是如何创建的,都会实施这些集中控制。有关更多信息,请参阅 阻止对您的 Amazon S3 存储的公有访问。
-
找出允许使用通配符身份的 Amazon S3 存储桶策略,例如
"Principal": "*"
(这实际上意味着“任何人”)。还要找出允许通配符操作"*"
的策略(这实际上允许用户在 Amazon S3 存储桶中执行任何操作)。 -
类似地,找出向“任何人”或者“任何经过身份验证的 AWS 用户”提供读、写或完全访问权限的 Amazon S3 存储桶访问控制列表(ACL)。
-
使用
ListBuckets
API 操作扫描所有 Amazon S3 存储桶。然后,使用GetBucketAcl
、GetBucketWebsite
和GetBucketPolicy
确定每个存储桶是否拥有符合要求的访问控制和符合要求的配置。 -
使用 AWS Trusted Advisor 检查您的 Amazon S3 实现。
-
考虑使用 s3-bucket-public-read-prohibited 和 s3-bucket-public-write-prohibited 托管式 AWS Config 规则 来实施持续的侦测性控制。
有关更多信息,请参阅 Amazon S3 的身份和访问管理。
-
- 实施最低权限访问
-
在授予权限时,您可以决定谁获得哪些 Amazon S3 资源的哪些权限。您可以对这些资源启用希望允许的特定操作。因此,我们建议您仅授予执行任务所需的权限。实施最低权限访问对于减小安全风险以及可能由错误或恶意意图造成的影响至关重要。
为实现最低权限访问,可以使用以下工具:
有关选择一个或多个前述机制时所要考虑的事项的指南,请参阅 Amazon S3 的身份和访问管理。
- 将 IAM 角色用于需要 Amazon S3 访问权限的应用程序和 AWS 服务
-
为了使在 Amazon EC2 或其他 AWS 服务上运行的应用程序能够访问 Amazon S3 资源,应用程序必须在其 AWS API 请求中包含有效的 AWS 凭证。我们建议您不要直接在应用程序或 Amazon EC2 实例中存储 AWS 凭证,这些是不会自动轮换的长期凭证,如果它们受到损害,可能会对业务产生重大影响。
而是使用 IAM 角色来管理需要访问 Amazon S3 的应用程序或服务的临时凭证。在使用角色时,您不需要将长期凭证(如用户名和密码或访问密钥)分配给 Amazon EC2 实例或 AWS 服务(例如 AWS Lambda)。角色可提供临时权限供应用程序在调用其他 AWS 资源时使用。
有关更多信息,请参阅 IAM 用户指南中的以下主题:
- 考虑加密静态数据
-
您可以通过以下选项在 Amazon S3 中保护静态数据:
-
服务器端加密 – 默认情况下,所有 Amazon S3 存储桶都配置了加密,所有上传到 S3 存储桶的新对象都会自动静态加密。具有 Amazon S3 托管密钥的服务器端加密(SSE-S3)是 Amazon S3 中每个存储桶的默认加密配置。要使用其他类型的加密,您可以指定要在 S3
PUT
请求中使用的服务器端加密类型,也可以在目标存储桶中设置默认加密配置。Amazon S3 也提供了以下服务器端加密选项:
-
具有 AWS Key Management Service(AWS KMS)密钥的服务器端加密(SSE-KMS)
-
具有 AWS Key Management Service(AWS KMS)密钥的双层服务器端加密(DSSE-KMS)
-
具有客户提供密钥的服务器端加密(SSE-C)
有关更多信息,请参阅 使用服务器端加密保护数据。
-
-
客户端加密 – 在客户端加密数据并将加密的数据上传到 Amazon S3。在这种情况下,您需要管理加密过程、加密密钥和相关的工具。如服务器端加密一样,客户端加密可以帮助减少面临的风险:通过使用存储在一个不同机制(而不是存储数据本身的机制)中的密钥来加密数据。
Amazon S3 提供多个客户端加密选项。有关更多信息,请参阅 使用客户端加密保护数据。
-
- 实施传输中数据加密
-
您可以使用 HTTPS(TLS)帮助防止潜在攻击者使用中间人攻击或类似攻击来窃听或操纵网络流量。我们建议通过在 Amazon S3 存储桶策略中使用 aws:SecureTransport 条件,以只允许通过 HTTPS(TLS)的加密连接。
重要
我们建议您的应用程序不要固定 Amazon S3 TLS 证书,因为 AWS 不支持固定公开信任的证书。S3 会自动续订证书,而续订可能在证书到期之前的任何时候发生。续订证书会生成新的公有-私有密钥对。如果您固定了最近使用新公钥续订的 S3 证书,则在您的应用程序使用新证书之前,您将无法连接到 S3。
也可以考虑使用 s3-bucket-ssl-requests-only 托管式 AWS Config 规则来实施持续的侦测性控制。
- 考虑使用 S3 对象锁定
-
借助 S3 对象锁定,您可以使用“一次写入,多次读取”(WORM)模式存储对象。S3 对象锁定可以帮助阻止意外或不当删除数据。例如,您可以使用 S3 对象锁定来帮助保护您的 AWS CloudTrail 日志。
有关更多信息,请参阅 使用对象锁定以锁定对象。
- 启用 S3 版本控制
-
S3 版本控制是在相同的存储桶中保留对象的多个版本的方法。对于 存储桶中存储的每个对象,您可以使用版本控制功能来保留、检索和还原它们的各个版本。使用版本控制能够轻松从用户意外操作和应用程序故障中恢复数据。
也可以考虑使用 s3-bucket-versioning-enabled 托管式 AWS Config 规则来实施持续的侦测性控制。
有关更多信息,请参阅 使用 S3 版本控制保留对象的多个版本。
- 考虑使用 Amazon S3 跨区域复制
-
虽然 Amazon S3 在默认情况下跨多个地理位置不同的可用区存储数据,但合规性要求所规定的数据存储距离可能更远。通过 S3 跨区域复制(CRR),可以在远距离 AWS 区域之间复制数据以帮助满足这些要求。CRR 允许在不同 AWS 区域 中的存储桶之间自动以异步方式复制对象。有关更多信息,请参阅 在区域内和跨区域复制对象。
注意
CRR 要求源和目标 S3 存储桶都已启用版本控制。
也可以考虑使用 s3-bucket-replication-enabled 托管式 AWS Config 规则来实施持续的侦测性控制。
- 考虑使用 VPC 端点进行 Amazon S3 访问
-
Amazon S3 的 Virtual Private Cloud(VPC)端点是 VPC 内的逻辑实体,仅允许连接到 Amazon S3。VPC 端点可以帮助防止流量穿越开放的互联网。
Amazon S3 的 VPC 端点提供多种方式来控制对 Amazon S3 数据的访问:
-
通过使用 S3 存储桶策略,您可以控制允许通过特定 VPC 端点进行访问的请求、用户或组。
-
可以使用 S3 存储桶策略控制哪些 VPC 或 VPC 端点有权访问 S3 存储桶。
-
您可以使用没有 Internet 网关的 VPC 来阻止数据泄露。
有关更多信息,请参阅 使用存储桶策略控制从 VPC 端点的访问。
-
- 使用托管式 AWS 安全服务监控数据安全
-
多项托管式 AWS 安全服务可以帮助您识别、评测和监控 Amazon S3 数据的安全和合规风险。这些服务还可以帮助您保护数据免受这些风险的影响。这些服务包括自动检测、监控和保护功能,旨在从单个 AWS 账户的 Amazon S3 资源扩展到跨数千个账户的多个组织的资源。
有关更多信息,请参阅 使用托管式 AWS 安全服务监控数据安全。
Amazon S3 监控和审计最佳实践
Amazon S3 的以下最佳实践可以帮助检测潜在的安全弱点和事故。
- 识别和审计您的所有 Amazon S3 存储桶
-
确定您的 IT 资产是监管和安全性的一个至关重要的方面。您需要了解您所有的 Amazon S3 资源,以评估它们的安全态势并对潜在的薄弱领域采取措施。要审计您的资源,我们建议您执行以下操作:
-
使用标签编辑器确定和标记安全敏感性或审计敏感性资源,然后在您需要搜索这些资源时使用这些标签。有关更多信息,请参阅《标记 AWS 资源用户指南》中的搜索要标记的资源。
-
出于业务、合规性和法规要求,使用 S3 清单来审计和报告对象的复制和加密状态。有关更多信息,请参阅 使用 S3 清单对数据进行编目和分析。
-
为您的 Amazon S3 资源创建资源组。有关更多信息,请参阅《AWS Resource Groups 用户指南》中的什么是 Resource Groups?。
-
- 使用 AWS 监控工具实施监控
-
监控是保持 Amazon S3 和您的 AWS 解决方案的可靠性、安全性、可用性和性能的重要部分。AWS 提供了一些可用来监控 Amazon S3 和您的其他 AWS 服务的工具和服务。例如,您可以监控 Amazon S3 的 Amazon CloudWatch 指标,特别是
PutRequests
、GetRequests
、4xxErrors
和DeleteRequests
指标。有关更多信息,请参阅使用 Amazon CloudWatch 监控指标 和Amazon S3 中的日志记录和监控。有关另一个示例,请参阅示例:Amazon S3 存储桶活动。此示例介绍如何创建 CloudWatch 警报,当执行 Amazon S3 API 调用以
PUT
或DELETE
存储桶策略、存储桶生命周期、存储桶复制配置时,或者PUT
存储桶 ACL 时,会触发此警报。 - 启用 Amazon S3 服务器访问日志记录
-
服务器访问日志记录详细地记录对存储桶提出的各种请求。服务器访问日志可以在安全和访问审计方面为您提供帮助,帮您了解您的客户群和了解您的 Amazon S3 账单。有关启用服务器访问日志记录的说明,请参阅 使用服务器访问日志记录来记录请求。
也可以考虑使用 s3-bucket-logging-enabled AWS Config 托管式规则来实施持续的侦测性控制。
- 使用 AWS CloudTrail
-
AWS CloudTrail 提供用户、角色或 AWS 服务在 Amazon S3 中执行的操作的记录。您可以使用 CloudTrail 收集的信息确定以下事项:
-
向 Amazon S3 发出的请求
-
发出请求的 IP 地址
-
谁发出了请求
-
发出请求的时间
-
有关该请求的其他详细信息
例如,您可以确定影响数据访问的
PUT
操作的 CloudTrail 条目,尤其是PutBucketAcl
、PutObjectAcl
、PutBucketPolicy
和PutBucketWebsite
。当您设置 AWS 账户时,默认情况下 CloudTrail 处于启用状态。您可以在 CloudTrail 控制台中查看最近的事件。要为 Amazon S3 存储桶创建活动和事件的持续记录,您可以在 CloudTrail 控制台中创建跟踪。有关更多信息,请参阅《AWS CloudTrail 用户指南》中的记录数据事件。
创建跟踪时,可以配置 CloudTrail 以记录数据事件。数据事件是在资源上或在资源内执行的资源操作的记录。在 Amazon S3 中,数据事件记录单个存储桶的对象级 API 活动。CloudTrail 支持 Amazon S3 对象级 API 操作的子集,例如
GetObject
、DeleteObject
和PutObject
。有关 CloudTrail 如何与 Amazon S3 配合使用的更多信息,请参阅 使用 AWS CloudTrail 记录 Amazon S3 API 调用。在 Amazon S3 控制台中,您还可以将 S3 存储桶配置为 为 S3 存储桶和对象启用 CloudTrail 事件日志记录。AWS Config 提供了托管规则(
cloudtrail-s3-dataevents-enabled
),您可以使用该规则来确认至少有一个 CloudTrail 跟踪正在记录 S3 存储桶的数据事件。有关更多信息,请参阅 AWS Config 开发人员指南中的 cloudtrail-s3-dataevents-enabled。 -
- Enable AWS Config(启用 Gem)
-
此主题中列出的几个最佳实践建议创建 AWS Config 规则。AWS Config 有助于评测、审计和评价您的 AWS 资源的配置。AWS Config 监控资源配置,以便您能够针对需要的安全配置评估所记录的配置。利用 AWS Config,您可以:
-
查看 AWS 资源之间的配置和关系的更改
-
调查详细的资源配置历史记录
-
根据内部指南中指定的配置确定总体合规性
使用 AWS Config 可帮助您简化合规性审核、安全性分析、变更管理和操作故障排除。有关更多信息,请参阅 AWS Config 开发人员指南中的使用控制台设置 AWS Config。当指定要记录的资源类型时,确保您包括了 Amazon S3 资源。
重要
在评估 Amazon S3 资源时,AWS Config 托管式规则仅支持通用存储桶。AWS Config 不记录目录存储桶的配置更改。有关更多信息,请参阅《AWS Config 开发人员指南》中的 AWS Config 托管式规则和 AWS Config 托管式规则列表。
有关如何使用 AWS Config 的示例,请参阅《AWS 安全博客》上的如何使用 AWS Config 来监控和响应允许公共访问的 Amazon S3 存储桶
。 -
- 使用 S3 Storage Lens 存储统计管理工具
-
S3 Storage Lens 存储统计管理工具是一项云存储分析功能,您可以使用它在整个组织范围内了解对象存储的使用情况和活动。S3 Storage Lens 存储统计管理工具还分析指标以提供上下文建议,您可以使用这些建议来优化存储成本并应用最佳实践来保护数据。
通过 S3 Storage Lens 存储统计管理工具,您可以使用指标生成摘要见解,例如,了解整个组织中有多少存储空间,或增长最快的存储桶和前缀是哪些。您还可以使用 S3 Storage Lens 存储统计管理工具指标来识别成本优化机会,实施数据保护和访问管理最佳实践,并提高应用程序工作负载的性能。
例如,您可以识别没有 S3 生命周期规则的存储桶,以中止超过 7 天的未完成分段上传。您还可以识别未遵循数据保护最佳实践(例如使用 S3 复制或 S3 版本控制)的存储桶。有关更多信息,请参阅了解 Amazon S3 Storage Lens。
- 监控 AWS 安全公告
-
我们建议您经常为您的 AWS 账户检查在 Trusted Advisor 中发布的安全公告。尤其要关注有关具有“开放访问权限”的 Amazon S3 存储桶的警告。您可以使用 describe-trusted-advisor-checks 通过编程方式来实现这一点。
此外,积极地监控向您的每一个 AWS 账户注册的原始电子邮件地址。AWS 将使用该电子邮件地址就可能影响您的紧急安全事件与您联系。
具有广泛影响的 AWS 操作性问题将在 AWS Health Dashboard 服务运行状况
上发布。操作性问题也通过 AWS Health Dashboard 发布到各个账户。有关更多信息,请参阅 AWS Health 文档。
使用托管式 AWS 安全服务监控数据安全
多项托管式 AWS 安全服务可以帮助您识别、评测和监控 Amazon S3 数据的安全和合规风险。这些服务还可以帮助您保护数据免受这些风险的影响。这些服务包括自动检测、监控和保护功能,旨在从单个 AWS 账户的 Amazon S3 资源扩展到跨数千个 AWS 账户的多个组织的资源。
AWS 检测和响应服务可以帮助您识别潜在的安全配置错误、威胁或意外行为,以便您可以快速响应环境中潜在未经授权或恶意的活动。AWS 数据保护服务可以帮助您监控和保护您的数据、账户和工作负载,使其免受未经授权的访问。这些服务还有助于您发现 Amazon S3 数据资产中的敏感数据 [如个人身份信息(PII)]。
为帮助您识别和评估数据安全与合规性风险,托管式 AWS 安全服务会生成调查发现,以告知您与 Amazon S3 数据有关的潜在安全事件或问题。调查发现提供相关详细信息,您可以使用这些信息,根据事件/响应工作流和策略对这些风险进行调查、评测并采取措施。您可以使用每项服务直接访问调查发现数据。还可以将数据发送到其他应用程序、服务和系统,例如安全事故和事件管理系统(SIEM)。
要监控 Amazon S3 数据的安全性,请考虑使用以下这些托管式 AWS 安全服务。
- Amazon GuardDuty
-
Amazon GuardDuty 是一项威胁检测服务,可持续监控您的 AWS 账户和工作负载中是否存在恶意活动,并提供详细的安全调查发现以供查看和补救。
使用 GuardDuty 中的 S3 保护特征,您可以配置 GuardDuty 来分析 Amazon S3 资源的 AWS CloudTrail 管理和数据事件。然后,GuardDuty 会监控这些事件中是否存在恶意和可疑活动。为了为分析提供信息并识别潜在的安全风险,GuardDuty 使用威胁情报源和机器学习。
GuardDuty 可以监控 Amazon S3 资源的不同类型的活动。例如,Amazon S3 的 CloudTrail 管理事件包括存储桶级别的操作,例如
ListBuckets
、DeleteBucket
和PutBucketReplication
。Amazon S3 的 CloudTrail 数据事件包括对象级操作,例如GetObject
、ListObjects
和PutObject
。如果 GuardDuty 检测到异常或潜在恶意的活动,它会生成调查发现来通知您。有关更多信息,请参阅《Amazon GuardDuty 用户指南》中的 Amazon GuardDuty 中的 Amazon S3 保护。
- Amazon Detective
-
Amazon Detective 简化了调查流程,并帮助您进行更快、更有效的安全调查。Detective 提供预构建的数据聚合、摘要和上下文,可以帮助您分析和评测可能的安全问题的性质和程度。
Detective 会自动提取基于时间的事件,例如来自 AWS CloudTrail 的 API 调用和您的 AWS 资源的 Amazon VPC 流日志。它还采集 Amazon GuardDuty 生成的调查发现。然后,Detective 使用机器学习、统计分析和图形理论生成可视化效果,以帮助您更快地进行有效的安全调查。
这些可视化效果提供了统一的交互式视图,可供您了解资源行为及此类行为随时间推移的相互作用。您可以浏览此行为图以检查潜在的恶意操作,例如登录尝试失败或可疑的 API 调用。您还可以查看这些操作如何影响资源(如 S3 存储桶和对象)。
有关更多信息,请参阅《Amazon Detective 管理指南》。
- IAM Access Analyzer
-
AWS Identity and Access Management Access Analyzer(IAM Access Analyzer)可帮助您识别与外部实体共享的资源。还可以使用 IAM Access Analyzer 根据策略语法和最佳实践验证 IAM 策略,并根据 AWS CloudTrail 日志中的访问活动生成 IAM 策略。
IAM Access Analyzer 使用基于逻辑的推理来分析 AWS 环境中的资源策略,例如存储桶策略。借助适用于 S3 的 IAM Access Analyzer,当 S3 存储桶配置为允许互联网上的任何人或其他 AWS 账户(包括组织外部的账户)访问时,将向您发出提醒。例如,适用于 S3 的 IAM Access Analyzer 可能会报告存储桶具有通过存储桶访问控制列表(ACL)、存储桶策略、多区域接入点策略或接入点策略提供的读取或写入访问权限。您会收到每个公共存储桶或共享存储桶的调查发现,其中指出了公共或共享访问的来源和级别。有了这些调查发现,您就可以立即采取精确的纠正措施,将存储桶访问权限恢复为您期望的设置。
有关更多信息,请参阅 使用适用于 S3 的 IAM Access Analyzer 查看存储桶访问权限。
- Amazon Macie
-
Amazon Macie 是一项安全服务,旨在使用机器学习和模式匹配来发现敏感数据。Macie 提供对数据安全风险的可见性,并实现针对这些风险的自动防护。借助 Macie,您可以自动发现和报告 Amazon S3 数据资产中的敏感数据,以更好地了解组织在 S3 中存储的数据。
要使用 Macie 检测敏感数据,您可以使用内置标准和技术,这些标准和技术旨在检测许多国家和地区的大量且不断增长的敏感数据类型列表。这些敏感数据类型包括多种类型的个人身份信息(PII)、财务数据和凭证数据。您还可以使用自己定义的自定义标准:旨在定义要匹配的文本模式的正则表达式,以及(可选)用于优化结果的字符序列和邻近规则。
如果 Macie 在 S3 对象中检测到敏感数据,Macie 会生成安全调查发现来通知您。此调查发现提供有关受影响的对象、Macie 发现的敏感数据的类型和出现次数的信息,以及其他详细信息,以帮助您调查受影响的 S3 存储桶和对象。有关更多信息,请参阅《Amazon Macie 用户指南》。
- AWS Security Hub
-
AWS Security Hub 是一项安全态势管理服务,该服务可执行安全最佳实践检查,将来自多个来源的警报和调查发现聚合为单一格式,并支持自动补救。
Security Hub 从集成的 AWS Partner Network 安全解决方案和 AWS 服务(包括 Amazon Detective、Amazon GuardDuty、IAM Access Analyzer 和 Amazon Macie)收集并提供安全调查发现数据。Security Hub 还可以根据 AWS 最佳实践和支持的行业标准运行持续的自动化安全检查,从而生成自己的调查发现。
然后,Security Hub 关联并整合各提供方的调查发现,以帮助确定调查发现的优先级并处理最重要的调查发现。它还为自定义操作提供支持,您可以使用自定义操作来为特定类别的调查发现调用响应或补救操作。
使用 Security Hub,您可以评测 Amazon S3 资源的安全性和合规性状态,也可以将其作为对组织在单个 AWS 区域和跨多个区域的安全状况进行更广泛分析的一部分。这包括分析安全趋势和确定优先级最高的安全问题。您还可以聚合来自多个 AWS 区域的调查发现,并监控和处理来自单个区域的聚合调查发现数据。
有关更多信息,请参阅《AWS Security Hub 用户指南》中的 Amazon Simple Storage Service 控制。