

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

# Security Hub CSPM 控件适用于 AWS KMS
<a name="kms-controls"></a>

这些 AWS Security Hub CSPM 控件评估 AWS Key Management Service (AWS KMS) 服务和资源。这些控件可能并非全部可用 AWS 区域。有关更多信息，请参阅 [按地区划分的控件可用性](securityhub-regions.md#securityhub-regions-control-support)。

## [KMS.1] IAM 客户托管策略不应允许对所有 KMS 密钥执行解密操作
<a name="kms-1"></a>

**相关要求：** NIST.800-53.r5 AC-2、 NIST.800-53.r5 AC-2 (1)、 NIST.800-53.r5 AC-3、 NIST.800-53.r5 AC-3 (15)、 NIST.800-53.r5 AC-3 (7)、 NIST.800-53.r5 AC-5、 NIST.800-53.r5 AC-6、 NIST.800-53.r5 AC-6 (3)

**类别：**保护 > 安全访问管理

**严重性：**中

**资源类型：**`AWS::IAM::Policy`

**AWS Config 规则：**[https://docs.aws.amazon.com/config/latest/developerguide/iam-customer-policy-blocked-kms-actions.html](https://docs.aws.amazon.com/config/latest/developerguide/iam-customer-policy-blocked-kms-actions.html)

**计划类型：**已触发变更

**参数：**
+ `blockedActionsPatterns: kms:ReEncryptFrom, kms:Decrypt`（不可自定义）
+ `excludePermissionBoundaryPolicy`：`True`（不可自定义）

检查 IAM 客户托管策略的默认版本是否允许委托人对所有资源使用 AWS KMS 解密操作。如果策略足够开放，可以允许对所有 KMS 密钥执行 `kms:Decrypt` 或 `kms:ReEncryptFrom` 操作，则控制失败。

该控件仅检查 Resource 元素中的 KMS 密钥，而不考虑策略的 Condition 元素中的任何条件。此外，该控件还会评估附加和独立的客户管理型策略。它不检查内联策略或 AWS 托管策略。

使用 AWS KMS，您可以控制谁可以使用您的 KMS 密钥并访问您的加密数据。IAM policy 定义了一个身份（用户、组或角色）可以对哪些资源执行哪些操作。遵循安全最佳实践， AWS 建议您允许最低权限。换句话说，您应仅授予身份 `kms:Decrypt` 或 `kms:ReEncryptFrom` 权限，并仅授予执行任务所需的密钥。否则，用户可能会使用不适合数据的密钥。

不要授予所有密钥的权限，而是确定用户访问加密数据所需的最小密钥集。然后设计允许用户仅使用这些密钥的策略。例如，不要允许对所有 KMS 密钥的 `kms:Decrypt` 权限。取而代之的是，仅允许 `kms:Decrypt` 使用特定区域中您账户的密钥。通过采用最低权限原则，您可以降低数据意外泄露的风险。

### 修复
<a name="kms-1-remediation"></a>

要修改 IAM 客户托管策略，请参阅 *IAM 用户指南*中的[编辑客户管理型策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html#edit-managed-policy-console)。编辑策略时，在 `Resource` 字段中提供您要允许执行解密操作的一个或多个密钥的 Amazon 资源名称（ARN）。

## [KMS.2] IAM 主体不应有允许对所有 KMS 密钥进行解密操作的 IAM 内联策略
<a name="kms-2"></a>

**相关要求：** NIST.800-53.r5 AC-2、 NIST.800-53.r5 AC-2 (1)、 NIST.800-53.r5 AC-3、 NIST.800-53.r5 AC-3 (15)、 NIST.800-53.r5 AC-3 (7)、 NIST.800-53.r5 AC-5、 NIST.800-53.r5 AC-6、 NIST.800-53.r5 AC-6 (3)

**类别：**保护 > 安全访问管理

**严重性：**中

**资源类型：**
+ `AWS::IAM::Group`
+ `AWS::IAM::Role`
+ `AWS::IAM::User`

**AWS Config 规则：**[https://docs.aws.amazon.com/config/latest/developerguide/iam-inline-policy-blocked-kms-actions.html](https://docs.aws.amazon.com/config/latest/developerguide/iam-inline-policy-blocked-kms-actions.html)

**计划类型：**已触发变更

**参数：**
+ `blockedActionsPatterns: kms:ReEncryptFrom, kms:Decrypt`（不可自定义）

此控件检查嵌入在您的 IAM 身份（角色、用户或群组）中的内联策略是否允许对所有 KMS AWS KMS 密钥执行解密和重新加密操作。如果策略足够开放，可以允许对所有 KMS 密钥执行 `kms:Decrypt` 或 `kms:ReEncryptFrom` 操作，则控制失败。

该控件仅检查 Resource 元素中的 KMS 密钥，而不考虑策略的 Condition 元素中的任何条件。

使用 AWS KMS，您可以控制谁可以使用您的 KMS 密钥并访问您的加密数据。IAM policy 定义了一个身份（用户、组或角色）可以对哪些资源执行哪些操作。遵循安全最佳实践， AWS 建议您允许最低权限。换句话说，您应该仅向身份授予他们所需的权限，并且仅授予执行任务所需的密钥。否则，用户可能会使用不适合数据的密钥。

不要授予所有密钥的权限，而是确定用户访问加密数据所需的最小密钥集。然后设计允许用户仅使用这些密钥的策略。例如，不要允许对所有 KMS 密钥的 `kms:Decrypt` 权限。相反，请仅允许对账户特定区域中的特定密钥授予权限。通过采用最低权限原则，您可以降低数据意外泄露的风险。

### 修复
<a name="kms-2-remediation"></a>

要修改 IAM 内联策略，请参阅 *IAM 用户指南*中的[编辑内联策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-edit.html#edit-inline-policy-console)。编辑策略时，在 `Resource` 字段中提供您要允许执行解密操作的一个或多个密钥的 Amazon 资源名称（ARN）。

## AWS KMS keys 不应无意中删除 [KMS.3]
<a name="kms-3"></a>

**相关要求：** NIST.800-53.r5 SC-12、 NIST.800-53.r5 SC-1 2 (2)

**类别：**保护 > 数据保护 > 数据删除保护

**严重性：**严重

**资源类型：**`AWS::KMS::Key`

**AWS Config 规则:**`kms-cmk-not-scheduled-for-deletion-2`（自定义 Security Hub CSPM 规则）

**计划类型：**已触发变更

**参数：**无

此控件检查是否计划删除 KMS 密钥。如果计划删除 KMS 密钥，则控制失败。

KMS 密钥一经删除就无法恢复。如果删除 KMS 密钥，则使用 KMS 密钥加密的数据也将永久无法恢复。如果在计划删除的 KMS 密钥下加密了有意义的数据，请考虑使用新的 KMS 密钥对数据进行解密或重新加密数据，除非您故意执行*加密擦除*。

当计划删除 KMS 密钥时，如果计划错误，则会强制执行强制等待期，以便有时间撤消删除。默认等待期为 30 天，但当计划删除 KMS 密钥时，等待期可缩短至短至 7 天。在等待期限内，可以取消预定删除，KMS 密钥不会被删除。

有关删除 KMS 密钥的更多信息，请参阅 *AWS Key Management Service 开发人员指南*中的[删除 KMS 密钥](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html)。

### 修复
<a name="kms-3-remediation"></a>

要取消预定的 KMS 密钥删除，请参阅 *AWS Key Management Service 开发人员指南*中的[计划和取消密钥删除（控制台）](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys-scheduling-key-deletion.html#deleting-keys-scheduling-key-deletion-console)下的**取消密钥删除**。

## [KMS.4] 应启用 AWS KMS 密钥轮换
<a name="kms-4"></a>

**相关要求：**独联体 AWS 基金会基准 v5.0.0/3.6、CIS 基金会基准 v3.0.0/3.6、CIS AWS 基金会基准 v1.4.0/3.8、CIS AWS 基金会基准 v1.2.0/2.8、2、2 ( NIST.800-53.r5 SC-12)、8 (3)、PCI DSS AWS v3.2.1/3.6.4、PCI DSS v4.0.1/ NIST.800-53.r5 SC-1 3.7.4 NIST.800-53.r5 SC-2

**类别：**保护 > 数据保护 > 加密 data-at-rest

**严重性：**中

**资源类型：**`AWS::KMS::Key`

**AWS Config 规则：**[https://docs.aws.amazon.com/config/latest/developerguide/cmk-backing-key-rotation-enabled.html](https://docs.aws.amazon.com/config/latest/developerguide/cmk-backing-key-rotation-enabled.html)

**计划类型：**定期

**参数：**无

AWS KMS 允许客户轮换备用密钥，后备密钥是存储在 KMS 密钥中的 AWS KMS 密钥材料，与 KMS 密钥的密钥 ID 相关联。备用密钥被用于执行加密操作，例如加密和解密。目前，自动密钥轮换会保留所有之前的备用密钥，以便解密已加密数据的操作可以不被察觉地进行。

CIS 建议您启用 KMS 密钥轮换。轮换加密密钥有助于减少遭盗用密钥的潜在影响，因为使用可能已泄露的先前密钥无法访问使用新密钥加密的数据。

### 修复
<a name="kms-4-remediation"></a>

要启用 KMS 密钥轮换，请参阅*AWS Key Management Service 开发人员指南*中的[如何启用和禁用自动密钥轮换](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html#rotating-keys-enable-disable)。

## [KMS.5] KMS 密钥不应可公开访问
<a name="kms-5"></a>

**类别：**保护 > 安全网络配置 > 不公开访问的资源

**严重性：**严重

**资源类型：**`AWS::KMS::Key`

**AWS Config 规则：**[https://docs.aws.amazon.com/config/latest/developerguide/kms-key-policy-no-public-access.html](https://docs.aws.amazon.com/config/latest/developerguide/kms-key-policy-no-public-access.html)

**计划类型：**已触发变更

**参数：**无

它控制检查 AWS KMS key 是否可以公开访问。如果 KMS 密钥可公开访问，则此控件将失败。

实施最低权限访问对于降低安全风险以及错误或恶意意图的影响至关重要。如果的密钥策略 AWS KMS key 允许从外部账户进行访问，则第三方可能能够使用该密钥对数据进行加密和解密。这可能导致内部或外部威胁泄露使用密钥 AWS 服务 的数据。

**注意**  
 AWS KMS key 如果您的配置 AWS Config 阻止在 KMS 密钥的配置项目 (CI) 中记录密钥策略，则此控件还会返回`FAILED`结果。 AWS Config 要在 CI 中填充 KMS 密钥的密钥策略，[AWS Config 角色](https://docs.aws.amazon.com/config/latest/developerguide/gs-cli-prereq.html#gs-cli-create-iamrole)必须有权使用 [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html)API 调用读取密钥策略。要解决此类`FAILED`发现，请检查可阻止 AWS Config 角色对 KMS 密钥的密钥策略具有读取权限的策略。例如，请检查以下内容：  
KMS 密钥的密钥策略。
中 AWS Organizations 适用于您的账户的@@ [服务控制策略 (SCPsRCPs)](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html) [和资源控制策略 ()](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)。
该 AWS Config 角色的权限（如果您未使用[AWS Config 服务相关角色](https://docs.aws.amazon.com/config/latest/developerguide/using-service-linked-roles.html)）。
此外，此控件不会评估使用通配符或变量的策略条件。要生成 `PASSED` 调查发现，密钥策略中的条件只能使用固定值，即不包含通配符或策略变量的值。有关策略变量的信息，请参阅《AWS Identity and Access Management 用户指南》**中的[变量和标签](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html)。

### 修复
<a name="kms-5-remediation"></a>

有关更新密钥策略的信息 AWS KMS key，请参阅《*AWS Key Management Service 开发者指南》 AWS KMS*[中的密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-overview)。