

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

# 的加密最佳实践 AWS Key Management Service
<a name="kms"></a>

[AWS Key Management Service (AWS KMS)](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html) 可帮助您创建和控制加密密钥以帮助保护您的数据。 AWS KMS 与大多数其他 AWS 服务 可以加密您的数据的软件集成。有关完整列表，请参阅[与AWS 服务 集成 AWS KMS](https://aws.amazon.com/kms/features/#AWS_Service_Integration)。 AWS KMS 还与集成 AWS CloudTrail 以记录您的 KMS 密钥的使用情况，以满足审计、监管和合规性需求。

KMS 密钥是中的主要资源 AWS KMS，也是加密密钥的逻辑表示形式。KMS 密钥主要分为三种类型：
+ 客户管理的密钥是您创建的 KMS 密钥。
+ AWS 托管密钥是代表您在账户中 AWS 服务 创建的 KMS 密钥。
+ AWS 拥有的密钥是 AWS 服务 拥有和管理的 KMS 密钥，用于多个密钥 AWS 账户。

有关密钥类型的更多信息，请参阅 [Customer keys and AWS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys)。

在中 AWS 云，策略用于控制谁可以访问资源和服务。例如，在 AWS Identity and Access Management (IAM) 中，*基于身份的策略*定义用户、用户组或角色的权限，*基于资源的策略*附加到资源（例如 S3 存储桶），并定义允许访问哪些委托人、支持的操作以及必须满足的任何其他条件。与 IAM 策略类似， AWS KMS 使用[密钥策略](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)来控制对 KMS 密钥的访问。每个 KMS 密钥必须有一个密钥政策，并且每个密钥只能有一个密钥政策。在定义允许或拒绝访问 KMS 密钥的策略时，请注意以下几点：
+ 您可以控制客户托管密钥的密钥策略，但不能直接控制 AWS 托管密钥或 AWS 自有密钥的密钥策略。
+ 密钥策略允许授予对 AWS KMS API 调用的精细访问权限。 AWS 账户除非密钥政策明确允许，否则您不能使用 IAM policy 允许访问 KMS 密钥。未经密钥政策许可，允许权限的 IAM policy 无效。有关更多信息，请参阅 [Allow IAM policies to allow access to the KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html#key-policy-default-allow-root-enable-iam)。
+ 您可以使用 IAM policy 拒绝访问客户管理的密钥，而无需密钥政策的相应权限。
+ 为多区域密钥设计密钥政策和 IAM policy 时，请考虑以下方面：
  + 密钥政策不是多区域密钥的[共享属性](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-overview.html#mrk-sync-properties)，也不会在相关的多区域密钥之间复制或同步。
  + 使用 `CreateKey` 和 `ReplicateKey` 操作创建多区域密钥时，除非在请求中指定了密钥政策，否则将应用[默认密钥政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html)。
  + 您可以实现条件键，例如 aws[: RequestedRegion](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-requestedregion)，将权限限制为特定的权限 AWS 区域。
  + 您可以使用授权来允许对多区域主密钥或副本密钥的权限。但是，不能使用单个授权来允许对多个 KMS 密钥的权限，即使它们是相关的多区域密钥。

在使用 AWS KMS 和创建密钥策略时，请考虑以下加密最佳做法和其他安全最佳实践：
+ 请遵循以下资源中的建议以获取 AWS KMS 最佳实践：
  + [AWS KMS 拨款最佳实践](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html#grant-best-practices)（AWS KMS 文档）
  + [IAM policy 最佳实践](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies-best-practices.html)（AWS KMS 文档）
+ 根据职责分离最佳实践，为管理密钥的人员和使用密钥的人员维护不同的身份：
  + 创建和删除密钥的管理员角色不能使用密钥。
  + 某些服务可能只需要加密数据，不应被授予使用密钥解密数据的能力。
+ 密钥政策应始终遵循最低权限模式。请勿将 `kms:*` 用于 IAM 或密钥政策中的操作，因为这会授予主体管理和使用密钥的权限。
+ 使用密钥策略中的 k [ms: ViaService](https://docs.aws.amazon.com/kms/latest/developerguide/policy-conditions.html#conditions-kms-via-service) 条件密钥，将客户托管密钥的使用限制在特定 AWS 服务 范围内。
+ 如果您可以在密钥类型之间进行选择，则首选客户管理的密钥，因为它们提供了最精细的控制选项，包括以下选项：
  + [管理身份验证和访问控制](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)
  + [启用和禁用密钥](https://docs.aws.amazon.com/kms/latest/developerguide/enabling-keys.html)
  + [轮换 AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)
  + [标记密钥](https://docs.aws.amazon.com/kms/latest/developerguide/tagging-keys.html)
  + [创建别名](https://docs.aws.amazon.com/kms/latest/developerguide/programming-aliases.html)
  + [删除 AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html)
+ AWS KMS 必须明确拒绝向未经批准的委托人授予管理和 AWS KMS 修改权限，并且允许语句中不应存在任何未经授权的委托人的修改权限。有关更多信息，请参阅 [AWS Key Management Service的操作、资源和条件键](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awskeymanagementservice.html)。
+ [为了检测未经授权使用的 KMS 密钥，请在中实现-kms-acti AWS Config ons 和 [iam-customer-policy-blockediam-inline-policy-blocked-kms-actions](https://docs.aws.amazon.com/config/latest/developerguide/iam-customer-policy-blocked-kms-actions.html) 规则。](https://docs.aws.amazon.com/config/latest/developerguide/iam-inline-policy-blocked-kms-actions.html)这可以防止委托人对所有 AWS KMS 资源使用解密操作。
+ 在中实施服务控制策略 (SCPs) AWS Organizations ，以防止未经授权的用户或角色直接通过命令或通过控制台删除 KMS 密钥。有关更多信息，请参阅[ SCPs 用作预防性控制措施](https://aws.amazon.com/blogs/mt/identity-guide-preventive-controls-with-aws-identity-scps/)（AWS 博客文章）。
+ 将 AWS KMS API 调用 CloudTrail 记录在日志中。这会记录相关的事件属性，例如，发出了哪些请求、发出请求的源 IP 地址以及发出请求的人。有关更多信息，请参阅使用[记录 AWS KMS API 调用 AWS CloudTrail](https://docs.aws.amazon.com/kms/latest/developerguide/logging-using-cloudtrail.html)。
+ 如果您使用[加密上下文](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#encrypt_context)，则它不应包含任何敏感信息。 CloudTrail 将加密上下文存储在纯文本 JSON 文件中，任何有权访问包含该信息的 S3 存储桶的人都可以查看这些文件。
+ 在监控客户管理的密钥的使用情况时，配置事件以在检测到特定操作时通知您，如密钥创建、更新客户管理的密钥政策或导入密钥材料。此外，还建议您实施自动响应，例如禁用密钥的 AWS Lambda 函数，或者根据您的组织策略执行任何其他事件响应操作。
+ 对于特定方案，如合规性、灾难恢复或备份，建议使用[多区域密钥](https://docs.aws.amazon.com/kms/latest/developerguide/multi-region-keys-auth.html)。多区域密钥的安全属性与单区域密钥有很大不同。授权创建、管理和使用多区域密钥时，以下建议适用：
  + 只允许主体将多区域密钥复制到需要它们的 AWS 区域 中。
  + 仅对需要多区域密钥的主体授予权限，并且仅对需要多区域密钥的任务授予权限。