

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

# 创建非对称 KMS 密钥
<a name="asymm-create-key"></a>

您可以在 AWS KMS 控制台、使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)API 或使用[AWS::KMS::Key CloudFormation 模板](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html)创建[非对称 KMS 密钥](symmetric-asymmetric.md)。非对称 KMS 密钥表示可用于加密、签名或派生共享密钥的公有密钥和私有密钥对。私钥保留在里面 AWS KMS。要下载公钥以供外部使用 AWS KMS，请参阅[下载公有密钥](download-public-key.md)。

创建非对称 KMS 密钥时，必须选择密钥规范。通常，选择哪个密钥规范取决于法规、安全或业务要求。也可能受需要加密或签名的消息大小的影响。一般来说，加密密钥越长，对暴力攻击的抵抗力越强。有关所有支持的密钥规范的详细说明，请参阅[密钥规范引用](symm-asymm-choose-key-spec.md)。

AWS 与集成的服务 AWS KMS 不支持非对称 KMS 密钥。如果要创建 KMS 密钥来加密您在 AWS 服务中存储或管理的数据，请[创建对称加密 KMS 密钥](create-symmetric-cmk.md)。

有关创建 KMS 密钥所需权限的信息，请参阅 [创建 KMS 密钥的权限](create-keys.md#create-key-permissions)。

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

您可以使用创建非对称 AWS KMS keys （KMS 密钥）。 AWS 管理控制台 每个非对称 KMS 密钥表示一个公有密钥和私有密钥对。

**重要**  
不要在别名、描述或标签中包含机密或敏感信息。这些字段可能以纯文本形式出现在 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. 要创建非对称 KMS 密钥，请在 **Key type**（密钥类型）中选择 **Asymmetric**（非对称）。

1. 要创建用于公有密钥加密的非对称 KMS 密钥，请在 **Key usage**（密钥用法）中选择 **Encrypt and decrypt**（加密和解密）。

   要创建用于签署消息和验证签名的非对称 KMS 密钥，请在**密钥用法**中选择**签名和验证**。

   要创建用于派生共享密钥的非对称 KMS 密钥，请在**密钥用法**中，选择**密钥协议**。

   有关选择密钥用法值的帮助信息，请参阅[选择要创建的 KMS 密钥的类型](create-keys.md#symm-asymm-choose)。

1. 为非对称 KMS 密钥选择规范（**密钥规范**）。

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

1. 为 KMS 密钥键入[别名](kms-alias.md)。别名名称不能以 **aws/** 开头。**aws/** 前缀由 Amazon Web Services 预留，用于在您的账户中表示 AWS 托管式密钥 。

   *别名*是一个友好的名称，可用于在控制台和某些控制台中识别 KMS 密钥 AWS KMS APIs。我们建议您选择一个别名，用来指示您计划保护的数据类型或计划与 KMS 密钥搭配使用的应用程序。

   在 AWS 管理控制台中创建 KMS 密钥时需要别名。使用[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)操作时无法指定别名，但可以使用控制台或[CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html)操作为现有 KMS 密钥创建别名。有关更多信息，请参阅 [中的别名 AWS KMS](kms-alias.md)。

1. （可选）为 KMS 密钥键入描述。

   输入一个描述，用来说明您计划保护的数据类型或计划与 KMS 密钥配合使用的应用程序。

   现在，除非[密钥状态](key-state.md)为 `Pending Deletion` 或 `Pending Replica Deletion`，否则您可以随时添加描述或更新描述。要添加、更改或删除现有客户托管密钥的描述，请在 AWS 管理控制台 或使用[UpdateKeyDescription](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html)操作中编辑 KMS 密钥的详细信息页面上的描述。

1. （可选）键入标签键和一个可选标签值。要向 KMS 密钥添加多个标签，请选择 **Add tag**（添加标签）。

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

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

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

1. （可选）要阻止选定 IAM 用户和角色删除此 KMS 密钥，请在页面底部的**密钥删除**部分中，清除**允许密钥管理员删除此密钥**复选框。

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

1. 选择可将 KMS 密钥用于[加密操作](kms-cryptography.md#cryptographic-operations)的 IAM 用户和角色。
**注意**  
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 账户 标识号。要添加多个外部账户，请重复此步骤。
**注意**  
若要允许外部账户中的主体使用 KMS 密钥，外部账户的管理员必须创建提供这些权限的 IAM policy。有关更多信息，请参阅 [允许其他账户中的用户使用 KMS 密钥](key-policy-modifying-external-accounts.md)。

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

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

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

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

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

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

您可以使用该[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)操作来创建非对称 AWS KMS key的。这些示例使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)，但您可以使用任何受支持的编程语言。

创建非对称 KMS 密钥时，必须指定 `KeySpec` 参数，该参数决定了所创建的密钥类型。此外，还必须指定 `KeyUsage` 值是 ENCRYPT\$1DECRYPT、SIGN\$1VERIFY 还是 KEY\$1AGREEMENT。创建 KMS 密钥后，这些属性无法更改。

该`CreateKey`操作不允许您指定别名，但您可以使用该[CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html)操作为新 KMS 密钥创建别名。

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

**创建非对称 KMS 密钥对用于公共加密**  
以下示例使用 `CreateKey` 操作，创建一个 4096 位 RSA 密钥的非对称 KMS 密钥，用于公有密钥加密。

```
$ aws kms create-key --key-spec RSA_4096 --key-usage ENCRYPT_DECRYPT
{
    "KeyMetadata": {
        "KeyState": "Enabled",
        "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
        "KeyManager": "CUSTOMER",
        "Description": "",
        "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "CreationDate": 1569973196.214,
        "MultiRegion": false,
        "KeySpec": "RSA_4096",
        "CustomerMasterKeySpec": "RSA_4096",
        "KeyUsage": "ENCRYPT_DECRYPT",
        "EncryptionAlgorithms": [
            "RSAES_OAEP_SHA_1",
            "RSAES_OAEP_SHA_256"
        ],
        "AWSAccountId": "111122223333",
        "Origin": "AWS_KMS",
        "Enabled": true
    }
}
```

**创建非对称 KMS 密钥对用于签名和验证**  
以下示例命令创建一个非对称 KMS 密钥，表示一对用于签名和验证的 ECC 密钥。不能创建用于加密和解密的椭圆曲线密钥对。

```
$ aws kms create-key --key-spec ECC_NIST_P521 --key-usage SIGN_VERIFY
{
    "KeyMetadata": {
        "KeyState": "Enabled",
        "KeyId": "0987dcba-09fe-87dc-65ba-ab0987654321",
        "CreationDate": 1570824817.837,
        "Origin": "AWS_KMS",
        "SigningAlgorithms": [
            "ECDSA_SHA_512"
        ],
        "Arn": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321",
        "AWSAccountId": "111122223333",
        "KeySpec": "ECC_NIST_P521",
        "CustomerMasterKeySpec": "ECC_NIST_P521",
        "KeyManager": "CUSTOMER",
        "Description": "",
        "Enabled": true,
        "MultiRegion": false,
        "KeyUsage": "SIGN_VERIFY"
    }
}
```

**创建非对称 KMS 密钥对，用于派生共享密钥**  
以下示例命令创建一个非对称 KMS 密钥，表示一对用于派生共享密钥的 ECDH 密钥。不能创建用于加密和解密的椭圆曲线密钥对。

```
$ aws kms create-key --key-spec ECC_NIST_P256 --key-usage KEY_AGREEMENT
{
    "KeyMetadata": {
        "AWSAccountId": "111122223333",
        "KeyId": "0987dcba-09fe-87dc-65ba-ab0987654321",
        "Arn": "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321",
        "CreationDate": "2023-12-27T19:10:15.063000+00:00",
        "Enabled": true,
        "Description": "",
        "KeyUsage": "KEY_AGREEMENT",
        "KeyState": "Enabled",
        "Origin": "AWS_KMS",
        "KeyManager": "CUSTOMER",
        "CustomerMasterKeySpec": "ECC_NIST_P256",
        "KeySpec": "ECC_NIST_P256",
        "KeyAgreementAlgorithms": [
            "ECDH"
        ],
        "MultiRegion": false
    }
}
```