

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 修复 Amazon S3 存储桶的暴露
<a name="exposure-s3-bucket"></a>

Amazon Security Hub 可以生成亚马逊简单存储服务 (S3) 存储桶的风险调查结果。

在 Security Hub 控制台上，暴露调查发现中涉及的 Amazon S3 存储桶及其识别信息列在调查发现详细信息的**资源**部分中。通过编程方式，您可以通过 Security Hub CSP [GetFindingsV2](https://docs.amazonaws.cn/securityhub/1.0/APIReference/API_GetFindingsV2.html)M API 的操作来检索资源详细信息。

在确定暴露调查发现中涉及的资源后，如果不需要该资源，您可以将其删除。删除不必要的资源可以减少您的曝光概况和 Amazon 成本。如果资源至关重要，请按照这些建议的修复步骤进行操作以帮助降低风险。修复主题根据特征的类型进行划分。

单个暴露调查发现包含在多个修复主题中发现的问题。相反，您只需解决一个修复主题即可解决暴露调查发现并降低其严重性级别。您的风险修复方法取决于您的组织要求和工作负载。

**注意**  
 本主题中提供的补救指南可能需要在其他 Amazon 资源中进行更多咨询。

**Contents**
+ [Amazon S3 存储桶的错误配置特征](#misconfiguration)
  + [Amazon S3 存储桶已禁用版本控制](#versioning-disabled)
  + [Amazon S3 存储桶已禁用对象锁定](#object-lock-disabled)
  + [Amazon S3 存储桶未使用 Amazon KMS 密钥进行静态加密](#sse-kms-not-used)
  + [受版本控制的 Amazon S3 存储桶上已禁用多重身份验证（MFA）删除](#mfa-delete-disabled)
  + [Amazon S3 存储桶允许其他 Amazon 账户的委托人修改存储桶权限](#external-aws-access-allowed)
+ [Amazon S3 存储桶的可访问性特征](#reachability)
  + [Amazon S3 存储桶具有公共读取权限](#public-read-allowed)
  + [Amazon S3 存储桶具有公共写入权限](#public-write-allowed)
+ [Amazon S3 存储桶的敏感数据特征](#sensitive-data)
  + [Amazon S3 存储桶的敏感数据特征](#sensitive-data-present)

## Amazon S3 存储桶的错误配置特征
<a name="misconfiguration"></a>

以下是 Amazon S3 存储桶的错误配置特征和建议的修复步骤。

### Amazon S3 存储桶已禁用版本控制
<a name="versioning-disabled"></a>

 Amazon S3 版本控制可帮助您在同一个存储桶中保存对象的多个变体。禁用版本控制后，Amazon S3 只存储每个对象的最新版本，这意味着如果对象被意外或恶意删除或覆盖，则无法恢复。启用版本控制的存储桶可防止意外删除、应用程序故障以及勒索软件攻击等安全事件，在这些情况下可能会发生未经授权的数据修改或删除。根据安全最佳实践，我们建议对包含重要数据的存储桶启用版本控制，因为这些数据如果丢失则将难以或无法重新创建。

1.  **启用版本控制** – 要在存储桶上启用 Amazon S3 版本控制，请参阅《Amazon Simple Storage Service 用户指南》**中的[在存储桶上启用版本控制](https://docs.amazonaws.cn/AmazonS3/latest/userguide/manage-versioning-examples.html)。启用版本控制时，请考虑实施生命周期规则来管理存储，因为版本控制会维护对象的多个副本。

### Amazon S3 存储桶已禁用对象锁定
<a name="object-lock-disabled"></a>

 Amazon S3 对象锁定为 Amazon S3 对象提供了 write-once-read-many (WORM) 模型，可防止它们在固定期限内或无限期地被删除或覆盖。禁用对象锁定后，您的对象可能容易遭受意外或恶意删除、修改或勒索软件加密。对象锁定对于遵守监管要求（需要不可变数据存储）以及防范勒索软件等可能试图加密数据的复杂威胁尤为重要。启用对象锁定后，您可以强制执行保留策略作为额外数据保护层，并为您的关键数据创建不可变的备份策略。根据安全最佳实践，我们建议启用对象锁定以防止恶意修改对象。

1.  请注意，只能在创建新的存储桶时启用对象锁定，因此您需要创建一个启用对象锁定的新存储桶。对于大型迁移，请考虑使用批量操作将对象复制到新存储桶。在锁定任何对象之前，您还必须在存储桶上启用 Amazon S3 版本控制和对象锁定。由于只能在新存储桶上启用对象锁定，因此您需要将现有数据迁移到已启用对象锁定的新存储桶。**配置 Amazon S3 对象锁** — 有关如何在存储桶上配置对象锁的信息，请参阅[亚马逊*简单存储服务用户指南中的配置 Amazon* S3 对象锁](https://docs.amazonaws.cn/AmazonS3/latest/userguide/object-lock-configure.html)。设置对象锁定后，请根据您的环境选择合适的保留模式。

### Amazon S3 存储桶未使用 Amazon KMS 密钥进行静态加密
<a name="sse-kms-not-used"></a>

 Amazon S3 应用具有 Amazon S3 托管式密钥的服务器端加密作为所有新存储桶的默认加密级别。虽然 Amazon S3 托管密钥提供强大的加密保护，但它提供的访问控制和审计功能级别与 Amazon Key Management Service 密钥不同。使用 KMS 密钥时，访问对象需要同时拥有 Amazon S3 存储桶和加密该对象的 KMS 密钥的权限。这对于敏感数据尤其重要，在这些数据中，您需要精细控制谁可以访问加密对象，并对加密密钥使用情况进行全面的审核记录。根据安全最佳实践，我们建议使用 KMS 密钥对包含敏感数据的存储桶进行加密，或者将其用于具有严格合规性要求的环境。

1.  **配置 Amazon S3 存储桶密钥** 

    要将存储桶配置为对新对象使用 Amazon S3 存储桶密钥，请参阅《Amazon Simple Storage Service 用户指南》**中的[将存储桶配置为将 Amazon S3 存储桶密钥与 SSE-KMS 结合使用于新对象](https://docs.amazonaws.cn/AmazonS3/latest/userguide/configuring-bucket-key.html)。有关如何加密现有对象的信息，请参阅 Amazon 存储博客中的使用 [Amazon S3 批处理操作加密对象](https://www.amazonaws.cn/blogs/storage/encrypting-objects-with-amazon-s3-batch-operations/)。

 实施 Amazon KMS 加密时，请考虑以下几点：
+  **密钥管理**-决定使用 Amazon 托管密钥还是客户托管密钥 (CMK)。 CMKs 让客户完全控制密钥的生命周期和使用情况。有关这两种密钥之间区别的更多信息，请参阅《Amazon Key Management Service 开发人员指南》**中的 [Amazon KMS keys](https://docs.amazonaws.cn/kms/latest/developerguide/concepts.html#key-mgmt)。
+  **密钥轮换** – 要采取其他安全措施，请为您的 KMS 密钥启用自动密钥轮换。有关更多信息，请参阅《Amazon Key Management Service 开发人员指南》**中的 [Enable automatic key rotation]()。

### 受版本控制的 Amazon S3 存储桶上已禁用多重身份验证（MFA）删除
<a name="mfa-delete-disabled"></a>

 多重身份验证（MFA）删除可为您的 Amazon S3 存储桶提供额外安全保护层。它对于破坏性 Amazon S3 操作需要多重身份验证。禁用 MFA 删除后，具有适当权限的用户无需额外身份验证即可永久删除对象版本或暂停存储桶上的版本控制。启用 MFA 删除有助于防止未经授权或意外删除您的数据，从而增强对勒索软件攻击、内部威胁和操作错误的防护。MFA 删除对于包含关键数据或合规性敏感数据的存储桶尤其有价值，这些数据必须防止未经授权的删除。根据安全最佳实践，我们建议为 Amazon S3 存储桶启用 MFA。

1. **查看 MFA 类型**

    Amazon 支持以下 [MFA 类型](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_credentials_mfa.html#id_credentials_mfa-types)。虽然使用物理设备进行身份验证通常能提供更严格的安全保护，但使用任何类型的 MFA 比禁用 MFA 更安全。

1. **在资源策略级别强制执行 MFA**

    在存储桶策略中使用 `aws:MultiFactorAuthAge` 条件键，以要求对敏感操作进行 MFA。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[需要 MFA](https://docs.amazonaws.cn/AmazonS3/latest/userguide/example-bucket-policies.html#example-bucket-policies-MFA)。

1. **启用 MFA**

    要启用 MFA 删除，请确保在 Amazon S3 存储桶上启用版本控制。仅已启用版本控制的存储桶支持 MFA 删除。有关如何启用 Amazon S3 版本控制的信息，请参阅《Amazon Simple Storage Service 用户指南》**中的[在存储桶上启用版本控制](https://docs.amazonaws.cn/AmazonS3/latest/userguide/manage-versioning-examples.html)。无法通过 Amazon S3 控制台启用 MFA 删除。您必须使用 Amazon S3 API 或 Amazon CLI。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中[配置 MFA 删除](https://docs.amazonaws.cn/AmazonS3/latest/userguide/MultiFactorAuthenticationDelete.html)。

### Amazon S3 存储桶允许其他 Amazon 账户的委托人修改存储桶权限
<a name="external-aws-access-allowed"></a>

 Amazon S3 存储桶策略控制对存储桶和对象的访问。当存储桶策略允许其他 Amazon 账户的委托人修改存储桶权限时，未经授权的用户可以重新配置您的存储桶。如果外部委托人凭证遭到泄露，未经授权的用户可以控制您的存储桶，从而导致数据泄露或服务中断。遵循标准的安全原则， Amazon 建议您将权限管理操作仅限于受信任的委托人。

1.  **查看和识别存储桶策略** 

    在曝光中，在 ARN 字段中标识 Amazon S3 存储桶。在 Amazon S3 控制台中，选择存储桶，然后导航至**权限**选项卡以查看存储桶策略。查看附加到存储桶的权限策略。查找授予 `s3:PutBucketPolicy, s3:PutBucketAcl, s3:DeleteBucketPolicy, s3:* ` 等操作的策略语句，或者允许访问您账户之外的主体的策略语句，如主体语句中所述。

1.  **修改存储桶策略** 

    修改存储桶策略以删除或限制授予其他 Amazon 账户的操作：
   + 移除向外部账户授予权限管理操作的策略语句。
   +  如果需要跨账户访问，请将宽泛权限 `(s3:*)` 替换为不包含存储桶权限管理的特定操作。

    有关修改存储桶策略的信息，请参阅《亚马逊*简单存储服务用户指南》中的使用 Amazon S3 控制台添加存储*[桶策略](https://docs.amazonaws.cn/AmazonS3/latest/userguide/add-bucket-policy.html)。

## Amazon S3 存储桶的可访问性特征
<a name="reachability"></a>

以下是 Amazon S3 存储桶的可访问性特征和建议的修复步骤。

### Amazon S3 存储桶具有公共读取权限
<a name="public-read-allowed"></a>

 具有公共读取权限的 Amazon S3 存储桶允许互联网上的任何人查看您的存储桶内容。虽然这对于公开访问的网站或共享资源来说可能是必要的，但如果存储桶包含敏感数据，则可能会造成安全风险。公共读取权限可能导致未经授权的查看和下载，如果敏感数据存储在这些存储桶中，则可能导致数据泄露。遵循标准安全原则， Amazon 建议限制必要的用户和系统才能访问 Amazon S3 存储桶。

1.  **在存储桶级别阻止公开访问** 

    Amazon S3 提供阻止公共访问设置，无论存储桶策略如何，都可以在存储桶和账户级别进行配置，以防止公开访问或 ACLs。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》中的[阻止对 Amazon S3 存储的公共访问](https://docs.amazonaws.cn/AmazonS3/latest/userguide/access-control-block-public-access.html)。**阻止公开访问后，请检查您的存储桶访问控制配置，以确保其符合您的访问要求。然后查看您的 Amazon S3 存储桶策略，明确定义谁可以访问您的存储桶。有关存储桶策略的示例，请参阅《Amazon Simple Storage Service 用户指南》**中的 [Amazon S3 存储桶策略的示例](https://docs.amazonaws.cn/AmazonS3/latest/userguide/example-bucket-policies.html)。

1.  **替代访问方法** 

    如果需要公共读取权限，请考虑以下更安全的替代方案：
   +  **CloudFront**— CloudFront 与原始访问身份 (OAI) 或源访问控制 (OAC) 一起使用，以允许从私有 Amazon S3 存储桶进行读取访问。这种替代方案限制了对您的 Amazon S3 存储桶的直接访问，同时允许通过 CloudFront公开访问内容。有关更多信息，请参阅《亚马逊* CloudFront 开发者指南》中的限制对 Amaz* [on S3 来源的访问](https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)。
   +  **预签名 URLs**-使用预签名 URLs 来临时访问特定对象。有关更多信息，请参阅《*Amazon CloudFront 开发者指南*》 URLs中的[使用预签名共享对象](https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)。

### Amazon S3 存储桶具有公共写入权限
<a name="public-write-allowed"></a>

 具有公共写入权限的 Amazon S3 存储桶允许互联网上的任何人上传、修改或删除您的存储桶中的对象。这会造成严重的安全风险，包括有人可能上传恶意文件、修改现有文件和删除数据。公共写入权限会造成可被攻击者利用的安全漏洞。遵循标准安全原则， Amazon 建议将对 Amazon S3 存储桶的写入权限限制为仅限必要的用户和系统。

1.  **在账户和存储桶级别阻止公开访问** 

    Amazon S3 提供了封锁公有访问设置，可以在存储桶和账户级别配置这些设置，无论存储桶策略如何，都可防止公开访问或 ACLs。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》中的[阻止对 Amazon S3 存储的公共访问](https://docs.amazonaws.cn/AmazonS3/latest/userguide/access-control-block-public-access.html)。**

1.  **修改存储桶策略** 

    要更精细地移除公共写入权限，请查看存储桶策略。您可以查找 `s3:PutObject`、`s3:DeleteObject` 或 `s3:*`。有关管理存储桶策略的更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的 [Amazon S3 的存储桶策略](https://docs.amazonaws.cn/AmazonS3/latest/userguide/bucket-policies.html)。

1.  **替代访问方法** 

    如果需要公共读取权限，请考虑以下更安全的替代方案：
   +  **CloudFront**— CloudFront 与原始访问身份 (OAI) 或源访问控制 (OAC) 一起使用，以允许从私有 Amazon S3 存储桶进行读取访问。这种替代方案限制了对您的 Amazon S3 存储桶的直接访问，同时允许通过 CloudFront公开访问内容。有关更多信息，请参阅《亚马逊* CloudFront 开发者指南》中的限制对 Amaz* [on S3 来源的访问](https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)。
   +  **预签名 URLs**-使用预签名 URLs 来临时访问特定对象。有关更多信息，请参阅 *Amazon 简单存储服务用户指南 URLs*中的使用[预签名共享对象](https://docs.amazonaws.cn/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html)。

## Amazon S3 存储桶的敏感数据特征
<a name="sensitive-data"></a>

 以下是 Amazon S3 存储桶的敏感数据特征和建议的修复步骤。

### Amazon S3 存储桶的敏感数据特征
<a name="sensitive-data-present"></a>

 当 Macie 在您的 Amazon S3 存储桶中识别出敏感数据时，它会指明需要立即注意的潜在安全和合规风险。

敏感数据可能包括：
+ 凭据
+ 个人身份信息
+ 财务信息
+ 需要保护的机密内容

 如果敏感数据因错误配置或未经授权的访问而暴露，则可能会导致合规性违规、数据泄露、身份盗用或经济损失。遵循安全最佳实践， Amazon 建议对数据进行适当分类，并持续监控 Amazon S3 存储桶中的敏感数据。

**对敏感数据实施控制**  
 在暴露调查发现中，选择**打开资源**。查看检测到的敏感数据类型及其在存储桶中的位置。如需帮助解读 Macie 调查发现，请参阅《Amazon Macie 用户指南》**中的 [Types of Macie findings](https://docs.amazonaws.cn/macie/latest/user/findings-types.html)。

 根据发现的敏感数据类型，实施适当的安全控制：
+  **限制对存储桶的访问** – 查看存储桶权限，确保其遵循最低权限原则。使用 IAM 策略、存储桶策略和 ACLs 来限制访问权限。有关更多信息，请参阅《Amazon Simple Storage Service 用户指南》**中的 [Amazon S3 的身份和访问管理](https://docs.amazonaws.cn/AmazonS3/latest/userguide/security-iam.html)。
+  **启用服务器端加密** – 启用具有 KMS 密钥的服务器端加密以获得额外保护。有关更多信息，请参阅《*亚马逊简单存储服务*用户指南》中的[使用 Amazon KMS 密钥的服务器端加密 (SSE-KMS)](https://docs.amazonaws.cn/AmazonS3/latest/userguide/UsingKMSEncryption.html)。
+  **用途 Amazon Glue DataBrew**-Glue DataBrew 用于数据准备和清理。有关更多信息，请参阅《Amazon Glue DataBrew 开发人员指南》**中的 [What is Amazon Glue DataBrew](https://docs.amazonaws.cn/databrew/latest/dg/what-is.html)。