

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

# 创建 HMAC KMS 密钥
<a name="hmac-create-key"></a>

您可以在 AWS KMS 控制台、使用 [https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html](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)创建 HMAC KMS 密钥。

创建 HMAC KMS 密钥时，必须选择密钥规范。 AWS KMS 支持 [HMAC KMS 密钥的多种密钥规格](symm-asymm-choose-key-spec.md#hmac-key-specs)。您选择的密钥规范可能取决于法规、安全或业务要求。一般来说，密钥越长，对暴力攻击的抵抗力越强。

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

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

您可以使用创建 HMAC KMS 密钥。 AWS 管理控制台 HMAC KMS 密钥是对称密钥，其密钥用法为**Generate and verify MAC**（生成并验证 MAC）。您也可以创建多区域 HMAC 密钥。

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. 对于**密钥类型**，选择**对称**。

   HMAC KMS 密钥是对称密钥。您可以使用相同的密钥生成和验证 HMAC 标签。

1. 对于 **Key usage**（密钥用法），请选择 **Generate and verify MAC**（生成并验证 MAC）。

   生成并验证 MAC 是 HMAC KMS 密钥的唯一有效密钥用法。
**注意**  
**Key usage**（密钥用法）仅在所选区域支持 HMAC KMS 密钥时才会显示对称密钥。

1. 为 HMAC KMS 密钥选择规范（**密钥规范**）。

   您选择的密钥规范可取决于法规、安全或业务要求。一般来说，较长的密钥更安全。

1. 要创建[多区域](multi-region-keys-overview.md) *主* HMAC 密钥，在 **Advanced options**（高级选项）下，选择 **Multi-Region key**（多区域密钥）。您为此 KMS 密钥定义的[共享属性](multi-region-keys-overview.md#mrk-sync-properties)（例如密钥类型和密钥用法）将与其副本密钥共享。

   您无法使用该过程创建副本密钥。要创建多区域*副本* HMAC 密钥，请按照[创建副本密钥的说明](multi-region-keys-replicate.md)。

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

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

   我们建议您使用将 KMS 密钥标识为 HMAC 密钥的别名，例如 `HMAC/test-key`。这将使您更轻松地在控制台中识别 HMAC 密钥，您可以在 AWS 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 密钥的 AWS 管理控制台 详细信息页面上的描述。

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

   考虑添加将密钥识别为 HMAC 密钥的标签，例如 `Type=HMAC`。这将使您更轻松地在控制台中识别 HMAC 密钥，您可以在 AWS KMS 控制台中按标签和别名对密钥进行排序和筛选，但不能按密钥规格或密钥使用情况对密钥进行排序和筛选。

   向 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**（完成）以创建 HMAC KMS 密钥。

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

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

创建 HMAC KMS 密钥时，必须指定 `KeySpec` 参数，该参数决定了 KMS 密钥的类型。另外，您必须指定 GENERATE\$1VERIFY\$1MAC 的 `KeyUsage` 值，尽管它是 HMAC 密钥的唯一有效密钥用法值。要创建[多区域](multi-region-keys-overview.md) HMAC KMS 密钥，添加值为 `true` 的 `MultiRegion` 参数。创建 KMS 密钥后，这些属性无法更改。

该`CreateKey`操作不允许您指定别名，但您可以使用该[CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html)操作为新 KMS 密钥创建别名。我们建议您使用将 KMS 密钥标识为 HMAC 密钥的别名，例如 `HMAC/test-key`。这将使您更轻松地在控制台中识别 HMAC 密钥，在 AWS KMS 控制台中，您可以按别名对密钥进行排序和筛选，但不能按密钥规格或密钥使用情况对密钥进行排序和筛选。

如果您尝试在不支持 HMAC 密钥的情况下创建 HMAC KMS 密钥，则该`CreateKey`操作会返回 AWS 区域 `UnsupportedOperationException`

以下示例使用 `CreateKey` 操作来创建 512 位的 HMAC KMS 密钥。

```
$ aws kms create-key --key-spec HMAC_512 --key-usage GENERATE_VERIFY_MAC
{
    "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": 1669973196.214,
        "MultiRegion": false,
        "KeySpec": "HMAC_512",
        "CustomerMasterKeySpec": "HMAC_512",
        "KeyUsage": "GENERATE_VERIFY_MAC",
        "MacAlgorithms": [
            "HMAC_SHA_512"
        ],
        "AWSAccountId": "111122223333",
        "Origin": "AWS_KMS",
        "Enabled": true
    }
}
```