

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

# AWS KMS keys
<a name="concepts"></a><a name="key-mgmt"></a><a name="kms_keys"></a>

您为在自己的加密应用程序中使用而创建和管理的 KMS 密钥属于*客户托管密钥*类型。客户托管密钥也可以与使用 KMS 密钥对 AWS 服务代表您存储的数据进行加密的服务结合使用。对于想要完全控制密钥生命周期和使用情况的客户，建议使用客户托管密钥。账户中拥有客户托管密钥将按月收费。此外，使用 and/or 管理密钥的请求会产生使用成本。有关更多详细信息，请参阅 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)。

在某些情况下，客户可能想要一项 AWS 服务来加密其数据，但他们不想承担管理密钥的开销，也不想为密钥付费。*AWS 托管式密钥*是您账户中存在的 KMS 密钥，但只能在某些情况下使用。具体而言，它只能在您运营的 AWS 服务环境中使用，并且只能由密钥存在的账户中的委托人使用。您无法对这些密钥的生命周期或权限进行任何管理。当您在 AWS 服务中使用加密功能时，您可能会看到 AWS 托管式密钥；它们使用的是 “aws<service code>” 形式的别名。例如，`aws/ebs` 密钥只能用于加密 EBS 卷，并且只能用于与密钥位于同一账户中的 IAM 主体使用的卷。想想 AWS 托管式密钥 一个范围缩小到只有你账户中的用户才能使用你账户中的资源的。您不能 AWS 托管式密钥 与其他账户共享在和下加密的资源。虽然您的账户中可以免费存在，但分配给该密钥的 AWS 服务会向您收取任何使用此类密钥的费用。 AWS 托管式密钥 

AWS 托管式密钥 是一种传统密钥类型，自 2021 年起不再为新 AWS 服务创建。取而代之的是，新（和旧） AWS 服务默认使用所谓的加密客户数据。*AWS 拥有的密钥* AWS 拥有的密钥 是 KMS 密钥，位于 AWS 服务管理的账户中，因此服务运营商可以管理其生命周期和使用权限。通过使用 AWS 拥有的密钥， AWS 服务可以透明地加密您的数据，并允许轻松地跨账户或跨区域共享数据，而无需担心密钥权限。 AWS 拥有的密钥 用于提供更轻松、自动化程度更高的数据保护 encryption-by-default的工作负载。由于这些密钥由所有和管理 AWS，因此您无需为其存在或使用付费，也无法更改其策略，无法审计这些密钥上的活动，也无法删除它们。在重视控制时使用客户托管密钥，在最重视便利性时使用 AWS 拥有的密钥 。


|  |  |  |  | 
| --- |--- |--- |--- |
|  |  客户托管密钥  |  AWS 托管式密钥  |  AWS 拥有的密钥  | 
|  密钥策略  | 完全由客户控制 | 由服务控制；客户可以查看 | 独家控制，只能由加密 AWS 数据的服务查看 | 
|  日志记录  | CloudTrail 客户跟踪或事件数据存储 | CloudTrail 客户跟踪或事件数据存储 | 客户无法查看 | 
|  生命周期管理  | 客户管理轮换、删除和区域位置 | AWS KMS 管理轮换（每年）、删除和区域位置 | AWS 服务 管理轮换、删除和区域位置 | 
|  定价  |  针对密钥存在收取的月度费用（按小时按比例计收）。此外还需收取密钥使用费  | 不收取月度费用；但调用者需要支付使用这些密钥的 API 费用 | 不向客户收费 | 

