

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立 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 金鑰時，您必須選取金鑰規格。 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>

您可以使用 AWS 管理主控台 來建立 HMAC KMS 金鑰。HMAC KMS 金鑰是對稱金鑰，其金鑰用途為 **Generate and verify MAC** (產生和驗證 MAC)。您也可以建立多區域 HMAC 金鑰。

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) 的 AWS Key Management Service (AWS KMS) 主控台。

1. 若要變更 AWS 區域，請使用頁面右上角的區域選擇器。

1. 在導覽窗格中，選擇 **Customer managed keys** (客戶受管金鑰)。

1. 選擇**建立金鑰**。

1. 針對 **Key type (金鑰類型)**，請選擇 **Symmetric (對稱)**。

   HMAC KMS 金鑰為對稱金鑰。您可以使用相同的金鑰產生和驗證 HMAC 標籤。

1. 在 **Key usage** (金鑰用途) 欄位中，請選擇 **Generate and verify MAC** (產生和驗證 MAC)。

   產生和驗證 MAC 是 HMAC KMS 金鑰的唯一有效金鑰用途。
**注意**  
僅當所選區域支援 HMAC KMS 金鑰時，才會顯示對稱金鑰的 **Key usage** (金鑰用途)。

1. 選取 HMAC KMS 金鑰的規格 (**Key spec** (金鑰規格))。

   金鑰規格可根據您的法規、安全或業務需求進行選取。通常，較長的金鑰更安全。

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`。這可讓您更輕鬆地在 AWS KMS 主控台中識別 HMAC 金鑰，您可以在其中依標籤和別名排序和篩選金鑰，但不能依金鑰規格或金鑰用量。

   在 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`。若要新增、變更或刪除現有客戶受管金鑰的描述，請在 中編輯 中 KMS AWS 管理主控台 金鑰詳細資訊頁面上的描述， AWS 管理主控台 或使用 [UpdateKeyDescription](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html) 操作。

1. (選用) 輸入標籤索引鍵和選用標籤值。若要將其他標籤新增至 KMS 金鑰，請選擇 **Add tag** (新增標籤)。

   考慮新增能將金鑰識別為 HMAC 金鑰的標籤，例如 `Type=HMAC`。這可讓您更輕鬆地在 AWS KMS 主控台中識別 HMAC 金鑰，您可以在其中依標籤和別名排序和篩選金鑰，但不能依金鑰規格或金鑰用量。

   當您將標籤新增至 AWS 資源時， AWS 會產生成本分配報告，其中包含依標籤彙總的用量和成本。標籤也可以用來控制 KMS 金鑰的存取。如需標記 KMS 金鑰的詳細資訊，請參閱 [中的標籤 AWS KMS](tagging-keys.md) 和 [適用於 的 ABAC AWS KMS](abac.md)。

1. 選擇**下一步**。

1. 選取可管理 KMS 金鑰的 IAM 使用者和角色。
**備註**  
此金鑰政策提供此 KMS 金鑰的完整 AWS 帳戶 控制權。它允許帳戶管理員使用 IAM 政策授予其他主體管理 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 金鑰，請在頁面底部的 **Key deletion** (金鑰刪除) 區段中，清除 **Allow key administrators to delete this key** (允許金鑰管理員刪除此金鑰) 核取方塊。

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 政策來提供這些許可。如需詳細資訊，請參閱[允許其他帳戶中的使用者使用 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`。這可讓您更輕鬆地在 AWS KMS 主控台中識別 HMAC 金鑰，您可以在其中依別名排序和篩選金鑰，但不能依金鑰規格或金鑰使用量。

如果您嘗試在不支援 HMAC 金鑰 AWS 區域 的 中建立 HMAC KMS 金鑰，`CreateKey`操作會傳回 `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
    }
}
```