

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

# 密钥存储
<a name="key-store-overview"></a>

*密钥存储*是用于存储和使用加密密钥的安全位置。中的默认密钥存储区 AWS KMS 还支持生成和管理其存储的密钥的方法。默认情况下，您在中创建的加密密钥材料在硬件安全模块 (HSMs) 中生成并受其保护，这些模块 AWS KMS 是 [FIPS 140-3 加密](https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4884)模块验证程序。 AWS KMS keys 您的 KMS 密钥的密钥材料永远不会留下 HSMs 未加密的内容。

AWS KMS 支持多种类型的密钥存储，以便在用于创建和管理加密密钥时保护您的密钥材料。 AWS KMS 提供的所有密钥存储选项 AWS KMS 均在 FIPS 140-3 安全等级 3 下持续验证，旨在防止任何人（包括 AWS 操作员）在未经您许可的情况下访问或使用您的纯文本密钥。

## AWS KMS 标准密钥库
<a name="default-key-store"></a>

默认情况下，KMS 密钥是使用标准 AWS KMS HSM 创建的。从您的角度来看，这种 HSM 类型可以看作是一个多租户队伍 HSMs ，它允许最具可扩展性、最低成本和最容易管理的密钥存储。如果您要创建一个用于一个或多个密钥的 KMS 密钥， AWS 服务 以便服务可以代表您加密您的数据，则您将创建一个对称密钥。如果您在自己的应用程序设计中使用 KMS 密钥，则可以选择创建对称加密密钥、非对称密钥或 HMAC 密钥。

在标准密钥存储选项中， AWS KMS 创建您的密钥，然后使用服务内部管理的密钥对其进行加密。然后，您密钥的加密版本的多个副本将存储在系统中，系统旨在保障持久性。在标准密钥库类型中生成和保护密钥材料可让您充分利用密 AWS 钥库的可扩展性、可用性和耐久性， AWS KMS 同时将操作负担和成本降至最低。

## AWS KMS 带有导入密钥材料的标准密钥库
<a name="imported-key-material"></a>

您可以选择将密钥材料导入并存储给定密钥的唯一副本，从而生成自己的 256 位对称加密密钥 AWS KMS、RSA 或椭圆曲线 (ECC) 密钥或基于哈希的消息身份验证码 (HMAC) 密钥，并将其应用于 KMS 密钥标识符 (KeyID)，然后将其应用于 KMS 密钥标识符 (KeyID)。 AWS KMS 这有时被称为*自带密钥*（BYOK）。必须使用颁发的公钥 AWS KMS、支持的加密封装算法和提供的基于时间的导入令牌来保护从本地密钥管理系统导入的密钥材料。 AWS KMS此过程将验证您的加密导入密钥在离开您的环境后，是否只能通过 AWS KMS HSM 解密。

如果您对生成密钥的系统有特定的要求，或者想要在外部保存密钥副本 AWS 作为备份，则导入的密钥材料可能会很有用。请注意，您需要对导入的密钥材料的整体可用性和持久性负责。虽然 AWS KMS 有您导入的密钥的副本，并且可以在您需要时保持高度可用，但导入的密钥提供了一个特殊的删除API — DeleteImportedKeyMaterial。此 API 将立即删除 AWS KMS 已导入的密钥材料的所有副本，但无法选择恢复密钥。 AWS 此外，您还可以为导入的密钥设置过期时间，过期后密钥将无法使用。要使密钥在中再次有用 AWS KMS，您必须重新导入密钥材料并将其分配给相同的 keyID。这种针对导入密钥的删除操作与代表您 AWS KMS 生成和存储的标准密钥不同。在标准情况下，密钥删除过程有一个强制性的等待期，在此期间，计划删除的密钥将首先被禁止使用。此操作允许您在可能需要该密钥才能访问数据的任何应用程序或 AWS 服务的日志中查看访问被拒绝的错误。如果您看到此类访问请求，可以选择取消计划删除并重新启用该密钥。经过可配置的等待期（7 到 30 天）后，KMS 才会真正删除密钥材料、keyID 以及与密钥关联的所有元数据。有关可用性和持久性的更多信息，请参阅《AWS KMS 开发人员指南》中的[保护导入的密钥材料](import-keys-protect.md)**。