您创建的 KMS 密钥是[客户托管式密钥](#customer-mgn-key)。使用 KMS 密钥加密服务资源的 AWS 服务 通常会为您创建密钥。在您的 AWS 账户中 AWS 服务 创建的 KMS 密钥是[AWS 托管式密钥](#aws-managed-key)。在服务账户中 AWS 服务 创建的 KMS 密钥是[AWS 拥有的密钥](#aws-owned-key)。


| KMS 密钥的类型 | 可以查看 KMS 密钥元数据 | 可以管理 KMS 密钥 | 仅用于我的 AWS 账户 | [自动轮换](rotate-keys.md) | [定价](https://aws.amazon.com/kms/pricing/) | 
| --- | --- | --- | --- | --- | --- | 
| [客户托管的密钥](#customer-mgn-key) | 支持 | 是 | 是 | 可选。 | 月度费用（按小时计费）每次使用费用 | 
| [AWS 托管式密钥](#aws-managed-key) | 是 | 否 | 是 | 必需。每年（大约 365 天）。 | 没有月度费用按次使用费（有些人会为您 AWS 服务 支付此费用） | 
| [AWS 拥有的密钥](#aws-owned-key) | 否 | 否 | 否 |  AWS 服务 管理轮换策略 | 无费用 | 

[AWS 与之集成的服务](service-integration.md)对 KMS 密钥的支持各不 AWS KMS相同。默认情况下，某些 AWS 服务会使用 AWS 拥有的密钥 或来加密您的数据 AWS 托管式密钥。某些 AWS 服务支持客户管理的密钥。其他 AWS 服务支持所有类型的 KMS 密钥 AWS 拥有的密钥，使您可以轻松获取 AWS 托管式密钥、查看或控制客户托管的密钥。有关 AWS 服务提供的加密选项的详细信息，请参阅该服务的用户指南或开发人员指南中的*静态*加密主题。

## 客户自主管理型密钥
<a name="customer-mgn-key"></a>

您创建的 KMS 密钥是*客户托管式密钥*。客户托管密钥是您 AWS 账户 自己创建、拥有和管理的 KMS 密钥。您可以完全控制这些 KMS 密钥，包括建立和维护其[密钥策略、IAM policy 和授权](control-access.md)、[启用和禁用](enabling-keys.md)它们、[轮换其加密材料](rotate-keys.md)、[添加标签](tagging-keys.md)、[创建别名](alias-create.md)（引用了 KMS 密钥）以及[计划删除 KMS 密钥](deleting-keys.md)。

客户托管密钥显示在 AWS KMS的 AWS 管理控制台 的 **Customer managed keys**（客户托管密钥）页面上。要明确地标识客户托管密钥，请使用 [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) 操作。对于客户托管密钥，`DescribeKey` 响应的 `KeyManager` 字段的值为 `CUSTOMER`。

您可以在加密操作中使用客户托管密钥并在 AWS CloudTrail 日志中审核其使用情况。此外，许多[与 AWS KMS集成的AWS 服务](service-integration.md)使您能够指定客户托管密钥以保护为您存储和管理的数据。

客户托管密钥会产生月费以及超过免费套餐使用量的费用。它们将计入您账户的 AWS KMS [配额](limits.md)。有关详细信息，请参阅 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)和[配额](limits.md)。

## AWS 托管式密钥
<a name="aws-managed-key"></a>

*AWS 托管式密钥*是您账户中的 KMS 密钥，由[与集成的AWS 服务](https://aws.amazon.com/kms/features/#AWS_Service_Integration)代表您创建、管理和使用 AWS KMS。

有些 AWS 服务允许您选择一个 AWS 托管式密钥 或一个客户托管的密钥来保护您在该服务中的资源。通常，除非要求您控制保护资源的加密密钥，否则 AWS 托管式密钥 不妨选择。您不必创建或维护密钥或密钥策略，并且永远不会产生 AWS 托管式密钥月度费用。

您有权 AWS 托管式密钥在您的账户[中查看](viewing-keys.md)、[查看其密钥策略](key-policy-viewing.md)并[审核其在 AWS CloudTrail 日志中的使用](logging-using-cloudtrail.md)情况。但是，您不能更改其任何属性 AWS 托管式密钥、轮换它们、更改其密钥策略或安排将其删除。而且，您不能直接 AWS 托管式密钥 在加密操作中使用；创建加密操作的服务会代表您使用它们。

组织中的[资源控制策略](resource-control-policies.md)不适用于 AWS 托管式密钥。

AWS 托管式密钥 显示在 fo **AWS 托管式密钥**r AWS 管理控制台 的页面上 AWS KMS。您也可以 AWS 托管式密钥 通过别名进行识别，其格式为 `aws/service-name``aws/redshift`，例如。要明确识别 AWS 托管式密钥，请使用[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)操作。对于 AWS 托管式密钥，`DescribeKey` 响应的 `KeyManager` 字段的值为 `AWS`。

所有这些 AWS 托管式密钥 都是每年自动轮换的。您不能更改此轮换计划。

**注意**  
2022年5月，将轮换时间表 AWS 托管式密钥 从每三年（约1,095天） AWS KMS 改为每年（约365天）。

不收取月费 AWS 托管式密钥. 超出免费套餐的使用可能会收取费用，但有些 AWS 服务会为您支付这些费用。有关详细信息，请参阅服务的用户指南或开发人员指南中的*静态加密*主题。有关详细信息，请参阅 [AWS Key Management Service 定价](https://aws.amazon.com/kms/pricing/)。

AWS 托管式密钥 不要计入您账户中每个区域的 KMS 密钥数量的资源配额。但是，当代表您账户中的委托人使用这些 KMS 密钥时，它们将计入请求配额。有关更多信息，请参阅 [配额](limits.md)。

## AWS 拥有的密钥
<a name="aws-owned-key"></a>

*AWS 拥有的密钥*是 AWS 服务拥有和管理的 KMS 密钥的集合，用于多个密钥 AWS 账户。尽管 AWS 拥有的密钥 不在您的账户中 AWS 账户，但 AWS 服务可以使用 AWS 拥有的密钥 来保护您账户中的资源。

某些 AWS 服务允许您选择 AWS 拥有的密钥 或客户管理的密钥。通常，除非要求您审核或控制保护资源的加密密钥， AWS 拥有的密钥 否则不妨选择。 AWS 拥有的密钥 完全免费（没有月费或使用费），它们不计入您账户的[AWS KMS 配额](limits.md)，而且易于使用。您不必创建或维护该密钥或其密钥策略。

的轮换因服务 AWS 拥有的密钥 而异。有关特定项轮换的信息 AWS 拥有的密钥，请参阅该服务的用户指南或开发者指南中的*静态加密*主题。

## AWS KMS key 等级制度
<a name="key-hierarchy"></a>

您的密钥层次结构从顶级逻辑密钥开始，即 AWS KMS key。KMS 密钥表示顶级密钥材料的容器，在 AWS 服务命名空间中使用 Amazon Resource Name (ARN) 进行唯一定义。ARN 包含唯一生成的密钥标识符，即*密钥 ID*。KMS 密钥是根据用户通过 AWS KMS发起的请求创建的。收到后， AWS KMS 请求创建初始 HSM 支持密钥 (HBK)，将其放入 KMS 密钥容器中。HBK 在域中的 HSM 上生成，并且设计为永远不会以明文形式从 HSM 导出。相反地，HBK 在 HSM 管理的域密钥下以加密形式导出。 HBKs 这些导出的密钥令牌称为导出的密钥令牌 (EKTs)。

EKT 将导出到高持久性、低延迟的存储中。例如，假设您收到逻辑 KMS 密钥的 ARN。这表示您的密钥层次结构或加密上下文的顶部。您可以在自己的账户中创建多个 KMS 密钥，并像任何其他 AWS 命名资源一样对 KMS 密钥设置策略。

在特定 KMS 密钥的层次结构中，可以将 HBK 视为 KMS 密钥的一个版本。当您想要轮换 KMS 密钥时 AWS KMS，会创建一个新的 HBK，并将其与 KMS 密钥关联为 KMS 密钥的主动 HBK。较旧 HBKs 的数据会被保留，可用于解密和验证以前受保护的数据。但只有活动的加密密钥才能用于保护新信息。

![\[AWS KMS key 等级制度。\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/CMK-Hierarchy.png)


您可以通过 AWS KMS 请求使用您的 KMS 密钥直接保护信息，或者请求受您的 KMS 密钥保护的其他由 HSM 生成的密钥。这些密钥称为客户数据密钥，或 CDKs。 CDKs 可以加密后返回为密文 (CT)、纯文本或两者兼而有之。所有使用 KMS 密钥加密的对象（客户提供的数据或 HSM 生成的密钥）只能通过调用在 HSM 上进行解密。 AWS KMS

返回的密文或解密后的有效载荷永远不会存储在其中。 AWS KMS该信息通过与 AWS KMS的 TLS 连接返回给您。这也适用于 AWS 服务部门代表您拨打的电话。

密钥层次结构和特定密钥属性如下表中所示。


| Key | 说明 | 生命周期 | 
| --- | --- | --- | 
|  **域密钥**  |  仅在 HSM 内存中的 256 位 AES-GCM 密钥，用于包装 KMS 密钥（HSM 备用密钥）的版本。  |  每天轮换1  | 
|  **HSM 备用密钥**  |  256 位对称密钥或者 RSA 或椭圆曲线私有密钥，用于保护客户数据和密钥，在域密钥下加密存储。。一个或多个 HSM 备用密钥组成 KMS 密钥（通过 keyId 表示）。  |  每年轮换2（可选配置）  | 
|  **派生加密密钥**  |  仅在 HSM 内存中的 256 位 AES-GCM 密钥，用于加密客户数据和密钥。从每个加密的 HBK 派生。  |  每次加密时使用一次，并在解密时重新生成   | 
|  **客户数据密钥**  |  以明文和密文形式从 HSM 导出的、用户定义的对称或非对称密钥。 在 HSM 备用密钥下加密，然后通过 TLS 通道返回给授权用户。  |  轮换和使用由应用程序控制  | 

1 AWS KMS 可能会不时地将域密钥轮换放宽到最多每周一次，以处理域管理和配置任务。

2 由您代您 AWS 托管式密钥 创建和管理 AWS KMS 的默认值每年自动轮换。

## 密钥标识符 (KeyId)
<a name="key-id"></a>

密钥标识符用作 KMS 密钥的名称。它们可帮助您在控制台中识别 KMS 密钥。您可以使用它们来指示要在 AWS KMS API 操作、密钥策略、IAM policy 和授权中使用的 KMS 密钥。密钥标识符值跟与 KMS 密钥关联的密钥材料完全无关。

AWS KMS 定义了几个密钥标识符。创建 KMS 密钥时， AWS KMS 会生成密钥 ARN 和密钥 ID，它们是 KMS 密钥的属性。创建[别](kms-alias.md)名时， AWS KMS 会根据您定义的别名生成别名 ARN。您可以在和的 AWS KMS API 中查看密钥 AWS 管理控制台 和别名标识符。

在 AWS KMS 控制台中，您可以按密钥 ARN、密钥 ID 或别名查看和筛选 KMS 密钥，并按密钥 ID 和别名进行排序。有关在控制台中查找密钥标识符的帮助，请参阅[查找密钥 ID 和密钥 ARN](find-cmk-id-arn.md)。

在 AWS KMS API 中，用于标识 KMS 密钥的参数被命名`KeyId`或变体，例如`TargetKeyId`或`DestinationKeyId`。但是，这些参数的值并不仅限于 key IDs。一些参数可以使用任意有效的密钥标识符。有关每个参数的值的信息，请参阅《 AWS Key Management Service API 参考》中的参数描述。

**注意**  
使用 AWS KMS API 时，请注意您使用的密钥标识符。不同 APIs 需要不同的密钥标识符。通常，请在您的任务中使用最完整实用的密钥标识符。

AWS KMS 支持以下密钥标识符。

**密钥 ARN**  <a name="key-id-key-ARN"></a>
密钥 ARN 是 KMS 密钥的 Amazon Resource Name (ARN)。它是 KMS 密钥唯一的完全限定标识符。密钥 ARN 包括 AWS 账户、区域和密钥 ID。有关查找 KMS 密钥的密钥 ARN 的帮助，请参阅 [查找密钥 ID 和密钥 ARN](find-cmk-id-arn.md)。  
密钥 ARN 的格式如下：  

```
arn:<partition>:kms:<region>:<account-id>:key/<key-id>
```
以下是单区域 KMS 密钥的示例密钥 ARN。  

```
arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
```
[多区域密钥 ARNs 的密钥*key-id*](multi-region-keys-overview.md)元素以`mrk-`前缀开头。以下是多区域密钥的示例密钥 ARN。  

```
arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab
```

**密钥 ID**  <a name="key-id-key-id"></a>
密钥 ID 唯一地标识账户和区域中的 KMS 密钥。有关查找 KMS 密钥的密钥 ID 的帮助，请参阅 [查找密钥 ID 和密钥 ARN](find-cmk-id-arn.md)。  
以下是单区域 KMS 密钥的示例密钥 ID。  

```
1234abcd-12ab-34cd-56ef-1234567890ab
```
[多区域密钥 IDs 的密钥](multi-region-keys-overview.md)以`mrk-`前缀开头。以下是多区域密钥的示例密钥 ID。  

```
mrk-1234abcd12ab34cd56ef1234567890ab
```

**别名 ARN**  <a name="key-id-alias-ARN"></a>
别名 ARN 是别名的亚马逊资源名称 (ARN)。 AWS KMS 它是别名及所表示 KMS 密钥的唯一的完全限定标识符。别名 ARN 包括 AWS 账户、地区和别名。  
在任何给定时间，一个别名 ARN 标识一个特定的 KMS 密钥。但是，由于您可以更改与别名关联的 KMS 密钥，别名 ARN 在不同时间可以标识不同的 KMS 密钥。有关查找 KMS 密钥的别名 ARN 的帮助，请参阅 [查找 KMS 密钥的别名和别名 ARN](alias-view.md)。  
别名 ARN 的格式如下：  

```
arn:<partition>:kms:<region>:<account-id>:alias/<alias-name>
```
以下是虚构的 `ExampleAlias` 的别名 ARN。  

```
arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias
```

**别名**  <a name="key-id-alias-name"></a>
别名是最多 256 个字符的字符串。它唯一地标识某个账户和区域内关联的一个 KMS 密钥。在 AWS KMS API 中，别名始终以开头`alias/`。有关查找 KMS 密钥的别名的帮助，请参阅 [查找 KMS 密钥的别名和别名 ARN](alias-view.md)。  
别名的格式如下：  

```
alias/<alias-name>
```
例如：  

```
alias/ExampleAlias
```
别名的 `aws/` 前缀保留用于 [AWS 托管式密钥](#aws-managed-key)。您无法使用此前缀创建别名。例如，亚马逊简单存储服务 (Amazon S3) Simple Service 的别名如下所示。 AWS 托管式密钥   

```
alias/aws/s3
```

# 中的非对称密钥 AWS KMS
<a name="symmetric-asymmetric"></a>

*非对称 KMS 密钥*表示数学上相关的公有密钥和私有密钥对。公有密钥可以交给任何人，即使他们不可靠，但私有密钥必须保密。

在非对称 KMS 密钥中，私钥是在中创建的， AWS KMS 并且永远不会处于 AWS KMS 未加密状态。要使用私钥，您必须致电 AWS KMS。您可以 AWS KMS 通过调用 AWS KMS API 操作来使用其中的公钥。或者，您可以[下载公钥](download-public-key.md)并在外部使用 AWS KMS。

如果您的用例要求无法呼叫的用户在外部 AWS 进行加密 AWS KMS，那么非对称 KMS 密钥是一个不错的选择。但是，如果您要创建 KMS 密钥来加密您在 AWS 服务中存储或管理的数据，请使用对称加密 KMS 密钥。 [AWS 与之集成的服务](https://aws.amazon.com/kms/features/#AWS_Service_Integration)仅 AWS KMS使用对称加密 KMS 密钥来加密您的数据。这些服务不支持使用非对称 KMS 密钥进行加密。

使用对大于 4 KB 的邮件进行签名时 AWS KMS，必须在签名 AWS KMS 之前在外部对消息进行哈希处理。 AWS KMS 提供了三个用于处理消息输入的`MessageType`选项：`RAW`用于纯文本消息（在其中 AWS KMS 执行哈希）、`DIGEST`用于预哈希处理的消息（其中 AWS KMS 跳过哈希步骤），以及`EXTERNAL_MU`专门用于输入为 64 字节代表 μ 值的 ML-DSA KMS 密钥规范。[对于超过 4 KB 限制的大型消息，请在外部对消息进行哈希处理，并在调用 S AWS KMS[ign](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html) and Verify 操作时使用 [https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html#KMS-Sign-request-MessageType](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html#KMS-Sign-request-MessageType)（或用[https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html#KMS-Sign-request-MessageType](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html#KMS-Sign-request-MessageType)于 ML-DSA KMS 密钥）。 AWS KMS](https://docs.aws.amazon.com/kms/latest/APIReference/API_Verify.html)

AWS KMS 支持多种类型的非对称 KMS 密钥。

**RSA KMS 密钥**  
带有 RSA 密钥对的 KMS 密钥，用于加密和解密或签名和验证（但不能两者兼而有之）。 AWS KMS 支持多种密钥长度，以满足不同的安全要求。  
有关 AWS KMS 支持 RSA KMS 密钥的加密和签名算法的技术细节，请参阅 [RSA](symm-asymm-choose-key-spec.md#key-spec-rsa) 密钥规范。

**椭圆曲线（ECC）KMS 密钥**  
带有椭圆曲线密钥对的 KMS 密钥，用于签名和验证或派生共享密钥（但不能两者兼而有之）。 AWS KMS 支持几条常用的曲线。  
有关 AWS KMS 支持 ECC KMS 密钥的签名算法的技术细节，请参阅[椭圆曲线](symm-asymm-choose-key-spec.md#key-spec-ecc)密钥规范。

**ML-DSA KMS 密钥**  
使用 ML-DSA 密钥对进行签名和验证的 KMS 密钥。ML-DSA 是由美国国家标准与技术研究院（NIST）开发的后量子密码术标准，旨在抵御量子计算带来的安全威胁。对于从 RSA 或椭圆曲线数字签名算法过渡到后量子安全密码术的组织，ML-DSA 是推荐使用的数字签名算法。  
AWS KMS 支持多种密钥长度，以满足不同的安全要求。有关 AWS KMS 支持 ML-DSA KMS 密钥的签名算法的技术细节，请参阅 [M](symm-asymm-choose-key-spec.md#key-spec-mldsa) L-DSA 密钥规范。

**SM2 KMS 密钥（仅限中国区域）**  
带有密钥对的 KMS 密 SM2 钥，用于加密和解密、签名和验证或派生共享密钥（必须选择一种[Key usage](create-keys.md#key-usage)类型）。  
有关 AWS KMS 支持 SM2 KMS 密钥的加密和签名算法（仅限中国区域）的技术细节，[SM2 请参阅密钥](symm-asymm-choose-key-spec.md#key-spec-sm)规范。

有关选择非对称密钥配置的帮助，请参阅 [选择要创建的 KMS 密钥的类型](create-keys.md#symm-asymm-choose)。

**区域**

所有 AWS 区域 支持的密钥都支持非对称 KMS 密钥和非对称数据密钥对。 AWS KMS 

**了解详情**
+ 若要创建非对称 KMS 密钥，请参阅 [创建非对称 KMS 密钥](asymm-create-key.md)。
+ 若要创建多区域非对称 KMS 密钥，请参阅 [创建多区域主密钥](create-primary-keys.md)。
+ 要了解如何使用非对称 KMS 密钥签署消息和验证签名，请参阅 *AWS 安全博客*中的[采用 AWS KMS的新的非对称密钥功能进行数字签名](https://aws.amazon.com/blogs/security/digital-signing-asymmetric-keys-aws-kms/)。
+ 要了解删除非对称 KMS 密钥的特殊注意事项，请参阅[Deleting asymmetric KMS keys](deleting-keys.md#deleting-asymmetric-cmks)。
+ 要识别和查看非对称 KMS 密钥，请参阅[识别非对称 KMS 密钥](identify-key-types.md#identify-asymm-keys)。

# HMAC 键入 AWS KMS
<a name="hmac"></a>

基于哈希的消息身份验证码 (HMAC) KMS 密钥是用于在其中生成和验证的对称密钥。 HMACs AWS KMS与每个 HMAC KMS 密钥关联的唯一密钥材料提供了 HMAC 算法所需的秘密密钥。您可以将 HMAC KMS 密钥与 `[GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)` 和 [https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html) 操作结合使用以验证 AWS KMS中的数据的完整性和真实性。

HMAC 算法结合了加密哈希函数和共享密钥。他们获取消息和密钥，例如 HMAC KMS 密钥中的密钥材料，然后返回一个唯一的固定大小的代码或*标签*。即使是消息的一个字符发生了变化，或者密钥不完全相同，生成的标签也会完全不同。通过要求密钥，HMAC 还可以提供真实性；如果没有密钥，就不可能生成相同的 HMAC 标签。 HMACs 有时被称为*对称签名*，因为它们的工作原理类似于数字签名，但签名和验证都使用单个密钥。

HMAC KMS 密钥和 AWS KMS 使用的 HMAC 算法符合 [RF](https://datatracker.ietf.org/doc/html/rfc2104) C 2104 中定义的行业标准。该 AWS KMS [GenerateMac](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html)操作会生成标准的 HMAC 标签。HMAC KMS 密钥是在通过 [FIPS 140-3 加密模块验证计划认证的 AWS KMS 硬件安全模块中生成的（中国（](https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4884)北京）和中国（宁夏）地区除外），并且永远不会保持未加密状态。 AWS KMS 要使用 HMAC KMS 密钥，您必须调用 AWS KMS。

您可使用 HMAC KMS 密钥确定消息的真实性，例如 JSON Web 令牌（JWT）、令牌化的信用卡信息或提交的密码。它们也可以用作安全的密钥派生函数 (KDFs)，尤其是在需要确定性密钥的应用程序中。

与应用程序软件相比，HMAC KMS 密钥具有优势 HMACs ，因为密钥材料完全是在应用程序软件中生成和使用的 AWS KMS，受您在密钥上设置的访问控制的约束。

**提示**  
最佳实践建议您限制包括 HMAC 在内的任何签名机制的有效时间。这阻止了行为者利用已签名信息反复地或是在消息被取代很久之后建立有效性的攻击。HMAC 标签不包含时间戳，但是您可以在令牌或消息中包含时间戳，以帮助您检测何时刷新 HMAC。

**支持的加密操作**  
HMAC KMS 密钥只支持 [https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateMac.html) 和 [https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_VerifyMac.html) 加密操作。您不能使用 HMAC KMS 密钥加密数据或签名消息，也不能在 HMAC 操作中使用任何其他类型的 KMS 密钥。当您使用 `GenerateMac` 操作时，您可提供最多为 4096 个字节的消息、HMAC KMS 密钥以及与 HMAC 密钥规范兼容的 MAC 算法，`GenerateMac` 将计算 HMAC 标签。要验证 HMAC 标签，您必须提供 HMAC 标签以及相同的消息、HMAC KMS 密钥和 `GenerateMac` 用于计算原始 HMAC 标签的 MAC 算法。`VerifyMac` 操作计算 HMAC 标签并验证它与提供的 HMAC 标签是否相同。如果输入和计算的 HMAC 标签不相同，则验证失败。  
HMAC KMS 密钥不**支持[自动密钥轮换](rotate-keys.md)，并且您无法在[自定义密钥存储](key-store-overview.md#custom-key-store-overview)中创建 HMAC KMS 密钥。  
如果您要创建 KMS 密钥来加密 AWS 服务中的数据，请使用对称加密密钥。您不能使用 HMAC KMS 密钥。

** 区域**  
所有 AWS 区域 支持的密钥都支持 HMAC KMS 密钥。 AWS KMS 

**了解详情**
+ 要创建 HMAC KMS 密钥，请参阅 [创建 HMAC KMS 密钥](hmac-create-key.md)。
+ 要创建多区域 HMAC KMS 密钥，请参阅 [中的多区域密钥 AWS KMS](multi-region-keys-overview.md)。
+ 要检查 AWS KMS 控制台为 HMAC KMS 密钥设置的默认密钥策略的差异，请参阅[允许密钥用户使用 KMS 密钥进行加密操作](key-policy-default.md#key-policy-users-crypto)。
+ 要识别和查看 HMAC KMS 密钥，请参阅 [识别 HMAC KMS 密钥](identify-key-types.md#hmac-view)。
+ 要了解如何使用 HMACs 创建 JSON Web 令牌，请参阅*AWS 安全博客 AWS KMS*中的[如何 HMACs 内部保护](https://aws.amazon.com/blogs/security/how-to-protect-hmacs-inside-aws-kms/)。
+ 收听播客:在*官方 AWS 播客 AWS Key Management Service上*[介绍 HMACs ](https://aws.amazon.com/podcasts/introducing-hmacs-apis-in-aws-key-management-service).

# ML-DSA 键入 AWS KMS
<a name="mldsa"></a>

AWS Key Management Service (AWS KMS) 支持模块-莱迪思数字签名算法 (ML-DSA)，用于后量子加密签名。该实现遵循[联邦信息处理标准（FIPS）204 标准](https://csrc.nist.gov/pubs/fips/204/final)，有助于抵御未来的量子计算威胁。 AWS KMS 在 FIPS 140-3 安全性 3 级认证硬件安全模块中创建和保护所有 ML-DSA 密钥和签名操作。为了帮助在安全性与性能之间取得平衡，ML-DSA 通过不同的密钥规范 AWS KMS 提供了三个不同的安全级别，即 ML\$1DSA\$144、ML\$1DSA\$165 和 ML\$1DSA\$187。

AWS KMS 支持使用消息类型对不超过 4 KB 的消息进行非对称密钥签名。`RAW`对于超过此大小的消息，必须按 NIST FIPS 204 第 6.2 节所定义，在外部计算 ML-DSA 签名中使用的 64 字节消息表示值 μ。使用 “ AWS KMS [签名](https://docs.aws.amazon.com/kms/latest/APIReference/API_Sign.html)” 操作中的`EXTERNAL_MU`消息类型来指定此预处理的 64 字节消息。使用同一消息和私有密钥时，由外部计算的 μ 所生成的签名与 `RAW` 生成的签名相同。请注意，此签名不同于 NIST FIPS 204 第 5.4 节中的“预哈希” ML-DSA 或 HashML-DSA。

有关使用 ML-DSA 和 EXTERNAL\$1MU 消息类型的更多信息，请参阅 [ML-DSA 密钥规范](symm-asymm-choose-key-spec.md#key-spec-mldsa)。

有关使用 ML-DSA 和 EXTERNAL\$1MU 消息类型的示例，请参阅[使用 ML-DSA 密钥对进行离线验证](offline-operations.md#mldsa-offline-verification)。

# 中的多区域密钥 AWS KMS
<a name="multi-region-keys-overview"></a>

AWS KMS 支持*多区域密钥*，这些 AWS KMS keys 密钥不同 AWS 区域 ，可以互换使用，就好像您在多个区域中使用相同的密钥一样。每组*相关的*多区域密钥都具有相同的密钥材料和密[钥 ID](concepts.md#key-id-key-id)，因此您可以将数据合二为一， AWS 区域 然后使用不同的密钥进行解密， AWS 区域 而无需重新加密或进行跨区域调用。 AWS KMS

与所有 KMS 密钥一样，多区域密钥永远不会处于 AWS KMS 未加密状态。您可以创建用于加密或签名的对称或非对称多区域密钥，创建用于生成和验证 HMAC 标签的 HMAC 多区域密钥，并创建[带导入密钥材料的多区域密钥](importing-keys.md)或 AWS KMS 生成的密钥材料。您必须独立管理每个多区域密钥，包括创建别名和标签、设置其密钥策略和授权以及有选择性地启用和禁用它们。您可以在可使用单区域密钥进行的所有加密操作中使用多区域密钥。

多区域密钥是一个灵活而强大的解决方案，适用于许多常见的数据安全场景。

**灾难恢复 **  
在备份和恢复架构中，即使发生中断，多区域密钥也允许您不间断地处理加密数据。 AWS 区域 备份区域中维护的数据可以在备份区域中解密，备份区域中新加密的数据可以在恢复该区域后在主区域中解密。

**全球数据管理**  
在全球运营的企业需要将全球分布的数据一致地提供到各个 AWS 区域。您可以在数据所在的所有区域中创建多区域密钥，然后将密钥用作单区域密钥，而不会出现跨区域调用的延迟或在每个区域中使用不同密钥重新加密数据的成本。

**分布式签名应用程序**  
需要跨区域签名功能的应用程序可以使用多区域非对称签名密钥以在不同的 AWS 区域一致、反复地生成同样的数字签名。  
如果您使用带有单个全局信任存储的证书链（用于单个根证书颁发机构 (CA)，以及由根 CA CAs 签名的区域中间证书，则不需要多区域密钥。但是，如果您的系统不支持中间 CAs认证（例如应用程序签名），则可以使用多区域密钥来保持区域认证的一致性。

**跨多个区域的双活应用程序**  
某些工作负载和应用程序可以跨越双活架构中的多个区域。对于这些应用程序，多区域密钥可以通过提供相同的密钥材料对可能跨区域边界移动的数据进行并发加密和解密操作来降低复杂性。

您可以将多区域密钥与客户端加密库结合使用，例如 [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/)、[AWS 数据库加密 SDK](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/) 和 [Amazon S3 客户端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)。

目前[，大多数与之集成的 AWS KMS用于静态加密或数字签名的AWS 服务](https://aws.amazon.com/kms/features/)都将多区域密钥视为单区域密钥。他们可能会重新包装或重新加密在区域之间移动的数据。例如，即使复制受多区域密钥保护的对象，Amazon S3 跨区域复制也会解密和重新加密目标区域中 KMS 密钥下的数据。请参阅特定服务的文档，了解服务如何复制加密数据，以及它是否以不同的方式对待多区域密钥。

多区域键不是全局键。创建一个多区域主键，然后将其复制到您在 [AWS 分区](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)中选择的区域。然后单独管理每个区域中的多区域键。 AWS 也 AWS KMS 不会自动代表您创建多区域密钥或将多区域密钥复制到任何区域。 [AWS 托管式密钥](concepts.md#aws-managed-key)，即 AWS 服务在您的账户中为您创建的 KMS 密钥，始终是单区域密钥。

对于中国区域，您可以使用多区域密钥功能在中国区域分区 (`aws-cn`) 内复制 KMS 密钥。例如，您可以将密钥从中国（北京）区域复制到中国（宁夏）区域，反之亦然。将密钥从一个中国地区复制到另一个中国地区，即表示您同意使用目标地区的密钥并遵守目标地区的所有适用协议条款。 AWS Key Management Service 您不能将密钥从北京和宁夏区域复制到中国 AWS 区域分区之外的区域。同样，也不能将密钥从中国区域分区之外的区域复制到北京和宁夏区域。

您不能将现有的单区域密钥转换为多区域密钥。此设计可确保使用现有单区域密钥保护的所有数据都保持相同的数据驻留和数据主权属性。

对于大多数数据安全需求，区域资源的区域隔离和容错能力使标准的 AWS KMS 单区域密钥成为最合适的解决方案。但是，当您需要跨多个区域加密或对客户端应用程序中的数据进行签名时，多区域密钥可能是解决方案。



**区域**

所有 AWS 区域 支持的密钥都支持多区域密钥。 AWS KMS 

**定价和配额**

一组相关的多区域密钥中的每个密钥都被视为一个 KMS 密钥，用于定价和配额。[AWS KMS 配额](limits.md)是针对账户的每个区域单独计算的。每个区域中的多区域密钥的使用和管理将计入该区域的配额。

**支持的 KMS 密钥类型**

您可以创建以下类型的多区域 KMS 密钥：
+ 对称加密 KMS 密钥
+ 非对称 KMS 密钥
+ HMAC KMS 密钥
+ 具有导入密钥材料的 KMS 密钥

您不能在自定义密钥存储中创建多区域密钥。

**了解详情**
+ 要了解如何控制对多区域 KMS 密钥的访问，请参阅 [控制对多区域密钥的访问](multi-region-keys-auth.md)。
+ 要创建任何类型的多区域主 KMS 密钥，请参阅 [创建多区域主密钥](create-primary-keys.md)。
+ 要创建多区域副本 KMS 密钥，请参阅 [创建多区域副本密钥](multi-region-keys-replicate.md)。
+ 要更新主区域，请参阅 [更改一组多区域密钥中的主密钥](multi-region-update.md)。
+ 要识别和查看多区域 KMS 密钥，请参阅 [识别 HMAC KMS 密钥](identify-key-types.md#hmac-view)。
+ 要了解删除多区域 KMS 密钥的特殊注意事项，请参阅 [Deleting multi-Region keys](deleting-keys.md#deleting-mrks)。

## 术语和概念
<a name="multi-region-concepts"></a>

以下术语和概念用于多区域密钥。

### 多区域密钥
<a name="multi-Region-concept"></a>

*多区域密钥*是不同 AWS 区域中具有相同的密钥 ID 和密钥材料（以及其他[共享属性](#mrk-replica-key)）的一组 KMS 密钥之一。每个多区域密钥都是一个功能齐全的 KMS 密钥，可以完全独立于其相关的多区域密钥使用。由于所有*相关的*多区域密钥都具有相同的密钥 ID 和密钥材料，因此它们具有*互操作性*，也就是说，任何密钥中的任何相关多区域密钥 AWS 区域 都可以解密由任何其他相关多区域密钥加密的密文。

您可以在创建 KMS 密钥时设置其多区域属性。您不能更改现有密钥的多区域属性。您不能将单区域密钥转换为多区域密钥，或将多区域密钥转换为单区域密钥。要将现有工作负载移动到多区域方案中，您必须重新加密数据或使用新的多区域密钥创建新的签名。

多区域密钥可以是对[称的，也可以是非对称](symmetric-asymmetric.md)的，它可以使用 AWS KMS 密钥材料或[导入](importing-keys.md)的密钥材料。您不能在[自定义密钥存储](key-store-overview.md#custom-key-store-overview)中创建多区域密钥。

在一组相关的多区域密钥中，任何时候都只有一个[主键](#mrk-primary-key)。您可以在其他 AWS 区域中创建该主键的[副本密钥](#mrk-replica-key)。您还可以[更新主区域](multi-region-update.md#update-primary-console)，从而将主键更改为副本密钥，并将指定的副本密钥更改为主键。但是，每个主键或副本密钥中只能保留一个主键或副本密钥 AWS 区域。所有区域都必须位于同一个 [AWS 分区](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。

您可以在相同或不同的 AWS 区域中拥有多组相关多区域密钥。尽管相关的多区域密钥是可互操作的，但不相关的多区域密钥不可互操作。

### 主键
<a name="mrk-primary-key"></a>

多区域*主密钥*是一个 KMS 密钥，可以复制到同一分区 AWS 区域 中的其他密钥。每组多区域密钥只有一个主键。

主键与副本密钥的区别在以下几方面：
+ 只有主键可以[复制](multi-region-keys-replicate.md)。
+ 主键是其[副本密钥](#mrk-replica-key)的[共享属性](#mrk-replica-key)的来源，包括密钥材料和密钥 ID。
+ 您只能在主键上启用和禁用[自动密钥轮换](rotate-keys.md)。
+ 您可以随时[计划删除主键](deleting-keys.md#deleting-mrks)。但是在删除主键的所有副本密钥之前， AWS KMS 不会将其删除。

不过，主密钥和副本密钥在任何加密属性中都没有区别。您可以互换使用主键及其副本密钥。

您不需要复制主键。您可以像使用任何 KMS 密钥一样使用它，并在有用时复制它。但是，由于多区域密钥与单区域密钥具有不同的安全属性，因此我们建议您仅在计划复制多区域密钥时才创建多区域密钥。

### 副本密钥
<a name="mrk-replica-key"></a>

多区域*副本密钥*是一个 KMS 密钥，它具有与其[主密钥](#mrk-primary-key)和相关副本密钥相同的[密钥 ID](concepts.md#key-id-key-id) 和密钥材料，但位于不同的 AWS 区域中。

副本密钥是功能齐全的 KMS 密钥，具有其自己的密钥策略、授权、别名、标签和其他属性。它不是主键或任何其他密钥的副本或指针。即使某个副本密钥的主键及所有相关的副本密钥都被禁用，您也可以使用该副本密钥。您还可以将副本密钥转换为主键，将主键转换为副本密钥。副本密钥被创建后，仅依赖于其主键进行[密钥轮换](rotate-keys.md#multi-region-rotate)和[更新主区域](multi-region-update.md)。

主密钥和副本密钥在任何加密属性中都没有区别。您可以互换使用主键及其副本密钥。通过主密钥或副本密钥加密的数据可以通过相同的密钥或任何相关的主密钥或副本密钥进行解密。

### 复制
<a name="replicate"></a>

您可以*将多区域[主键](#mrk-primary-key)复制*到同一分区 AWS 区域 中的其他主键中。完成后，在指定区域 AWS KMS 创建多区域[副本密钥](#mrk-replica-key)，其[密钥 ID](concepts.md#key-id-key-id) 和其他[共享属性](#mrk-sync-properties)与其主键相同。对于带有`AWS_KMS`来源的 KMS 密钥， AWS KMS 可以安全地跨区域边界传输密钥材料，并将其与新的副本密钥相关联，所有这些都在区域边界内 AWS KMS。对于带有 `EXTERNAL` Origin 的 KMS 密钥，您必须将导入主区域密钥的相同密钥材料单独导入到每个副本区域密钥中。

### 共享属性
<a name="mrk-sync-properties"></a>

*共享属性*是与其副本密钥共享的多区域主键的属性。 AWS KMS 使用与主键相同的共享属性值创建副本密钥。然后，它会定期将主键的共享属性值与其副本密钥同步。您不能在副本密钥上设置这些属性。

以下是多区域密钥的共享属性。
+ [密钥 ID](concepts.md#key-id-key-id) —（[密钥 ARN](concepts.md#key-id-key-ARN) 的 `Region` 元素不同。）
+ [密钥材料](create-keys.md#key-origin) — 一组相关的多区域密钥中的主密钥和副本密钥共享相同的密钥材料。对于密钥材料由 AWS KMS （`AWS_KMS`来源）生成的多区域密钥，在创建副本或通过自动或按需轮换创建新的密钥材料时，将所有密钥材料从主密钥材料 AWS KMS 安全地传输到每个副本。对于具有导入密钥材料（`EXTERNAL`来源）的多区域密钥，会 AWS KMS 同步主密钥中的密钥材料标识符，但您必须将密钥材料单独导入每个副本密钥。
+ [密钥材料源](create-keys.md#key-origin)
+ [密钥规范](create-keys.md#key-spec)和加密算法
+ [密钥用法](create-keys.md#key-usage)
+ [自动密钥轮换](rotating-keys-enable.md) — 您只能在主键上启用和禁用自动密钥轮换。将使用共享密钥材料的所有版本创建新的副本密钥。有关更多信息，请参阅 [Rotating multi-Region keys](rotate-keys.md#multi-region-rotate)。
+ [按需轮换](rotating-keys-on-demand.md) – 您只能在对主密钥执行按需轮换。对于密钥材料由 AWS KMS （`AWS_KMS`来源）生成的多区域密钥，使用共享密钥材料的所有版本 AWS KMS 创建副本密钥。对于具有导入密钥材料（`EXTERNAL`来源）的多区域密钥，会将密钥材料 ID 和密钥材料描述从主密钥 AWS KMS 传播到副本密钥，但不传播密钥材料。您必须将正确的密钥材料分别导入到每个副本密钥中。有关更多信息，请参阅 [Rotating multi-Region keys](rotate-keys.md#multi-region-rotate)。

您还可以将相关多区域密钥的主名称和副本名称视为共享属性。当您[创建新的副本密钥](#mrk-replica-key)或[更新主密钥时，会将更改 AWS KMS 同步到所有相关的多区域密](multi-region-update.md#update-primary-console)钥。完成这些更改后，所有相关的多区域密钥都会准确列出其主键和副本密钥。

[多区域密钥的所有其他属性都是*独立的属性*，包括密钥描述、密[钥策略](key-policies.md)、[授权](grants.md)、[启用和禁用的密钥状态](enabling-keys.md)、[别名](kms-alias.md)和标签。](tagging-keys.md)您可以在所有相关的多区域密钥上为这些属性设置相同的值，但如果更改独立属性的值， AWS KMS 不会同步它。

您可以跟踪多区域密钥的共享属性的同步情况。在您的 AWS CloudTrail 日志中，查找[SynchronizeMultiRegionKey](ct-synchronize-multi-region-key.md)事件。

# 多区域密钥的安全注意事项
<a name="mrk-when-to-use"></a>

仅在需要时才使用 AWS KMS 多区域密钥。多区域密钥为工作负载提供灵活且可扩展的解决方案，这些工作负载可在 AWS 区域 之间移动加密数据或需要跨区域访问。如果您必须跨区域共享、移动或备份受保护的数据，或者需要为在不同区域运行的应用程序创建相同的数字签名，请考虑使用多区域密钥。

但是，创建多区域密钥的过程会跨 AWS KMS内的 AWS 区域 边界移动您的密钥材料。由多区域密钥生成的密文可能会由多个地理位置的多个相关密钥进行解密。对于区域隔离的服务和资源也有很大的益处。每个 AWS 区域 都是隔离的，独立于其他区域。区域提供容错能力、稳定性和弹性，还可以减少延迟。它们使您能够创建保持可用且不受其他区域中断影响的冗余资源。在中 AWS KMS，它们还确保每个密文只能用一个密钥解密。

多区域密钥还会引发新的安全注意事项：
+ 使用多区域密钥，控制访问和强制执行数据安全策略变得更加复杂。您需要确保在多个隔离区域的密钥上对策略进行一致的审计。您需要使用策略来强制实施边界，而不是依赖单独的密钥。

  例如，您需要对数据设置策略条件，以防止一个区域的薪酬团队能够读取另一个区域的工资单数据。此外，您还必须使用访问控制来防止一个区域中的多区域密钥保护一个租户的数据，而另一个区域中的相关多区域密钥保护另一个租户的数据的情况。
+ 跨区域审计密钥也更为复杂。使用多区域密钥，您需要检查和协调多个区域的审计活动，以便全面了解受保护数据的关键活动。
+ 遵守数据驻留要求可能会变得更加复杂。使用隔离的区域，您可以确保数据驻留和数据主权合规性。给定区域中的 KMS 密钥只能解密该区域中的敏感数据。在一个区域中加密的数据可以保持完全保护，并且在任何其他区域都无法访问。

  要使用多区域密钥验证数据驻留和数据主权，您需要实施访问策略并跨多个区域编译 AWS CloudTrail 事件。

为了便于您管理多区域密钥的访问控制，复制多区域密钥 (k [ms: ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html)) 的权限与创建密钥的标准权限 (k [ms: CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)) 是分开的。此外，还 AWS KMS 支持多区域密钥的多种政策条件`kms:MultiRegion`，包括允许或拒绝创建、使用或管理多区域密钥的权限`kms:ReplicaRegion`，以及限制可以将多区域密钥复制到的区域。有关更多信息，请参阅 [控制对多区域密钥的访问](multi-region-keys-auth.md)。

# 多区域密钥的工作原理
<a name="mrk-how-it-works"></a>

首先，您要在 AWS KMS 支持的（例如美国东部（弗吉尼亚北部）中创建 AWS 区域 对称或非对称的[多区域主键](multi-region-keys-overview.md#mrk-primary-key)。只有在创建密钥时，才能决定密钥是单区域还是多区域；以后不能更改此属性。与任何 KMS 密钥一样，您可以为多区域密钥设置密钥策略，并且可以创建授权，并添加别名和标签以进行分类和授权。（这些是[独立属性](multi-region-keys-overview.md#mrk-sync-properties)，不与其他密钥共享或同步。） 您可以在加密操作中使用多区域主键进行加密或签名。

您可以在 AWS KMS 控制台中[创建多区域主密钥](create-primary-keys.md)，也可以使用`MultiRegion`参数设置为的 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)API 来`true`创建多区域主密钥。请注意，多区域密钥具有一个以 `mrk-` 开头的独特密钥 ID。您可以使用`mrk-`前缀以 MRKs编程方式进行识别。

![\[Multi-Region primary key icon with red key symbol and sample key ID format.\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/multi-region-primary-key.png)


如果您愿意，可以将多区域主键[复制](multi-region-keys-overview.md#replicate)到同一[AWS 分区 AWS 区域 中的一个或多个不同的分区](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)，例如欧洲（爱尔兰）。完成后，在指定区域 AWS KMS 创建与主[键相同的密钥 ID 和其他[共享属性的](multi-region-keys-overview.md#mrk-sync-properties)副本](multi-region-keys-overview.md#mrk-replica-key)密钥。结果会产生两个*相关的*多区域密钥（主键和副本密钥），它们可以互换使用。

您可以在 AWS KMS 控制台中或使用 [ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html)API [创建多区域副本密钥](multi-region-keys-replicate.md)。

![\[Diagram showing multi-Region primary and replica keys in US East and EU regions with key IDs.\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/multi-region-replica-key.png)


由此产生的[多区域副本密钥](multi-region-keys-overview.md#mrk-replica-key)是一个功能齐全的 KMS 密钥，具有与主键相同的[共享属性](multi-region-keys-overview.md#mrk-sync-properties)。在所有其他方面，它是一个独立的 KMS 密钥，具有自己的说明、密钥策略、授权、别名和标签。启用或禁用多区域密钥对相关的多区域密钥没有影响。您可以在加密操作中独立使用主密钥和副本密钥，也可以协调它们的使用。例如，您可以使用美国东部（弗吉尼亚北部）区域的主键对数据进行加密，将数据移动到欧洲（爱尔兰）区域，然后使用副本密钥解密数据。

相关的多区域密钥具有相同的密钥 ID。它们的密钥 ARNs （Amazon 资源名称）仅在 “区域” 字段中有所不同。例如，多区域主键和副本密钥可能具有以下示例密钥 ARNs。密钥 ID（密钥 ARN 中的最后一个元素）是相同的。两个密钥都具有多区域密钥的独特密钥 ID，该 ID 以 **mrk-** 开头。

```
Primary key: arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef12345678990ab
Replica key: arn:aws:kms:eu-west-1:111122223333:key/mrk-1234abcd12ab34cd56ef12345678990ab
```

为了实现互操作性，需要具有相同的密钥 ID。加密时，将 KM AWS KMS S 密钥的密钥 ID 绑定到密文，因此只能使用该 KMS 密钥或具有相同密钥 ID 的 KMS 密钥来解密密文。此功能还使相关的多区域密钥易于识别，并且可以更轻松地互换使用它们。例如，在应用程序中使用它们时，您可以通过它们的共享密钥 ID 来引用相关的多区域密钥。然后，在必要时，指定区域或 ARN 以区分它们。

随着数据需求的变化，您可以将主键复制到同一分区 AWS 区域 中的其他分区，例如美国西部（俄勒冈）和亚太地区（悉尼）。结果是四个*相关的*多区域密钥，其密钥材料和密钥相同 IDs，如下图所示。您可以独立管理密钥。对于包含已导入密钥材料的多区域密钥，您负责将密钥材料单独导入到每个相关密钥中。您可以独立使用它们，也可以以协调的方式使用它们。例如，您可以在亚太地区（悉尼）区域使用副本密钥对数据进行加密，将数据移动到美国西部（俄勒冈）区域，然后在美国西部（俄勒冈）区域使用副本密钥对其进行解密。

![\[多区域密钥中的主密钥和副本密钥\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/multi-region-keys.png)


多区域密钥的其他注意事项包括以下内容。

*同步共享属性* [-如果多区域密钥的[共享属性](multi-region-keys-overview.md#mrk-sync-properties)发生变化，则 AWS KMS 会自动同步从[主键到其所有副本密钥](multi-region-keys-overview.md#mrk-primary-key)的更改。](multi-region-keys-overview.md#mrk-replica-key)您不能请求或强制同步共享属性。 AWS KMS 为您检测并同步所有更改。但是，您可以使用 CloudTrail 日志中的[SynchronizeMultiRegionKey](ct-synchronize-multi-region-key.md)事件来审核同步。

例如，如果您在具有`AWS_KMS`原点的对称多区域主密钥上启用自动密钥轮换，则会将该设置 AWS KMS 复制到其所有副本密钥中。轮换密钥材料时，轮换将在所有相关的多区域密钥之间同步，因此它们继续具有相同的当前密钥材料，并可访问所有旧版本的密钥材料。如果创建新的副本密钥，则该密钥具有与所有相关多区域密钥相同的当前密钥材料，并可访问密钥材料的所有以前版本。有关更多信息，请参阅 [Rotating multi-Region keys](rotate-keys.md#multi-region-rotate)。

*更改主键* — 每组多区域密钥必须只有一个主键。[主键](multi-region-keys-overview.md#mrk-primary-key)是唯一可以复制的密钥。它也是其副本密钥的共享属性的来源。但是，您可以将主键更改为副本密钥，并将其中一个副本密钥提升为主键。您可以执行此操作，以便从特定区域删除多区域主键，或将主键定位在离项目管理员更近的区域中。有关更多信息，请参阅 [更改一组多区域密钥中的主密钥](multi-region-update.md)。

*删除多区域密钥*-与所有 KMS 密钥一样，您必须在删除多区域密钥之前安排 AWS KMS 删除它们。密钥处于待删除状态时，您无法在任何加密操作中使用它。但是，在删除多区域主键的所有副本密钥之前， AWS KMS 不会将其删除。有关详细信息，请参阅[Deleting multi-Region keys](deleting-keys.md#deleting-mrks)。

# 导入密钥的 AWS KMS 密钥材料
<a name="importing-keys"></a>

您可以使用您提供的密钥材料创建 AWS KMS keys （KMS 密钥）。

KMS 密钥是数据密钥的逻辑表示形式。KMS 密钥的元数据包括用于执行加密操作的密钥材料的 ID。在[创建 KMS 密钥](create-keys.md)时，默认情况下， AWS KMS 会生成该 KMS 密钥的密钥材料。但是，您可以创建不带密钥材料的 KMS 密钥，然后将自己的密钥材料导入该 KMS 密钥中，这个功能通常被称为“自带密钥 (BYOK)”。

![\[突出显示其所代表的密钥材料的钥匙图标。\]](http://docs.aws.amazon.com/zh_cn/kms/latest/developerguide/images/import-key.png)


**注意**  
AWS KMS 不支持解密通过外部对称加 AWS KMS 密 KMS 密钥加密的任何密文 AWS KMS，即使密文是使用导入的密钥材料在 KMS 密钥下加密的。 AWS KMS 不会发布此任务所需的密文格式，并且格式可能会更改，恕不另行通知。

当您使用导入的密钥材料时，您仍需对密钥材料负责，同时 AWS KMS 允许使用密钥材料的副本。出于以下一个或多个原因，您可以选择执行该操作：
+ 证明使用符合您要求的熵源生成了密钥材料。
+ 将您自己的基础设施中的密钥材料与 AWS 服务一起使用，并用于管理 AWS KMS 其中的密钥材料的生命周期 AWS。
+ 在中使用现有的、成熟的密钥 AWS KMS，例如用于代码签名、PKI 证书签名和证书固定的应用程序的密钥
+ 为中的密钥材料设置过期时间 AWS 并[手动将其删除](importing-keys-delete-key-material.md)，但也可以使其在将来再次可用。相比之下，[计划密钥删除](deleting-keys.md#deleting-keys-how-it-works)需要 7 到 30 天的等待期限，之后，您不能恢复已删除的 KMS 密钥。
+ 拥有密钥材料的原始副本，并将其保存在外部，以便在密钥材料 AWS 的整个生命周期中提高耐用性和灾难恢复。
+ 对于非对称密钥和 HMAC 密钥，导入会创建兼容且可互操作的密钥，这些密钥可在内部和外部运行。 AWS

**支持的 KMS 密钥类型**

AWS KMS 支持以下类型的 KMS 密钥的导入密钥材料。您无法将密钥材料导入[自定义密钥存储](key-store-overview.md#custom-key-store-overview)中的 KMS 密钥。
+ [对称加密 KMS 密钥](symm-asymm-choose-key-spec.md#symmetric-cmks)
+ [非对称 KMS 密钥（ML-DSA 密钥除外）](symmetric-asymmetric.md)
+ [HMAC KMS 密钥](hmac.md)
+ 支持的所有类型的[多区域密钥](multi-region-keys-overview.md)。

**区域**

所有支持的密钥材料均 AWS 区域 支持导入的密钥材料。 AWS KMS 

在中国区域，对称加密 KMS 密钥的密钥材料要求与其他区域不同。有关更多信息，请参阅 [步骤 3：加密密钥材料](importing-keys-encrypt-key-material.md)。

**了解详情**
+ 要创建具有导入密钥材料的 KMS 密钥，请参阅[删除具有导入密钥材料的 KMS 密钥](importing-keys-conceptual.md)。
+ 要创建警报以在 KMS 密钥中导入的密钥材料即将到期时通知您，请参阅[为导入的密钥材料过期创建 CloudWatch 警报](imported-key-material-expiration-alarm.md)。
+ 要将密钥材料重新导入 KMS 密钥中，请参阅[重新导入密钥材料](importing-keys-import-key-material.md#reimport-key-material)。
+ 要将新密钥材料导入 KMS 密钥以进行按需轮换，请参阅[导入新密钥材料](importing-keys-import-key-material.md#import-new-key-material)和[执行按需密钥轮换](rotating-keys-on-demand.md)。
+ 要识别和查看带导入的密钥材料的 KMS 密钥，请参阅[识别带导入的密钥材料的 KMS 密钥](identify-key-types.md#identify-imported-keys)。
+ 如需了解删除带导入的密钥材料的 KMS 密钥的特殊注意事项，请参阅[Deleting KMS keys with imported key material](deleting-keys.md#import-delete-key)。

# 导入的密钥材料的特殊注意事项
<a name="importing-keys-considerations"></a>

在决定将密钥材料导入之前 AWS KMS，您应该了解导入的密钥材料的以下特征。

**您可以生成密钥材料**  
您负责使用符合您的安全要求的随机源来生成密钥材料。

**您需要对可用性和持久性负责**  
AWS KMS 旨在保持导入的密钥材料的高可用性。但是 AWS KMS 不能将进口密钥材料的耐久性保持在与 AWS KMS 生成的密钥材料相同的水平。有关更多信息，请参阅 [保护导入的密钥材料](import-keys-protect.md)。

**您可以删除密钥材料**  
您可以从 KMS 密钥中[删除导入的密钥材料](importing-keys-delete-key-material.md)，以便立即使 KMS 密钥不可用。此外，当您将密钥材料导入 KMS 密钥中时，您可以确定密钥是否到期，并[设置其到期时间](importing-keys-import-key-material.md#importing-keys-expiration)。到期时间到来时， AWS KMS [删除密钥材料](importing-keys-delete-key-material.md)。如果没有密钥材料，则该 KMS 密钥无法用于任何加密操作。要还原密钥，必须将相同密钥材料重新导入到密钥中。

**您无法更改非对称密钥和 HMAC 密钥的密钥材料**  
当您将密钥材料导入 KMS 密钥中时，该 KMS 密钥将与该密钥材料永久关联。您可以[重新导入相同的密钥材料](importing-keys-import-key-material.md#reimport-key-material)，但不能将不同的密钥材料导入该 KMS 密钥。而且，您不能为具有导入密钥材料的 KMS 密钥[启用自动密钥轮换](rotate-keys.md)。但是，您可以[手动轮换](rotate-keys-manually.md)带有导入密钥材料的 KMS 密钥。

**您可以按需轮换对称加密密钥**  
带有导入密钥材料的对称加密密钥支持按需轮换。您可以将[多个密钥材料导入](importing-keys-import-key-material.md#import-new-key-material)此类密钥，并使用[按需轮换](rotating-keys-on-demand.md)来更新当前密钥材料。当前密钥材料用于加密和解密，但其他（非当前）密钥材料只能用于解密。

**您无法更改密钥材料源**  
专用于导入的密钥材料的 KMS 密钥拥有一个 `EXTERNAL` 的[源](create-keys.md#key-origin)值，该值无法更改。您不能将导入的密钥材料的 KMS 密钥转换为使用任何其他来源（包括）的密钥材料 AWS KMS。同样，您不能将包含密钥材料的 KMS AWS KMS 密钥转换为专为导入的密钥材料而设计的密钥。

**您无法导出密钥材料**  
您无法导出您导入的任何密钥材料。 AWS KMS 无法以任何形式将导入的密钥材料退还给您。您必须在外部保存导入的密钥材料的副本 AWS，最好是在密钥管理器中，例如硬件安全模块 (HSM)，以便在删除密钥材料或密钥材料过期时可以重新导入。

**您可创建具有导入密钥材料的多区域密钥**  
具有导入密钥材料的多区域具有包含导入密钥材料的 KMS 密钥的功能，并且可以在 AWS 区域之间进行互操作。要创建具有导入密钥材料的多区域密钥，您必须将相同的密钥材料导入 KMS 主密钥和每个副本密钥。有关导入多区域密钥的密钥材料的更多详细信息，请参阅[导入新密钥材料](importing-keys-import-key-material.md#import-new-key-material)。

**非对称密钥和 HMAC 密钥具有可移植性和互操作性**  
您可以在外部使用非对称密钥材料和 HMAC 密钥材料，与具有相同导入密钥材料的 AWS AWS KMS 密钥进行互操作。  
与 AWS KMS 对称密文不同，对称密文与算法中使用的 KMS 密钥密不可分，它 AWS KMS 使用标准 HMAC 和非对称格式进行加密、签名和 MAC 生成。因此，这些密钥是可移植的，并且支持传统的托管密钥方案。  
当您的 KMS 密钥导入了密钥材料后，您可以使用外部导入的密钥材料 AWS 来执行以下操作。  
+ HMAC 密钥 – 您可以使用导入的密钥材料验证由 HMAC KMS 密钥生成的 HMAC 标签。您还可以将 HMAC KMS 密钥与导入的密钥材料一起使用，以验证由外部的密钥材料生成的 HMAC 标签。 AWS
+ 非对称加密密钥 — 您可以使用外部的私有非对称加密密钥 AWS 来解密由 KMS 密钥和相应的公钥加密的密文。您还可以使用非对称 KMS 密钥来解密在外部生成的非对称密文。 AWS
+ 非对称签名密钥 — 您可以使用带有导入密钥材料的非对称签名 KMS 密钥来验证由您的私有签名密钥在外部生成的数字签名。 AWS您还可以在外部使用非对称公有签名密钥 AWS 来验证非对称 KMS 密钥生成的签名。
+ 非对称密钥协议密钥 – 您可以使用带导入的密钥材料的非对称密钥协议 KMS 密钥来与 AWS外的对等方派生共享密钥。
如果您在相同的 AWS 区域中将相同的密钥材料导入不同的 KMS 密钥中，则这些密钥也是可以互操作的。要在不同版本中创建可互操作的 KMS 密钥 AWS 区域，请使用导入的密钥材料创建多区域密钥。  

**RSA 私有密钥**
+ AWS KMS 要求导入的 RSA 私钥具有符合 [FIPS 186-5 第](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf) A 节中描述的测试的主要因素。1.3。其他软件或设备可能会使用其他算法来验证 RSA 私有密钥的这些质因子。在极少数情况下，使用其他算法验证的密钥可能不会被 AWS KMS接受。

**对称加密密钥不可移植或互操作**  
生 AWS KMS 成的对称密文不可移植或互操作。 AWS KMS 不会发布可移植性所需的对称密文格式，并且格式可能会更改，恕不另行通知。  
+ AWS KMS 即使您使用已导入的密钥材料，也无法解密您在外部加密的 AWS对称密文。
+ AWS KMS 不支持解密外部的任何 AWS KMS 对称密文，即使密文是在 KMS 密钥下使用导入的密钥材料加密的。 AWS KMS
+ 具有相同导入密钥材料的 KMS 密钥不可互操作。 AWS KMS 生成每个 KMS 密钥特有的密文的对称密文。此加密文字格式保证只有加密数据的 KMS 密钥才能解密数据。
此外，您不能使用任何 AWS 工具（例如[AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/)或 [Amazon S3 客户端加密](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html)）来解密对称密文 AWS KMS 。  
因此，您不能使用带有导入密钥材料的密钥来支持密钥托管安排，在这种安排中，有权有条件访问密钥材料的授权第三方可以在外部解密某些密文。 AWS KMS要支持密钥托管，请使用 [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/java-example-code.html#java-example-multiple-providers) 来通过独立于 AWS KMS的密钥加密您的消息。

# 保护导入的密钥材料
<a name="import-keys-protect"></a>

您导入的密钥材料在传输中和静态时都受到保护。在导入密钥材料之前，您需要使用在 [FIPS 140-3 加密模块验证计划下验证的 AWS KMS 硬件安全模块 () 中生成的 RSA 密钥对的公钥来加密](https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4884)（或 “包装”HSMs）密钥材料。您可以使用包装公有密钥直接加密密钥材料，也可以使用 AES 对称密钥加密密钥材料，然后使用 RSA 公有密钥加密 AES 对称密钥。

收到后，使用 HSM 中的相应私钥对 AWS KMS 密钥材料进行解密，然后使用仅存在于 AWS KMS HSM 易失性存储器中的 AES 对称密钥对其进行重新加密。您的密钥材料绝不会让 HSM 处于纯文本状态。它仅在使用时解密，并且仅在使用中解密。 AWS KMS HSMs

您的 KMS 密钥与导入的密钥材料的使用完全取决于您在 KMS 密钥上设置的[访问控制策略](control-access.md)。此外，您还可以使用[别名](kms-alias.md)和[标签](tagging-keys.md)来识别和[控制对 KMS 密钥的访问](abac.md)。您可以使用 AWS CloudTrail等服务[启用和禁用](enabling-keys.md)密钥，以及[查看](viewing-keys.md)和[监控](monitoring-overview.md)密钥。

但是，您将保留密钥材料的唯一故障保护副本。作为这种额外控制措施的回报，您应对进口密钥材料的耐用性和整体可用性负责。 AWS KMS 旨在保持导入的密钥材料的高可用性。但是 AWS KMS 不能将进口密钥材料的耐久性保持在与 AWS KMS 生成的密钥材料相同的水平。

在以下情况下，这种持久性的差异是有意义的：
+ 当您为导入[的密钥材料设置过期时间](importing-keys-import-key-material.md#importing-keys-expiration)时，将在密钥材料到期后将其 AWS KMS 删除。 AWS KMS 不会删除 KMS 密钥或其元数据。您可以[创建一个 Amazon CloudWatch 警报](imported-key-material-expiration-alarm.md)，在导入的密钥材料即将到期时通知您。

  您无法删除为 KMS 密钥 AWS KMS 生成的密钥材料，也不能将 AWS KMS 密钥材料设置为过期。
+ [手动删除导入的密钥材料](importing-keys-delete-key-material.md)时， AWS KMS 会删除密钥材料，但不会删除 KMS 密钥或其元数据。相比之下，[计划删除密钥](deleting-keys.md#deleting-keys-how-it-works)需要等待 7 到 30 天，之后会 AWS KMS 永久删除 KMS 密钥、其元数据和密钥材料。
+ 万一发生某些影响整个地区的故障 AWS KMS （例如完全断电）， AWS KMS 则无法自动恢复导入的密钥材料。但是， AWS KMS 可以恢复 KMS 密钥及其元数据。

您*必须在*您控制的系统之外保留一份导入 AWS 的密钥材料的副本。我们建议您将导入的密钥材料的可导出副本存储在密钥管理系统中，例如 HSM。根据最佳实践要求，应将 AWS KMS 生成的对 KMS 密钥 ARN 和生成的密钥材料 ID 的引用与该密钥材料的可导出副本一同保存。如果您导入的密钥材料被删除或过期，则其关联的 KMS 密钥将无法使用，直到您重新导入相同的密钥材料。如果您导入的密钥材料永久丢失，则以 KMS 密钥加密的任何加密文字都将无法恢复。

**重要**  
对称加密密钥可以有多个与之关联的密钥材料。一旦您删除其中任何一个密钥材料或其中任何一个密钥材料过期（除非已删除或即将到期的密钥材料为或），则整个 KMS 密钥将无法使用。`PENDING_ROTATION` `PENDING_MULTI_REGION_IMPORT_AND_ROTATION`您必须重新导入与密钥关联的所有已过期或已删除密钥材料，然后该密钥才能用于密码操作。

# CloudHSM 密钥存储中的 KMS 密钥
<a name="manage-cmk-keystore"></a>

您可以创建、查看、管理、使用和计划删除 AWS CloudHSM 密钥库 AWS KMS keys 中的。您使用的过程与用于其他 KMS 密钥的过程非常相似。唯一的区别是，您在创建 KMS AWS CloudHSM 密钥时指定了密钥存储。然后， AWS KMS 为 AWS CloudHSM 集群中与密钥存储库关联的 KMS 密钥创建不可提取的 AWS CloudHSM 密钥材料。当您在密钥存储中使用 KMS AWS CloudHSM 密钥时，[加密操作](#use-cmk-keystore)将在集群 HSMs 中执行。

**支持的功能**  
除了本节中讨论的步骤外，您还可以使用密钥存储中的 KMS 密钥执行以下操作： AWS CloudHSM   
+ 使用密钥策略、IAM policy 和授权来[授予](control-access.md)对 KMS 密钥的访问权限。
+ [启用和禁用](enabling-keys.md) KMS 密钥。
+ 分配[标签](tagging-keys.md)并创建[别名](kms-alias.md)，然后使用基于属性的访问权限控制（ABAC）授予对 KMS 密钥的访问权限。
+ 使用 KMS 密钥执行以下加密操作：
  + [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)
  + [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
  + [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)
  + [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)
  + [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)

  自定义密钥存储库*不*支持生成非对称数据密钥对[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)和[GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)的操作。
+ 将 KMS 密钥和[与 AWS KMS集成的AWS 服务](service-integration.md)结合使用并支持客户托管密钥。
+ 在[AWS CloudTrail 日志](logging-using-cloudtrail.md)和 [Amazon CloudWatch 监控工具](monitoring-overview.md)中跟踪您的 KMS 密钥的使用情况。

**不支持的功能**  
+ AWS CloudHSM 密钥存储仅支持对称加密 KMS 密钥。您无法在密钥存储中创建 HMAC KMS 密钥、非对称 KMS 密钥或非对称数据密钥对。 AWS CloudHSM 
+ 您无法将[密钥材料导](importing-keys.md)入密钥库中的 KMS AWS CloudHSM 密钥中。 AWS KMS 为 AWS CloudHSM 集群中的 KMS 密钥生成密钥材料。
+ 您无法启用或禁用密钥库中 KMS 密钥的密钥材料的[AWS CloudHSM 自动轮换](rotate-keys.md)。

**在密钥库中使用 KMS AWS CloudHSM 密钥**  
当您在请求中使用 KMS 密钥时，请按其 ID 或别名识别 KMS 密钥；您无需指定 AWS CloudHSM 密钥存储或 AWS CloudHSM 集群。响应包含为任何对称加密 KMS 密钥返回的相同字段。  
但是，当您在密钥存储中使用 KMS AWS CloudHSM 密钥时，加密操作完全在与 AWS CloudHSM 密钥存储关联的 AWS CloudHSM 集群内执行。该操作使用集群中与您选择的 KMS 密钥关联的密钥材料。  
要做到这一点，必须满足以下条件。  
+ KMS 密钥的[密钥状态](key-state.md)必须为 `Enabled`。要查找密钥状态，请使用[AWS KMS 控制台](finding-keys.md#viewing-console-details)中的**状态**`KeyState`字段或[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)响应中的字段。
+ 密 AWS CloudHSM 钥库必须连接到其 AWS CloudHSM 集群。它在[AWS KMS 控制台](view-keystore.md)或[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)响应`ConnectionState`中的**状态**必须为`CONNECTED`。
+ 与自定义密钥库关联的 AWS CloudHSM 集群必须包含至少一个活动的 HSM。要查找集群 HSMs 中的活动人数，请使用[AWS KMS 控制台](view-keystore.md)、 AWS CloudHSM 控制台或[DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html)操作。
+ 集 AWS CloudHSM 群必须包含 KMS 密钥的密钥材料。如果已从集群中删除密钥材料，或者已从未包含密钥材料的备份中创建 HSM，则加密操作将失败。
如果不满足这些条件，则加密操作将失败并 AWS KMS 返回`KMSInvalidStateException`异常。通常，您只需要[重新连接 AWS CloudHSM 密钥库即](connect-keystore.md)可。有关其他帮助，请参阅[如何修复失败的 KMS 密钥](fix-keystore.md#fix-cmk-failed)。  
在密钥存储中使用 KMS 密 AWS CloudHSM 钥时，请注意，每个密钥存储区中的 KMS 密 AWS CloudHSM 钥共享用于加密操作的[自定义密钥存储请求配额](requests-per-second.md#rps-key-stores)。如果超过配额，则 AWS KMS 返回 a `ThrottlingException`。如果与 AWS CloudHSM 密钥库关联的 AWS CloudHSM 集群正在处理大量命令，包括与 AWS CloudHSM 密钥库无关的命令，则可能会以更低的`ThrottlingException`速率获得。如果您收到任何请求的 `ThrottlingException`，请降低您的请求速率并重试这些命令。有关自定义密钥存储请求限额的详细信息，请参阅 [自定义密钥存储请求限额](requests-per-second.md#rps-key-stores)。

**了解详情**  
+ 要了解有关 AWS CloudHSM 密钥库的更多信息，请参阅[AWS CloudHSM 钥匙库](keystore-cloudhsm.md)。
+ 要在密钥库中创建 KMS AWS CloudHSM 密钥，请参阅[在密钥库中创建 KMS AWS CloudHSM 密钥](create-cmk-keystore.md)。
+ 要识别和查看密钥库中的 KMS AWS CloudHSM 密钥，请参阅[识别密钥库中的 KMS AWS CloudHSM 密钥](identify-key-types.md#identify-key-hsm-keystore)。
+ 要在密钥库中查找 KMS 密钥和 AWS CloudHSM 密钥材料，请参阅[在密钥库中查找 KMS 密钥和 AWS CloudHSM 密钥材料](find-key-material.md)。
+ 要了解在密钥库中删除 KMS 密 AWS CloudHSM 钥的特殊注意事项，请参阅[从密钥库中删除 KMS 密钥](deleting-keys.md#delete-cmk-keystore)。 AWS CloudHSM 

# 外部密钥存储中的 KMS 密钥
<a name="keystore-external-key-manage"></a>

若要在外部密钥存储中创建、查看、管理、使用和计划删除 KMS 密钥，您使用的过程与用于其他 KMS 密钥的过程非常相似。但是，在外部密钥存储中创建 KMS 密钥时，您需要指定[外部密钥存储](keystore-external.md#concept-external-key-store)和[外部密钥](keystore-external.md#concept-external-key)。在外部密钥存储中使用 KMS 密钥时，外部密钥管理器将使用指定的外部密钥执行[加密和解密操作](keystore-external.md#xks-how-it-works)。

AWS KMS 无法在您的外部密钥管理器中创建、查看、更新或删除任何加密密钥。 AWS KMS 永远不要直接访问您的外部密钥管理器或任何外部密钥。所有加密操作请求均由您的[外部密钥存储代理](keystore-external.md#concept-xks-proxy)调解。若要在外部密钥存储中使用 KMS 密钥，必须先将托管 KMS 密钥的外部密钥存储[连接](xks-connect-disconnect.md)到其外部密钥存储代理。

**支持的功能**  
除了此部分中讨论的过程之外，您还可以使用外部密钥存储中的 KMS 密钥执行下列操作：  
+ 使用[密钥策略](key-policies.md)、[IAM policy](iam-policies.md) 和[授权](grants.md)以控制对 KMS 密钥的访问。
+ [启用和禁用](enabling-keys.md) KMS 密钥。这些操作不会影响外部密钥管理器中的外部密钥。
+ 分配[标签](tagging-keys.md)并创建[别名](kms-alias.md)，然后使用[基于属性的访问权限控制](abac.md)（ABAC）授予对 KMS 密钥的访问权限。
+ 使用 KMS 密钥执行以下加密操作：
  + [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)
  + [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)
  + [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)
  + [GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)
  + [ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)

  自定义密钥存储库*不*支持生成非对称数据密钥对[GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)和[GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)的操作。
+ 将 KMS 密钥和[与 AWS KMS集成的AWS 服务](https://aws.amazon.com/kms/features/#AWS_Service_Integration) 结合使用并支持[客户托管密钥](concepts.md#customer-mgn-key)。

**不支持的功能**  
+ 外部密钥存储仅支持[对称加密 KMS 密钥](symm-asymm-choose-key-spec.md#symmetric-cmks)。您无法在外部密钥存储中创建 HMAC KMS 密钥或非对称 KMS 密钥。
+ [GenerateDataKeyPair](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPair.html)外部[GenerateDataKeyPairWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyPairWithoutPlaintext.html)密钥存储库中的 KMS 密钥不支持和。
+ 您不能使用[AWS::KMS::Key CloudFormation 模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html)在外部密钥存储中创建外部密钥存储或 KMS 密钥。
+ 外部密钥存储不支持[多区域密钥](multi-region-keys-overview.md)。
+ 外部密钥存储不支持拥有[导入密钥材料](importing-keys.md)的 KMS 密钥。
+ 外部密钥存储中的 KMS 密钥不支持[自动密钥轮换](rotate-keys.md)。

**在外部密钥存储中使用 KMS 密钥**  
在请求中使用 KMS 密钥时，请通过[密钥 ID、密钥 ARN、别名或别名 ARN](concepts.md#key-id) 识别 KMS 密钥。您无需指定外部密钥存储。响应包含为任何对称加密 KMS 密钥返回的相同字段。但是，在外部密钥存储中使用 KMS 密钥时，外部密钥管理器将使用与 KMS 密钥关联的外部密钥执行加密和解密操作。  
[为确保由外部密钥存储库中的 KMS 密钥加密的密文至少与使用标准 KMS 密钥加密的任何密文一样安全， AWS KMS 请使用双重加密。](keystore-external.md#concept-double-encryption)首先 AWS KMS 使用 AWS KMS 密钥材料对数据进行加密。然后，外部密钥管理器使用 KMS 密钥的外部密钥对其进行加密。若要解密双重加密的加密文字，首先由外部密钥管理器使用 KMS 密钥的外部密钥解密加密文字。然后 AWS KMS 使用 KMS 密钥的密 AWS KMS 钥材料对其进行解密。  
要做到这一点，必须满足以下条件。  
+ KMS 密钥的[密钥状态](key-state.md)必须为 `Enabled`。要查找密钥**状态**，请参阅[AWS KMS 控制台](finding-keys.md#viewing-console-details)上客户托管密钥的状态`KeyState`字段或[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)响应中的字段。
+ 托管 KMS 密钥的外部密钥存储必须连接到其[外部密钥存储代理](keystore-external.md#concept-xks-proxy)，也就是说，外部密钥存储的[连接状态](xks-connect-disconnect.md#xks-connection-state)必须为 `CONNECTED`。

  您可以在 AWS KMS 控制台的**外部密钥存储**页面或[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)响应中查看连接状态。外部密钥存储的连接状态也显示在 AWS KMS 控制台中 KMS 密钥的详细信息页面上。在详细信息页面上，选择 **Cryptographic configuration**（加密配置）选项卡，然后查看 **Custom key store**（自定义密钥存储）部分中的 **Connection state**（连接状态）字段。

  如果连接状态为 `DISCONNECTED`，则必须先将其连接。如果连接状态为 `FAILED`，则必须解决问题，断开外部密钥存储的连接，再将其连接。有关说明，请参阅[连接和断开外部密钥存储](xks-connect-disconnect.md)。
+ 外部密钥存储代理必须能够找到外部密钥。
+ 必须启用外部密钥并且必须执行加密和解密操作。

  外部密钥的状态独立于 KMS 密钥，并且不受 KMS 密钥的[密钥状态](key-state.md)变化影响，包括启用和禁用 KMS 密钥。同样，禁用或删除外部密钥不会更改 KMS 密钥的密钥状态，但使用关联的 KMS 密钥执行的加密操作将失败。
如果不满足这些条件，则加密操作将失败并 AWS KMS 返回`KMSInvalidStateException`异常。您可能需要[重新连接外部密钥存储](xks-connect-disconnect.md)或使用外部密钥管理器工具来重新配置或修复外部密钥。有关其他帮助，请参阅[排查外部密钥存储的问题](xks-troubleshooting.md)。  
在外部密钥存储中使用 KMS 密钥时，请注意每个外部密钥存储中的 KMS 密钥针对加密操作共享[自定义密钥存储请求限额](requests-per-second.md#rps-key-stores)。如果超过配额，则 AWS KMS 返回 a `ThrottlingException`。有关自定义密钥存储请求限额的详细信息，请参阅 [自定义密钥存储请求限额](requests-per-second.md#rps-key-stores)。

**了解详情**  
+ 要了解有关外部密钥存储的更多信息，请参阅 [外部密钥存储](keystore-external.md)。
+ 要了解有关外部密钥存储中密钥材料的更多信息，请参阅 [外部密钥](keystore-external.md#concept-external-key)。
+ 要在外部密钥存储中创建 KMS 密钥，请参阅 [在外部密钥存储中创建 KMS 密钥](create-xks-keys.md)。
+ 要识别和查看外部密钥存储中的 KMS 密钥，请参阅 [识别外部密钥存储中的 KMS 密钥](identify-key-types.md#view-xks-key)。
+ 要了解删除外部密钥存储中的 KMS 密钥的特殊注意事项，请参阅[从外部密钥存储中删除 KMS 密钥](deleting-keys.md#delete-xks-key)。