

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

# 在密钥库中创建 KMS AWS CloudHSM 密钥
<a name="create-cmk-keystore"></a>

创建 AWS CloudHSM 密钥库后，可以在密钥库 AWS KMS keys 中创建。它们必须是[对称加密 KMS 密钥](symm-asymm-choose-key-spec.md#symmetric-cmks)，其中包含 AWS KMS 生成的密钥材料。您不能在自定义密钥存储中创建[非对称 KMS 密钥](symmetric-asymmetric.md)、[HMAC KMS 密钥](hmac.md)或具有[导入的密钥材料](importing-keys.md)的 KMS 密钥。此外，您不能在自定义密钥存储中使用对称加密 KMS 密钥来生成非对称数据密钥对。KMS 无法 IPv6 与 AWS CloudHSM 密钥存储库进行通信。

要在密钥存储中创建 KMS 密 AWS CloudHSM 钥， AWS CloudHSM 密钥库必须[连接到关联的 AWS CloudHSM 集群](connect-keystore.md)，并且集群必须至少包含两个 HSMs 处于不同可用区域的活动密钥。要查找的连接状态和数量 HSMs，请查看中的[AWS CloudHSM 密钥存储页面](view-keystore.md#view-keystore-console) AWS 管理控制台。使用 API 操作时，使用[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)操作验证 AWS CloudHSM 密钥库是否已连接。要验证集群 HSMs 中的活动人数及其可用区，请使用 AWS CloudHSM [DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html)操作。

在密钥存储中创建 KMS AWS CloudHSM 密钥时， AWS KMS 会在中创建 KMS 密钥 AWS KMS。但是，它会为关联 AWS CloudHSM 集群中的 KMS 密钥创建密钥材料。具体而言， AWS KMS 以[您创建的 `kmsuser` CU 身份登录](create-keystore.md#before-keystore)集群。然后，它在集群中创建持久的、不可提取的 256 位高级加密标准 (AES) 对称密钥。 AWS KMS 将[密钥标签属性](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-key-attributes.html)的值（仅在集群中可见）设置为 KMS 密钥的 Amazon Resource Name (ARN)。

当命令成功时，新 KMS 密钥的[密钥状态](key-state.md)为 `Enabled`，其源为 `AWS_CLOUDHSM`。创建任何 KMS 密钥后便无法更改其源。当您在 AWS KMS 控制台的密 AWS CloudHSM 钥存储库中或使用[DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)操作查看 KMS 密钥时，可以看到典型的属性，例如其密钥 ID、密钥状态和创建日期。但是，您也可以查看自定义密钥存储 ID 和（可选） AWS CloudHSM 集群 ID。

如果您尝试在密钥库中创建 KMS AWS CloudHSM 密钥失败，请使用错误消息来帮助您确定原因。这可能表示 AWS CloudHSM 密钥库未连接 (`CustomKeyStoreInvalidStateException`)，或者关联的 AWS CloudHSM 集群没有此操作所需的两个密钥库处于活动状态 HSMs (`CloudHsmClusterInvalidConfigurationException`)。有关帮助信息，请参阅[对自定义密钥存储进行故障排除](fix-keystore.md)。

有关在密钥存储中创建 KMS 密钥的操作 AWS CloudTrail 日志的 AWS CloudHSM 示例，请参阅[CreateKey](ct-createkey.md)。

## 在您的 CloudHSM 密钥存储中创建新 KMS 密钥
<a name="create-key-keystore"></a>

您可以通过 AWS KMS 控制台或使用[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)操作在密 AWS CloudHSM 钥存储库中创建对称加密 KMS 密钥。

### 使用控制 AWS KMS 台
<a name="create-cmk-keystore-console"></a>

使用以下过程在密钥库中创建对称加密 KMS AWS CloudHSM 密钥。

**注意**  
不要在别名、描述或标签中包含机密或敏感信息。这些字段可能以纯文本形式出现在 CloudTrail 日志和其他输出中。

1. 登录 AWS 管理控制台 并在 [https://console.aws.amazon.com/km](https://console.aws.amazon.com/kms) s 处打开 AWS Key Management Service (AWS KMS) 控制台。

1. 要更改 AWS 区域，请使用页面右上角的区域选择器。

1. 在导航窗格中，选择**客户托管密钥**。

1. 选择**创建密钥**。

1. 选择 **Symmetric (对称)**。

1. 在 **Key usage**（密钥用法）中，已为您选择了 **Encrypt and decrypt**（加密和解密）选项。请勿对其进行更改。

1. 选择 **Advanced options (高级选项)**。

1. 对于**密钥材料源**，选择 **AWS CloudHSM 密钥存储**。

   您无法在密钥库中创建多区域 AWS CloudHSM 密钥。

1. 选择**下一步**。

1. 为您的新 KMS AWS CloudHSM 密钥选择密钥存储区。要创建新的 AWS CloudHSM 密钥库，请选择**创建自定义密钥库**。

   您选择的 AWS CloudHSM 密钥库的状态必须为 “已**连接**”。其关联的 AWS CloudHSM 集群必须处于活动状态，并且在不同的可用区中至少包含两个 HSMs 处于活动状态的集群。

   有关连接密 AWS CloudHSM 钥库的帮助，请参阅[断开密 AWS CloudHSM 钥库的连接](connect-keystore.md)。有关添加的帮助 HSMs，请参阅*AWS CloudHSM 用户指南*中的[添加 HSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/add-remove-hsm.html#add-hsm)。

1. 选择**下一步**。

1. 为 KMS 密钥键入别名和可选的描述。

1. （可选）。在 **Add Tags**（添加标签）页面上，添加标识或分类 KMS 密钥的标签。

   向 AWS 资源添加标签时， AWS 会生成一份成本分配报告，其中包含按标签汇总的使用量和成本。标签还可以用来控制对 KMS 密钥的访问。有关轮换 KMS 密钥的信息，请参阅 [标签在 AWS KMS](tagging-keys.md) 和 [ABAC for AWS KMS](abac.md)。

1. 选择**下一步**。

1. 在 **Key Administrators**（密钥管理员）部分中，选择可管理 KMS 密钥的 IAM 用户和角色。有关更多信息，请参阅[允许密钥管理员管理 KMS 密钥](key-policy-default.md#key-policy-default-allow-administrators)。
**注意**  
IAM policy 可以向其他 IAM 用户和角色授予使用 KMS 密钥的权限。  
IAM 最佳实践不鼓励使用具有长期凭证的 IAM 用户。而应尽可能使用提供临时凭证的 IAM 角色。有关更多信息，请参阅《IAM 用户指南》中的 [IAM 安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)**。  
 AWS KMS 控制台在语句标识符下将密钥管理员添加到密钥策略中`"Allow access for Key Administrators"`。如果修改此语句标识符，则可能会影响控制台显示您对该语句所做修改的方式。

1. （可选）要阻止这些密钥管理员删除此 KMS 密钥，请清除页面底部与 **Allow key administrators to delete this key**（允许密钥管理员删除此密钥）对应的框。

1. 选择**下一步**。

1. **在此账户**部分中，选择可以在[加密操作](kms-cryptography.md#cryptographic-operations)中使用 KMS 密钥的 IAM 用户和角色。 AWS 账户 有关更多信息，请参阅[允许密钥用户使用 KMS 密钥](key-policy-default.md#key-policy-default-allow-users)。
**注意**  
IAM 最佳实践不鼓励使用具有长期凭证的 IAM 用户。而应尽可能使用提供临时凭证的 IAM 角色。有关更多信息，请参阅《IAM 用户指南》中的 [IAM 安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)**。  
 AWS KMS 控制台在语句标识符`"Allow use of the key"`和下将密钥用户添加到密钥策略中`"Allow attachment of persistent resources"`。如果修改这些语句标识符，则可能会影响控制台显示您对该语句所做修改的方式。

1. （可选）您可以允许其他人使用 AWS 账户 此 KMS 密钥进行加密操作。为此，请在页面底部的 AWS 账户“**其他**” 部分中，选择 “**添加另一个**”， AWS 账户然后输入外部账户的 AWS 账户 ID。要添加多个外部账户，请重复此步骤。
**注意**  
另一方的管理员还 AWS 账户 必须通过为其用户创建 IAM 策略来允许访问 KMS 密钥。有关更多信息，请参阅 [允许其他账户中的用户使用 KMS 密钥](key-policy-modifying-external-accounts.md)。

1. 选择**下一步**。

1. 检查密钥的密钥策略语句。要对密钥策略进行更改，请选择**编辑**。

1. 选择**下一步**。

1. 检视您选择的密钥设置。您仍然可以返回并更改所有设置。

1. 完成后，选择 **Finish**（完成）以创建密钥。

操作成功后，屏幕上会显示您选择的密钥存储区中的新 KMS AWS CloudHSM 密钥。当您选择新 KMS 密钥的名称或别名时，其详细信息页面上的**加密配置**选项卡会显示 KMS 密钥的来源 (**AWS CloudHSM**)、自定义密钥存储的名称、ID 和类型以及 AWS CloudHSM 集群的 ID。如果此过程失败，则会出现一条描述失败的错误消息。

**提示**  
要更轻松地识别自定义密钥存储中的 KMS 密钥，请在 **Customer managed keys**（客户托管密钥）页面上，将 **Custom key store ID**（自定义密钥存储 ID）列添加到显示中。单击右上角的齿轮图标并选择 **Custom key store ID (自定义密钥存储 ID)**。有关更多信息，请参阅 [自定义控制台视图](viewing-console-customize.md)。

### 使用 AWS KMS API
<a name="create-cmk-keystore-api"></a>

要在密钥库中创建新的 AWS KMS key （KMS AWS CloudHSM 密钥），请使用[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)操作。使用 `CustomKeyStoreId` 参数识别自定义密钥存储并指定 `Origin` 值 `AWS_CLOUDHSM`。

您可能还需要使用 `Policy` 参数指定密钥策略。您可以随时更改密钥策略 ([PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html)) 并添加可选元素，例如[描述](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html)和[标签](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html)。

本部分中的示例使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)，但您可以使用任何受支持的编程语言。

以下示例首先调用该[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html)操作以验证 AWS CloudHSM 密钥库是否已连接到其关联的 AWS CloudHSM 集群。默认情况下，此操作将返回您的账户和区域中的所有自定义密钥存储。要仅描述特定的 AWS CloudHSM 密钥库，请使用其`CustomKeyStoreId`或`CustomKeyStoreName`参数（但不能同时使用两者）。

在运行此命令之前，请将示例自定义密钥存储 ID 替换为有效的 ID。

**注意**  
不要在 `Description` 或 `Tags` 字段中包含机密或敏感信息。这些字段可能以纯文本形式出现在 CloudTrail 日志和其他输出中。

```
$ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0
{
   "CustomKeyStores": [
      "CustomKeyStoreId": "cks-1234567890abcdef0",
      "CustomKeyStoreName": "ExampleKeyStore",
      "CustomKeyStoreType": "AWS CloudHSM key store",
      "CloudHsmClusterId": "cluster-1a23b4cdefg",
      "TrustAnchorCertificate": "<certificate string appears here>",
      "CreationDate": "1.499288695918E9",
      "ConnectionState": "CONNECTED"
   ],
}
```

下一个示例命令使用该[DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html)操作来验证与 (cluster-1a23b4cdefg`ExampleKeyStore`) 关联的 AWS CloudHSM 集群是否至少有两个处于活动状态。 HSMs如果集群少于两个 HSMs，则`CreateKey`操作将失败。

```
$ aws cloudhsmv2 describe-clusters
{
    "Clusters": [
        {
            "SubnetMapping": {
               ...
            },
            "CreateTimestamp": 1507133412.351,
            "ClusterId": "cluster-1a23b4cdefg",
            "SecurityGroup": "sg-865af2fb",
            "HsmType": "hsm1.medium",
            "VpcId": "vpc-1a2b3c4d",
            "BackupPolicy": "DEFAULT",
            "Certificates": {
                "ClusterCertificate": "-----BEGIN CERTIFICATE-----\...\n-----END CERTIFICATE-----\n"
            },
            "Hsms": [
                {
                    "AvailabilityZone": "us-west-2a",
                    "EniIp": "10.0.1.11",
                    "ClusterId": "cluster-1a23b4cdefg",
                    "EniId": "eni-ea8647e1",
                    "StateMessage": "HSM created.",
                    "SubnetId": "subnet-a6b10bd1",
                    "HsmId": "hsm-abcdefghijk",
                    "State": "ACTIVE"
                },
                {
                    "AvailabilityZone": "us-west-2b",
                    "EniIp": "10.0.0.2",
                    "ClusterId": "cluster-1a23b4cdefg",
                    "EniId": "eni-ea8647e1",
                    "StateMessage": "HSM created.",
                    "SubnetId": "subnet-b6b10bd2",
                    "HsmId": "hsm-zyxwvutsrqp",
                    "State": "ACTIVE"
                },
            ],
            "State": "ACTIVE"
        }
    ]
}
```

此示例命令使用[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)操作在密钥库中创建 KMS AWS CloudHSM 密钥。要在密钥存储中创建 KMS AWS CloudHSM 密钥，必须提供密钥存储库的自定义 AWS CloudHSM 密钥存储 ID，并将`Origin`值指定为`AWS_CLOUDHSM`。

响应包括自定义密钥库和 AWS CloudHSM 集群的。 IDs 

在运行此命令之前，请将示例自定义密钥存储 ID 替换为有效的 ID。

```
$ aws kms create-key --origin AWS_CLOUDHSM --custom-key-store-id cks-1234567890abcdef0
{
  "KeyMetadata": {
    "AWSAccountId": "111122223333",
    "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "CreationDate": 1.499288695918E9,
    "Description": "Example key",
    "Enabled": true,
    "MultiRegion": false,
    "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
    "KeyManager": "CUSTOMER",
    "KeyState": "Enabled",
    "KeyUsage": "ENCRYPT_DECRYPT",    
    "Origin": "AWS_CLOUDHSM"
    "CloudHsmClusterId": "cluster-1a23b4cdefg",
    "CustomKeyStoreId": "cks-1234567890abcdef0"
    "KeySpec": "SYMMETRIC_DEFAULT",
    "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
    "EncryptionAlgorithms": [
        "SYMMETRIC_DEFAULT"
    ]
  }
}
```