导入的密钥材料还有一些其他限制需要注意。由于 AWS KMS 无法生成新的密钥材料，因此无法对导入密钥配置自动轮换。您需要使用新的 keyId 创建新 KMS 密钥，然后导入新的密钥材料才能实现有效的轮换。此外，在导入的对称密钥 AWS KMS 下创建的密文无法使用外部的本地密钥副本轻松解密。 AWS这是因为使用的经过身份验证的加密格式会将额外的元数据 AWS KMS 附加到密文中，以便在解密操作期间保证密文是由之前的加密操作下预期的 KMS 密钥创建的。大多数外部加密系统不了解如何通过解析这些元数据来获得原始加密文字，从而使用其对称密钥副本。在导入的非对称密钥（例如 RSA 或 ECC）下创建的密文可以在密钥的 AWS KMS 匹配（公共或私有）部分之外使用，因为没有向密文添加额外的元数据。 AWS KMS 

## AWS KMS 自定义密钥库
<a name="custom-key-store-overview"></a>

但是，如果您需要对的更多控制 HSMs，则可以创建自定义密钥库。

*自定义密钥存储库*是内部的密钥存储库 AWS KMS ，由外部的密钥管理器提供支持 AWS KMS，您拥有并管理该密钥管理器。自定义密钥存储区将便捷而全面的密钥管理界面 AWS KMS 与拥有和控制密钥材料和加密操作的能力相结合。在自定义密钥存储中使用 KMS 密钥时，加密操作实际上是通过您的密钥管理器使用您的加密密钥来执行。因此，您对加密密钥的可用性和持久性以及其操作承担更多责任。 HSMs

拥有您的密钥 HSMs 可能有助于满足某些监管要求，这些要求尚不允许多租户 Web 服务（例如标准 KMS 密钥存储）保存您的加密密钥。自定义密钥存储并不比使用 AWS-managed 的 KMS 密钥存储更安全 HSMs，但它们具有不同（且更高）的管理和成本影响。因此，您对加密密钥的可用性和持久性以及其操作承担更多责任。 HSMs无论您是使用标准密钥存储库 AWS KMS HSMs 还是自定义密钥存储库，该服务的设计都确保任何人（包括 AWS 员工）都无法在未经您许可的情况下检索或使用您的纯文本密钥。 AWS KMS 支持两种类型的自定义密钥存储库，即 AWS CloudHSM 密钥存储库和外部密钥存储库。

**不支持的功能**

AWS KMS 不支持自定义密钥存储库中的以下功能。
+ [非对称 KMS 密钥](symmetric-asymmetric.md)
+ [HMAC KMS 密钥](hmac.md)
+ [具有导入密钥材料的 KMS 密钥](importing-keys.md)
+ [自动密钥轮换](rotate-keys.md)
+ [多区域密钥](multi-region-keys-overview.md)

### AWS CloudHSM 钥匙库
<a name="hsm-store"></a>

 您可以在密钥库中创建 KM [AWS CloudHSM](https://aws.amazon.com/kms/pricing/)S 密钥，在您拥有和管理的 AWS CloudHSM 集群中生成、存储和使用根用户密钥。使用密钥进行某些加密操作的请求会被转发到您的 AWS CloudHSM 集群以执行该操作。 AWS KMS 虽然集 AWS CloudHSM 群由托管 AWS，但它是由您直接管理和操作的单租户解决方案。 AWS CloudHSM 集群中 KMS 密钥的大部分可用性和性能由您拥有。要查看 AWS CloudHSM 自定义密钥库是否适合您的要求，请阅读[AWS KMS 自定义密钥存储是否适合您？](https://aws.amazon.com/blogs/security/are-kms-custom-key-stores-right-for-you/) 在 AWS 安全博客上。

### 外部密钥存储
<a name="external-store"></a>

 您可以配置 AWS KMS 为使用外部密钥存储 (XKS)，在外部的密钥管理系统中生成、存储和使用根用户密钥。 AWS 云向 AWS KMS 提出的使用密钥进行某些加密操作的请求将转到您的外部托管系统以执行操作。具体而言，请求会被转发到您网络中的 XKS 代理，然后该代理会将请求转发到您使用的任何加密系统。XKS 代理是开源规范，任何人都可以集成。许多商业密钥管理供应商都支持 XKS 代理规范。由于外部密钥存储由您或第三方托管，因此您负责系统中密钥的所有可用性、持久性和性能。要查看外部密钥存储是否符合您的要求，请阅读 AWS 新闻博客上的[宣布 AWS KMS 外部密钥存储 (XKS)](https://aws.amazon.com/blogs/aws/announcing-aws-kms-external-key-store-xks/)。