

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

# 建立 KMS 金鑰
<a name="create-keys"></a>

您可以在 AWS KMS keys 中 AWS 管理主控台或使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作或 [AWS::KMS::Key AWS CloudFormation 資源](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html)來建立 。在此過程中，您可以設定 KMS 金鑰的金鑰政策，您可以隨時變更。您也可以選取下列值來定義您建立的 KMS 金鑰類型。建立 KMS 金鑰之後即無法變更這些屬性。

**KMS 金鑰類型**  
*金鑰類型*是一種屬性，可決定建立的密碼編譯金鑰類型。 AWS KMS 提供三種金鑰類型來保護資料：  
+ 進階加密標準 (AES) 對稱金鑰

  256 位元金鑰，用於 AES 的 Galois 計數器模式 (GCM) 模式，以提供大小小於 4KB 的資料經過驗證的加密/解密。這是最常見的金鑰類型，用於保護應用程式中使用的其他資料加密金鑰 AWS 服務 ，以及代表您加密資料的方式。
+ RSA、橢圓曲線或 SM2 （僅限中國區域） 非對稱金鑰

  這些金鑰提供各種大小，並支援許多演算法。它們可用於加密和解密、簽署和驗證，或根據演算法選擇衍生共用秘密操作。
+ 用於執行雜湊型訊息驗證碼 (HMAC) 操作的對稱金鑰

  這些金鑰是用於簽署和驗證操作的 256 位元金鑰。

  KMS 金鑰無法以純文字從服務匯出。它們是由 產生，並且只能在 服務使用的硬體安全模組 HSMs) 內使用。這是 的基本安全屬性 AWS KMS ，以確保金鑰不會洩露。

**金鑰用量**  
*金鑰用途*是決定該金鑰支援之密碼編譯操作的屬性。KMS 金鑰的金鑰使用量可以是 `ENCRYPT_DECRYPT`、`GENERATE_VERIFY_MAC`、 `SIGN_VERIFY`或 `KEY_AGREEMENT`。每個 KMS 金鑰都僅有一種金鑰用途。這遵循美國[國家標準技術研究所 (NIST) 特別出版物 800-57 的金鑰管理建議](https://csrc.nist.gov/pubs/sp/800/57/pt1/r5/final)第 5.2 節金鑰用量的金鑰使用最佳實務。使用 KMS 金鑰執行多種類型的操作，會使得兩種操作的產品更容易受到攻擊。

**金鑰規格**  
*金鑰規格*是一種代表金鑰密碼編譯組態的屬性。金鑰規格的含義與金鑰類型不同。  
對於 KMS 金鑰，*金鑰規格*會決定 KMS 金鑰是對稱或非對稱。其也會決定其金鑰材料的類型，及其支援的演算法。  
預設金鑰規格 [SYMMETRIC\$1DEFAULT](symm-asymm-choose-key-spec.md#symmetric-cmks) 表示 256 位元對稱加密金鑰。如需所有支援金鑰規格的詳細說明，請參閱 [金鑰規格參考](symm-asymm-choose-key-spec.md)。

**金鑰材料來源**  
*金鑰材料來源* 是 KMS 金鑰屬性，用於識別 KMS 金鑰中金鑰材料的來源。您可以在建立 KMS 金鑰時選擇金鑰材料來源，之後便無法進行變更。金鑰材料的來源會影響 KMS 金鑰的安全性、耐久性、可用性、延遲和輸送量特性。  
每個 KMS 金鑰在中繼資料中都包含對其金鑰資料的引用。對稱加密 KMS 金鑰的金鑰資料來源可能會有所不同。您可以使用 AWS KMS 產生的金鑰材料、在[自訂金鑰存放](key-store-overview.md#custom-key-store-overview)區中產生的金鑰材料，或[匯入您自己的金鑰材料](importing-keys.md)。  
根據預設，每個 KMS 金鑰都有唯一的金鑰材料。不過，您可以建立一組具有相同金鑰材料的[多區域金鑰](multi-region-keys-overview.md)。  
KMS 金鑰可以具有下列其中一個金鑰材料來源值：`AWS_KMS`、 `EXTERNAL`([匯入的金鑰材料](importing-keys.md))、 `AWS_CLOUDHSM` ([AWS CloudHSM 金鑰存放區中的 KMS 金鑰](keystore-cloudhsm.md)) 或 `EXTERNAL_KEY_STORE`（外部金鑰存放區中的 KMS 金鑰）。[外部金鑰存放區](keystore-external.md)

**Topics**
+ [建立 KMS 金鑰的許可](#create-key-permissions)
+ [選擇要建立的 KMS 金鑰類型](#symm-asymm-choose)
+ [建立對稱加密 KMS 金鑰](create-symmetric-cmk.md)
+ [建立非對稱 KMS 金鑰](asymm-create-key.md)
+ [建立 HMAC KMS 金鑰](hmac-create-key.md)
+ [建立多區域主索引鍵](create-primary-keys.md)
+ [建立多區域複本金鑰](multi-region-keys-replicate.md)
+ [使用匯入的金鑰材料建立 KMS 金鑰](importing-keys-conceptual.md)
+ [在 金鑰存放區中建立 KMS AWS CloudHSM 金鑰](create-cmk-keystore.md)
+ [在外部金鑰存放區中建立 KMS 金鑰](create-xks-keys.md)

## 建立 KMS 金鑰的許可
<a name="create-key-permissions"></a>

若要在主控台或使用 API 建立 KMS 金鑰，您必須在 IAM 政策中具有下列許可。盡可能使用[條件金鑰](policy-conditions.md)以限制許可。例如，您可使用 IAM 政策中的 [kms:KeySpec](conditions-kms.md#conditions-kms-key-spec) 條件金鑰，以僅允許主體建立對稱加密 KMS 金鑰。

如需建立金鑰之主體的 IAM 政策範例，請參閱 [允許使用者建立 KMS 金鑰](customer-managed-policies.md#iam-policy-example-create-key)。

**注意**  
授予主體管理標籤和別名的許可時，請務必謹慎。變更標記或別名可允許或拒絕客戶受管金鑰的許可。如需詳細資訊，請參閱[適用於 的 ABAC AWS KMS](abac.md)。
+ [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 是必要項目。
+ [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) 是在主控台中建立 KMS 金鑰的必要項目，其中每個新 KMS 金鑰都需要別名。
+ [kms:TagResource](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html) 是建立 KMS 金鑰時新增標籤的必要項目。
+ [iam:CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) 是建立多區域主要金鑰的必要項目。如需詳細資訊，請參閱[控制對多區域金鑰的存取](multi-region-keys-auth.md)。

建立 KMS 金鑰時，不需要 [kms:PutKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_PutKeyPolicy.html) 許可。`kms:CreateKey` 許可包含設定初始金鑰政策的許可。但是，您必須在建立 KMS 金鑰時將此許可新增至金鑰政策，以確保您可以控制對 KMS 金鑰的存取。另一種方法是使用 [BypassLockoutSafetyCheck](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html#KMS-CreateKey-request-BypassPolicyLockoutSafetyCheck) 參數，但不建議使用。

KMS 金鑰屬於建立金鑰 AWS 的帳戶。建立 KMS 金鑰的 IAM 使用者不會被視為金鑰擁有者，而且他們不會自動擁有使用或管理他們建立之 KMS 金鑰的許可。與任何其他主體一樣，金鑰建立者必須透過金鑰政策、IAM 政策或授予取得許可。不過，擁有 `kms:CreateKey` 許可的主體可以設定初始金鑰政策，並授予自己使用或管理金鑰的許可。

## 選擇要建立的 KMS 金鑰類型
<a name="symm-asymm-choose"></a>

您建立的 KMS 金鑰類型，主要取決於您計劃如何使用 KMS ** 金鑰、您的安全需求，以及您的授權需求。KMS 金鑰的金鑰類型和金鑰用量決定金鑰可執行哪些密碼編譯操作。每個 KMS 金鑰僅有一個金鑰用途。使用 KMS 金鑰執行多種類型的操作，會使得所有操作的產品更容易受到攻擊。

若要允許主體僅為特定金鑰用途建立 KMS 金鑰，請使用 [kms:KeyUsage](conditions-kms.md#conditions-kms-key-usage) 條件金鑰。您也可以使用 `kms:KeyUsage` 條件索引鍵來允許委託人根據金鑰使用情形呼叫 KMS 金鑰的 API 操作。例如，您可以允許只有在金鑰使用情形為 SIGN\$1VERIFY 時，才能停用 KMS 金鑰的許可。

根據您的使用案例，使用下列指導判斷您需要的 KMS 金鑰類型。

**加密和解密資料**  
請使用[對稱 KMS 金鑰](symm-asymm-choose-key-spec.md#symmetric-cmks)處理對於大多數需要加密和解密資料的使用案例。 AWS KMS 使用的對稱加密演算法快速又有效率，並可確保資料的機密性和真實性。其支援經定義為[加密內容](encrypt_context.md)之額外的驗證資料 (AAD) 所驗證的加密。這種類型的 KMS 金鑰需要加密資料的寄件者和收件人擁有有效的 AWS 登入資料才能呼叫 AWS KMS。  
如果您的使用案例需要在 外部 AWS 由無法呼叫 的使用者加密 AWS KMS，[非對稱 KMS 金鑰](symmetric-asymmetric.md)是不錯的選擇。您可以分配非對稱 KMS 金鑰的公有金鑰，讓這些使用者加密資料。而需要解密該資料的應用程式，則可以使用 AWS KMS內的非對稱 KMS 金鑰私有金鑰。

**簽署訊息及驗證簽章**  
若要簽署訊息及驗證簽章，您必須使用[非對稱 KMS 金鑰](symmetric-asymmetric.md)。您可以使用 KMS 金鑰搭配代表 RSA 金鑰對、橢圓曲線 (ECC) 金鑰對、ML-DSA 金鑰對或 SM2 金鑰對的[金鑰規格](symm-asymm-choose-key-spec.md) （僅限中國區域）。您選擇的金鑰規格取決於您要使用的簽署演算法。ECC 金鑰對支援的 ECDSA 簽章演算法優於 RSA 簽章演算法。從 RSA 或 ECC 金鑰遷移至後量子金鑰時，請使用 ML-DSA 金鑰對。但是，您可能需要使用特定的金鑰規格和簽章演算法，以支援在 AWS以外驗證簽章的使用者。

**使用非對稱金鑰對加密**  
若要使用非對稱金鑰對加密資料，您必須使用非[對稱 KMS 金鑰](symmetric-asymmetric.md)搭配 [RSA 金鑰規格](symm-asymm-choose-key-spec.md#key-spec-rsa-encryption)或 [SM2 金鑰規格](symm-asymm-choose-key-spec.md#key-spec-sm) （僅限中國區域）。若要使用 KMS 金鑰的公有金鑰加密 AWS KMS 的資料，請使用 [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) 操作。您也可以[下載公有金鑰](download-public-key.md)，並與需要在 外部加密資料的各方共用 AWS KMS。  
當您下載非對稱 KMS 金鑰的公有金鑰時，您可以在 AWS KMS之外使用。但是，它不再受保護 KMS 金鑰的安全控制約束 AWS KMS。例如，您無法使用 AWS KMS 金鑰政策或授權來控制公有金鑰的使用。您也無法控制金鑰是否僅用於使用 AWS KMS 支援的加密演算法進行加密和解密。如需詳細資訊，請參閱[下載公有金鑰的特殊考量](offline-public-key.md#download-public-key-considerations)。  
若要解密在 外部使用公有金鑰加密的資料 AWS KMS，請呼叫 [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) 操作。如果資料是以公有金鑰從 KMS 金鑰加密，且金鑰使用量為 ，`Decrypt`則操作會失敗`SIGN_VERIFY`。如果使用 AWS KMS 不支援您所選金鑰規格的演算法加密，則也會失敗。如需金鑰規格和支援的演算法的詳細資訊，請參閱 [金鑰規格參考](symm-asymm-choose-key-spec.md)。  
為了避免這些錯誤，在 外部使用公有金鑰的任何人 AWS KMS 都必須存放金鑰組態。 AWS KMS 主控台和 [GetPublicKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetPublicKey.html) 回應提供共用公有金鑰時必須包含的資訊。

**衍生共用秘密**  
若要衍生共用秘密，請使用 KMS 金鑰搭配 [NIST 標準橢圓曲線](symm-asymm-choose-key-spec.md#key-spec-ecc)或 [SM2](symm-asymm-choose-key-spec.md#key-spec-sm) （僅限中國區域） 金鑰材料。 AWS KMS 會使用[橢圓曲線密碼編譯 Cofactor Diffie-Hellman 基本 ](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Ar3.pdf#page=60)(ECDH)，透過從橢圓曲線公有私有金鑰對衍生共用秘密，在兩個對之間建立金鑰協議。您可以使用 [ DeriveSharedSecret](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeriveSharedSecret.html) 操作傳回的原始共用秘密來衍生對稱金鑰，以加密和解密在兩方之間傳送的資料，或產生和驗證 HMACs。 AWS KMS 當您使用原始共用秘密衍生對稱金鑰時，建議您遵循[金鑰衍生的 NIST 建議](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-56Cr2.pdf)。

**產生和驗證 HMAC 代碼**  
若要產生和驗證雜湊訊息驗證碼，請使用 HMAC KMS 金鑰。當您在 中建立 HMAC 金鑰時 AWS KMS， 會 AWS KMS 建立並保護您的金鑰材料，並確保您為金鑰使用正確的 MAC 演算法。HMAC 代碼也可以用來作為虛擬亂數，並在特定情況下用於對稱簽署和字符化。  
HMAC KMS 金鑰為對稱金鑰。在 AWS KMS 主控台中建立 HMAC KMS 金鑰時，請選擇 `Symmetric` 金鑰類型。

**搭配 AWS 服務使用**  <a name="cmks-aws-service"></a>
若要建立 KMS 金鑰以與 [AWS 整合 AWS KMS](service-integration.md)的 服務搭配使用，請參閱 service. AWS services 的文件。加密資料的 需要[對稱加密 KMS 金鑰](symm-asymm-choose-key-spec.md#symmetric-cmks)。

除了這些考量外，具有不同金鑰規格的 KMS 金鑰的密碼編譯操作也有不同的定價和不同的請求配額。如需 AWS KMS 定價的資訊，請參閱 [AWS Key Management Service 定價](https://aws.amazon.com/kms/pricing/)。如需請求配額的詳細資訊，請參閱 [請求配額](requests-per-second.md)。

# 建立對稱加密 KMS 金鑰
<a name="create-symmetric-cmk"></a>

本主題說明如何建立基本 KMS 金鑰，這是具有金鑰材料之單一區域的[對稱加密 KMS](symm-asymm-choose-key-spec.md#symmetric-cmks) 金鑰 AWS KMS。您可使用此 KMS 金鑰來保護 AWS 服務中的資料。

您可以在 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)。

預設金鑰規格 [SYMMETRIC\$1DEFAULT](symm-asymm-choose-key-spec.md#symmetric-cmks) 是對稱加密 KMS 金鑰的金鑰規格。當您在 AWS KMS 主控台中選取**對稱**金鑰類型和**加密和解密**金鑰用量時，它會選取`SYMMETRIC_DEFAULT`金鑰規格。在 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作中，如果您不指定 `KeySpec` 值，即會選取 SYMMETRIC\$1DEFAULT。如果沒有使用不同金鑰規格的理由，SYMMETRIC\$1DEFAULT 是很好的選擇。

如需 KMS 金鑰配額的詳細資訊，請參閱 [配額](limits.md)。

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

您可以使用 AWS 管理主控台 建立 AWS KMS keys (KMS 金鑰）。

**重要**  
請勿在別名、說明或標籤包含機密或敏感資訊。這些欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

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. 若要建立對稱加密 KMS 金鑰，在 **Key type** (金鑰類型) 欄位中，選擇 **Symmetric** (對稱)。

1. 在 **Key usage** (金鑰用途) 欄位中，系統會自動選取 **Encrypt and decrypt** (加密和解密) 選項。

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

1. 輸入 KMS 金鑰的別名。別名名稱的開頭不可以是 **aws/**。字**aws/**首由 Amazon Web Services 保留，以在您的帳戶 AWS 受管金鑰 中代表 。
**注意**  
新增、刪除或更新別名可允許或拒絕 KMS 金鑰的許可。如需詳細資訊，請參閱 [適用於 的 ABAC AWS KMS](abac.md) 和 [使用別名來控制對 KMS 金鑰的存取](alias-authorization.md)。

    別名是您可用來識別 KMS 金鑰的顯示名稱。我們建議您選擇別名來表示您計劃保護的資料類型，或您計劃搭配 KMS 金鑰一起使用的應用程式。

    

    在 AWS 管理主控台中建立 KMS 金鑰時需要別名。但在使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作時是選用的。

1. (選用) 輸入 KMS 金鑰的描述。

   您可以立即新增描述或在任意時間更新，除非[金鑰狀態](key-state.md)為 `Pending Deletion` 或 `Pending Replica Deletion`。若要新增、變更或刪除現有客戶受管金鑰的描述，請在 中編輯 KMS 金鑰詳細資訊頁面上的描述， AWS 管理主控台 或使用 [UpdateKeyDescription](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html) 操作。

1. (選用) 輸入標籤索引鍵和選用標籤值。若要將其他標籤新增至 KMS 金鑰，請選擇 **Add tag** (新增標籤)。
**注意**  
標記或取消標記 KMS 金鑰可以允許或拒絕 KMS 金鑰的許可。如需詳細資訊，請參閱 [適用於 的 ABAC AWS KMS](abac.md) 和 [使用標籤來控制對 KMS 金鑰的存取](tag-authorization.md)。

   當您將標籤新增至 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-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** (完成) 來建立 KMS 金鑰。

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

您可以使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) AWS KMS keys 操作來建立所有類型的 。這些範例使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)。如需多種程式設計語言的範例，請參閱[`CreateKey` 搭配 AWS SDK 或 CLI 使用](example_kms_CreateKey_section.md)。

**重要**  
請勿在 `Description` 或 `Tags` 欄位包含機密或敏感資訊。這些欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

下列操作會在由 產生的金鑰材料支援的單一區域中建立對稱加密金鑰 AWS KMS。此操作沒有必要參數。但您可能還想要使用 `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)。您還可以建立[非對稱金鑰](asymm-create-key.md#create-asymmetric-keys-api)、[多區域金鑰](create-primary-keys.md)、[匯入金鑰資料](importing-keys-create-cmk.md#importing-keys-create-cmk-api)中的金鑰，以及[自訂金鑰存放區](create-cmk-keystore.md#create-cmk-keystore-api)中的金鑰。若要建立用於用戶端加密的資料金鑰，請使用 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 操作。

`CreateKey` 操作不允許您指定別名，但您可以使用 [CreateAlias](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateAlias.html) 操作來建立新 KMS 金鑰的別名。

以下範例呼叫 `CreateKey` 操作，不帶參數。這個命令會使用所有的預設值。其會使用 AWS KMS產生的金鑰資料來建立對稱加密 KMS 金鑰。

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

如果您不為您的新 KMS 金鑰指定金鑰政策，則在用其建立新 KMS 金鑰時，`CreateKey` 套用的[預設金鑰政策](key-policy-default.md)會不同於主控台套用的預設金鑰政策。

例如，呼叫 [GetKeyPolicy](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetKeyPolicy.html) 操作會傳回 `CreateKey` 套用的金鑰政策。它提供 KMS 金鑰的 AWS 帳戶 存取權，並允許它為 KMS 金鑰建立 AWS Identity and Access Management (IAM) 政策。如需有關 KMS 金鑰之 IAM 政策和金鑰政策的詳細資訊，請參閱 [KMS 金鑰存取和許可](control-access.md)。

```
$ aws kms get-key-policy --key-id 1234abcd-12ab-34cd-56ef-1234567890ab --policy-name default --output text
```

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id" : "key-default-1",
  "Statement" : [ {
    "Sid" : "EnableIAMUserPermissions",
    "Effect" : "Allow",
    "Principal" : {
      "AWS" : "arn:aws:iam::111122223333:root"
    },
    "Action" : "kms:*",
    "Resource" : "*"
  } ]
}
```

------

# 建立非對稱 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 範本來建立[非對稱 KMS](symmetric-asymmetric.md) 金鑰。 [AWS::KMS::Key CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-key.html) 非對稱 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 管理主控台 來建立非對稱 AWS KMS keys (KMS 金鑰）。每個非對稱 KMS 金鑰皆代表一對公有和私有金鑰對。

**重要**  
請勿在別名、說明或標籤包含機密或敏感資訊。這些欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

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. 若要建立非對稱 **KMS 金鑰**，請在金鑰類型中選擇 **Asymmetric** (非對稱)。

1. 若要建立用於公有金鑰加密的非對稱 KMS 金鑰，請在**金鑰使用情形**中選擇 **Encrypt and decrypt** (加密和解密)。

   若要建立用於簽署訊息和驗證簽章的非對稱 KMS 金鑰，請在**金鑰用量**中選擇**簽署和驗證**。

   若要建立用於衍生共用秘密的非對稱 KMS 金鑰，請在**金鑰用量**中選擇**金鑰協議**。

   如需選擇金鑰用途值的說明，請參閱[選擇要建立的 KMS 金鑰類型](create-keys.md#symm-asymm-choose)。

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

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

1. 輸入 KMS 金鑰的[別名](kms-alias.md)。別名名稱的開頭不可以是 **aws/**。**aws/** 字首由 Amazon Web Services 保留，以代表您帳戶中的 AWS 受管金鑰 。

   *別名*是易記的名稱，可用來識別主控台和部分 AWS KMS APIs中的 KMS 金鑰。我們建議您選擇別名來表示您計劃保護的資料類型，或您計劃搭配 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`。若要新增、變更或刪除現有客戶受管金鑰的描述，請在 中編輯 KMS 金鑰詳細資訊頁面上的描述， AWS 管理主控台 或使用 [UpdateKeyDescription](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateKeyDescription.html) 操作。

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

   當您將標籤新增至 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** (完成) 來建立 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` 參數，決定您建立的金鑰類型。此外，您必須指定 ENCRYPT\$1DECRYPT、SIGN\$1VERIFY 或 KEY\$1AGREEMENT `KeyUsage`的值。建立 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
    }
}
```

# 建立 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
    }
}
```

# 建立多區域主索引鍵
<a name="create-primary-keys"></a>

您可以在 AWS KMS 主控台或使用 AWS KMS API 建立[多區域主索引鍵](multi-region-keys-overview.md#mrk-primary-key)。您可以在 AWS KMS 支援多區域金鑰的任何 AWS 區域 中建立主金鑰。

若要建立多區域主要金鑰，委託人需要其建立任何 KMS 金鑰所需的相同[許可](create-keys.md#create-key-permissions)，包括 IAM 政策中的 [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 許可。委託人還需要 [iam:CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html) 許可。您可以使用 [kms:MultiRegionKeyType](conditions-kms.md#conditions-kms-multiregion-key-type) 條件索引鍵，以允許或拒絕建立多區域主要金鑰的許可。

**注意**  
建立多區域主金鑰時，請仔細考慮您選取要管理和使用金鑰的 IAM 使用者和角色。IAM 政策可授權其他 IAM 使用者和角色來管理 KMS 金鑰。  
IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

## 使用 AWS KMS 主控台
<a name="create-primary-console"></a>

若要在 AWS KMS 主控台中建立多區域主金鑰，請使用您用來建立任何 KMS 金鑰的相同程序。您在 **Advanced options** (進階選項) 中選取多區域金鑰。如需完整說明，請參閱 [建立 KMS 金鑰](create-keys.md)。

**重要**  
請勿在別名、說明或標籤包含機密或敏感資訊。這些欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

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. 選取[對稱或非對稱](symmetric-asymmetric.md)金鑰類型。對稱金鑰為預設值。

   您可以建立多區域對稱和非對稱金鑰，包括多區域 HMAC KMS 金鑰，這些都是對稱金鑰。

1. 選擇您的金鑰用途。**Encrypt and decrypt** (加密和解密) 為預設值。

   如需相關說明，請參閱[建立 KMS 金鑰](create-keys.md)、[建立非對稱 KMS 金鑰](asymm-create-key.md)或[建立 HMAC KMS 金鑰](hmac-create-key.md)。

1. 展開 **Advanced options (進階選項)**。

1. 在**金鑰材料來源**下，若要讓 AWS KMS 產生主要金鑰和複本金鑰將共用的金鑰材料，請選擇 **KMS**。若您要將[金鑰材料匯入](importing-keys-create-cmk.md)主要金鑰和複本金鑰中，請選擇 **External (Import key material)** (外部 (匯入金鑰材料))。

1. 在**區域性**下，選擇**多區域金鑰**。

   您無法在建立 KMS 金鑰之後變更此設定。

1. 輸入主要金鑰的[別名](kms-alias.md)。

   別名不是多區域金鑰的共用屬性。您可以為多區域主要金鑰及其複本提供相同的別名或不同的別名。 AWS KMS 不會同步多區域金鑰的別名。
**注意**  
新增、刪除或更新別名可允許或拒絕 KMS 金鑰的許可。如需詳細資訊，請參閱 [適用於 的 ABAC AWS KMS](abac.md) 和 [使用別名來控制對 KMS 金鑰的存取](alias-authorization.md)。

1. (選用) 輸入主要金鑰的描述。

   描述不是多區域金鑰的共用屬性。您可以為多區域主要金鑰及其複本提供相同的描述或不同的描述。 AWS KMS 不會同步多區域金鑰的金鑰描述。

1. (選用) 輸入標籤索引鍵和選用標籤值。若要為主要金鑰指派超過一個標籤，請選擇 **Add tag** (新增標籤)。

   標籤不是多區域金鑰的共用屬性。您可以為多區域主要金鑰及其複本提供相同的標籤或不同的標籤。 AWS KMS 不會同步多區域金鑰的標籤。您可以隨時變更 KMS 金鑰上的標籤。
**注意**  
標記或取消標記 KMS 金鑰可以允許或拒絕 KMS 金鑰的許可。如需詳細資訊，請參閱 [適用於 的 ABAC AWS KMS](abac.md) 和 [使用標籤來控制對 KMS 金鑰的存取](tag-authorization.md)。

1. 選取可管理主要金鑰的 IAM 使用者和角色。
**備註**  
這個步驟會開始為主要金鑰建立[金鑰政策](key-policies.md)的程序。金鑰政策不是多區域金鑰的共用屬性。您可以為多區域主金鑰及其複本提供相同的金鑰政策或不同的金鑰政策。 AWS KMS 不會同步多區域金鑰的金鑰政策。您可以隨時變更 KMS 金鑰的金鑰政策。
建立多區域主金鑰時，請考慮使用主控台產生的[預設金鑰政策](key-policy-default.md)。如果您修改此政策，主控台不會在建立複本金鑰時提供選取金鑰管理員和使用者的步驟，也不會新增對應的政策陳述式。因此，您需要手動新增這些項目。
 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 使用者和角色。
**備註**  
 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. 選擇**完成**以建立多區域主索引鍵。

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

若要建立多區域主要金鑰，請使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作。使用值為 `True` 的 `MultiRegion` 參數。

例如，下列命令會在呼叫者的 AWS 區域 (us-east-1) 中建立多區域主索引鍵。它會接受所有其他屬性 (包括金鑰政策) 的預設值。多區域主要金鑰的預設值與所有其他 KMS 金鑰的預設值相同，包括[預設金鑰政策](key-policy-default.md)。此程序會建立一個對稱加密金鑰，即預設 KMS 金鑰。

回應包含具有一般子元素的 `MultiRegion` 元素和 `MultiRegionConfiguration` 元素，以及無複本金鑰的多區域主要金鑰值。多區域金鑰的[金鑰 ID](concepts.md#key-id-key-id) 始終以 `mrk-` 開頭。

**重要**  
請勿在 `Description` 或 `Tags` 欄位包含機密或敏感資訊。這些欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

```
$ aws kms create-key --multi-region
{
    "KeyMetadata": {
        "Origin": "AWS_KMS",
        "KeyId": "mrk-1234abcd12ab34cd56ef1234567890ab",
        "Description": "",
        "KeyManager": "CUSTOMER",
        "Enabled": true,
        "KeySpec": "SYMMETRIC_DEFAULT",
        "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "Enabled",
        "CreationDate": 1606329032.475,
        "Arn": "arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab",
        "AWSAccountId": "111122223333",
        "EncryptionAlgorithms": [
            "SYMMETRIC_DEFAULT"
        ],
        "MultiRegion": true,
        "MultiRegionConfiguration": { 
            "MultiRegionKeyType": "PRIMARY",
            "PrimaryKey": { 
                "Arn": "arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab",
                "Region": "us-east-1"
            },
            "ReplicaKeys": [ ]
      }
    }
}
```

# 建立多區域複本金鑰
<a name="multi-region-keys-replicate"></a>

您可以在 AWS KMS 主控台中使用 [ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) 操作或使用 [AWS::KMS::ReplicaKey CloudFormation 範本](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-replicakey.html)來建立[多區域複本金鑰](multi-region-keys-overview.md#mrk-primary-key)。您無法使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作來建立複本金鑰。

您可以使用這些程序複製任何多區域主要金鑰，包括[對稱加密 KMS 金鑰](symm-asymm-choose-key-spec.md#symmetric-cmks)、[非對稱 KMS 金鑰](symmetric-asymmetric.md)或 [HMAC KMS 金鑰](hmac.md)。

當這項操作完成時，新的複本金鑰會有短暫的 `Creating` [金鑰狀態](key-state.md)。當建立新複本金鑰的程序完成數秒後，此金鑰狀態會變更為 `Enabled`（或者`PendingImport`如果您建立具有[匯入金鑰材料](importing-keys.md)的多區域金鑰）。雖然金鑰狀態為 `Creating`，您可以管理金鑰，但還無法在密碼編譯操作中使用金鑰。如果您要以程式設計方式建立並使用複本金鑰，請在 `KMSInvalidStateException` 上重試或呼叫 [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) 以檢查其 `KeyState` 值，然後再使用。

如果錯誤地刪除了複本金鑰，則可使用此程序重新建立。如果您在同一個區域中複寫相同的主要金鑰，則您建立的新複本金鑰將具有相同的[共用屬性](multi-region-keys-overview.md#mrk-sync-properties)作為原始複本金鑰。

**重要**  
請勿在別名、說明或標籤包含機密或敏感資訊。這些欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

若要使用 AWS CloudFormation 範本建立複本金鑰，請參閱*AWS CloudFormation 《 使用者指南*》中的 [AWS::KMS::ReplicaKey](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kms-replicakey.html)。

## 步驟 1：選擇複本區域
<a name="replica-region"></a>

您通常會 AWS 區域 根據您的商業模型和法規要求，選擇將多區域金鑰複寫到 。例如，您可能會將金鑰複寫至您保留資源的區域。或者，為了符合災難復原要求，您可以將金鑰複寫至地理位置偏遠的區域。

以下是複本區域 AWS KMS 的需求。如果您選擇的區域不符合這些要求，則嘗試複寫金鑰會失敗。
+ **每個區域一個相關的多區域金鑰** – 您無法在與其主要金鑰相同的區域中建立複本金鑰，或在與主要金鑰之另一個複本相同的區域中建立複本金鑰。

  如果嘗試在已有該主要金鑰的區域中複寫主要金鑰，則嘗試會失敗。如果區域中目前的複本金鑰處於 [`PendingDeletion` 金鑰狀態](key-state.md)，您可以[取消複本金鑰刪除](deleting-keys-scheduling-key-deletion.md)，或等到複本金鑰刪除完成。
+ **同一區域中多個不相關的多個區域金鑰** – 您可以在同一區域中擁有多個不相關的多區域金鑰。例如，您可以在 `us-east-1` 區域中有兩個多區域主要金鑰。每個主要金鑰都可以在 `us-west-2` 區域中有複本金鑰。
+ **相同分割區中的區域** – 複本金鑰區域必須位於與主要金鑰區域相同的 [AWS 分割區](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)中。
+ **必須啟用區域** – 如果區域[預設為停用](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html#rande-manage-enable)，則您無法在該區域中建立任何資源，直到為您的 AWS 帳戶啟用。

## 步驟 2：建立複本金鑰
<a name="create-replica-keys"></a>

**注意**  
建立複本金鑰時，請仔細考慮您選取要管理和使用複本金鑰的 IAM 使用者和角色。IAM 政策可授權其他 IAM 使用者和角色來管理 KMS 金鑰。  
IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

### 使用 AWS KMS 主控台
<a name="replicate-console"></a>

在 AWS KMS 主控台中，您可以在相同的操作中建立多區域主索引鍵的一或多個複本。

此程序類似於在主控台中建立標準的單一區域 KMS 金鑰。不過，因為複本金鑰是以主要金鑰為基礎，所以您不會選取[共用屬性](multi-region-keys-overview.md#mrk-sync-properties)的值，例如金鑰規格 (對稱或非對稱)、金鑰使用情形或金鑰來源。

您可以指定不共用的屬性，包括別名、標籤、描述和金鑰政策。為了方便起見，主控台會顯示主要金鑰的目前屬性值，但您可以對其進行變更。即使您保持主索引鍵值， AWS KMS 也不會同步這些值。

**重要**  
請勿在別名、說明或標籤包含機密或敏感資訊。這些欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

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. 選取[多區域主要金鑰](multi-region-keys-overview.md#mrk-primary-key)的金鑰 ID 或別名。如此會開啟 KMS 金鑰的金鑰詳細資訊頁面。

   若要識別多區域主要金鑰，請使用右上角的工具圖示新增 **Regionality** (區域性) 資料欄至資料表。

1. 選擇 **Regionality** (區域性) 索引標籤。

1. 在 **Related multi-Region keys** (相關的多區域金鑰) 區段中，選擇 **Create new replica keys** (建立新的複本金鑰)。

   **Related multi-Region keys** (相關的多區域金鑰) 區段會顯示主要金鑰及其複本金鑰的區域。您可以使用此顯示來協助您為新複本金鑰選擇區域。

1. 選擇一或多個 AWS 區域。此操作程序會在您選取的每個區域中建立複本金鑰。

   功能表僅包含與主索引鍵位於相同 AWS 分割區中的區域。已有相關多區域金鑰的區域會顯示出來，但無法選取。您可能沒有許可將金鑰複寫至選單上的所有區域。

   完成選擇「區域」後，請關閉選單。隨即會顯示您選擇的區域。若要取消複寫至區域，請選擇區域名稱旁邊的 **X**。

1. 輸入複本金鑰的[別名](kms-alias.md)。

   主控台會顯示主要金鑰目前的其中一個別名，但您可以對其進行變更。您可以為多區域主要金鑰及其複本提供相同的別名或不同的別名。別名不是多區域金鑰的[共用屬性](multi-region-keys-overview.md#mrk-sync-properties)。 AWS KMS 不會同步多區域金鑰的別名。

   新增、刪除或更新別名可允許或拒絕 KMS 金鑰的許可。如需詳細資訊，請參閱 [適用於 的 ABAC AWS KMS](abac.md) 和 [使用別名來控制對 KMS 金鑰的存取](alias-authorization.md)。

1. (選用) 輸入複本金鑰的描述。

   主控台會顯示主要金鑰的當前描述，但您可以對其進行變更。描述不是多區域金鑰的共用屬性。您可以為多區域主要金鑰及其複本提供相同的描述或不同的描述。 AWS KMS 不會同步多區域金鑰的金鑰描述。

1. (選用) 輸入標籤索引鍵和選用標籤值。若要為複本金鑰指派超過一個標籤，請選擇 **Add tag** (新增標籤)。

   主控台會顯示目前連接至主要金鑰的標籤，但您可以對其進行變更。標籤不是多區域金鑰的共用屬性。您可以為多區域主金鑰及其複本提供相同的標籤或不同的標籤。 AWS KMS 不會同步多區域金鑰的標籤。

   標記或取消標記 KMS 金鑰可以允許或拒絕 KMS 金鑰的許可。如需詳細資訊，請參閱 [適用於 的 ABAC AWS KMS](abac.md) 和 [使用標籤來控制對 KMS 金鑰的存取](tag-authorization.md)。

1. 選取可管理複本金鑰的 IAM 使用者和角色。
**備註**  
 如果您在建立多區域主要金鑰時修改預設金鑰政策，主控台不會在建立複本金鑰期間提示您選取金鑰管理員或金鑰使用者 （步驟 11-15)。在此情況下，您需要手動將金鑰管理員和使用者的必要許可新增至金鑰政策，方法是在**編輯金鑰政策**步驟 （步驟 17) 中選取**編輯**。
這個步驟會開始為複本金鑰建立[金鑰政策](key-policies.md)的程序。主控台會顯示主要金鑰的當前金鑰政策，但您可以對其進行變更。金鑰政策不是多區域金鑰的共用屬性。您可以為多區域主要金鑰及其複本提供相同的金鑰政策或不同的金鑰政策。 AWS KMS 不會同步金鑰政策。您可以隨時變更任何 KMS 金鑰的金鑰政策。
 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 使用者和角色。
**注意**  
 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. 選擇**完成**以建立多區域複本金鑰。

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

若要建立多區域複本金鑰，請使用 [ReplicateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReplicateKey.html) 操作。您無法使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作來建立複本金鑰。此操作一次會建立一個複本金鑰。您指定的區域必須符合複本金鑰的[區域要求](#replica-region)。

當使用 `ReplicateKey` 操作時，您不需要為多區域金鑰的任何[共用屬性](multi-region-keys-overview.md#mrk-sync-properties)指定值。共用屬性值會從主要金鑰複製並保持同步。然而，您可以為不共用的屬性指定值。否則， 會 AWS KMS 套用 KMS 金鑰的標準預設值，而非主金鑰的值。

**注意**  
如果您未指定 `Description`、 `KeyPolicy`或 `Tags` 參數的值， 會 AWS KMS 建立具有空字串描述、[預設金鑰政策且沒有標籤的複本金鑰](key-policy-default.md)。  
請勿在 `Description` 或 `Tags` 欄位包含機密或敏感資訊。這些欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

例如，以下命令會在亞太區域 (雪梨) 區域 (ap-southeast-2) 建立多區域複本金鑰。此複本金鑰是基於美國東部 (維吉尼亞北部) 區域 (us-east-1) 的主要金鑰進行建模，由 `KeyId` 參數值識別。此範例會接受所有其他屬性 (包括金鑰政策) 的預設值。

回應會描述新的複本金鑰。它包含共用屬性的欄位，例如 `KeyId`、`KeySpec`、`KeyUsage`，以及金鑰材料來源 (`Origin`)。它也包含獨立於主要金鑰的屬性，例如 `Description`、金鑰政策 (`ReplicaKeyPolicy`) 和標籤 (`ReplicaTags`)。

回應還包括金鑰 ARN 和主要金鑰的區域及其所有複本金鑰，包括剛剛在 ap-southeast-2 區域中建立的金鑰。在此範例中，`ReplicaKey` 元素顯示此主要金鑰已在歐洲 (愛爾蘭) 區域 (eu-west-1) 中複寫。

```
$ aws kms replicate-key \
    --key-id arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab \
    --replica-region ap-southeast-2
{
    "ReplicaKeyMetadata": {
        "MultiRegion": true,
        "MultiRegionConfiguration": {
            "MultiRegionKeyType": "REPLICA",
            "PrimaryKey": {
                "Arn": "arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab",
                "Region": "us-east-1"
            },
            "ReplicaKeys": [
                {
                    "Arn": "arn:aws:kms:ap-southeast-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab",
                    "Region": "ap-southeast-2"
                },
                {
                    "Arn": "arn:aws:kms:eu-west-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab",
                    "Region": "eu-west-1"
                }
            ]
        },
        "AWSAccountId": "111122223333",
        "Arn": "arn:aws:kms:ap-southeast-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab",
        "CreationDate": 1607472987.918,
        "Description": "",
        "Enabled": true,
        "KeyId": "mrk-1234abcd12ab34cd56ef1234567890ab",
        "KeyManager": "CUSTOMER",
        "KeySpec": "SYMMETRIC_DEFAULT",
        "KeyState": "Enabled",
        "KeyUsage": "ENCRYPT_DECRYPT",
        "Origin": "AWS_KMS",
        "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
        "EncryptionAlgorithms": [
            "SYMMETRIC_DEFAULT"
        ]
    },
    "ReplicaKeyPolicy": "{\n  \"Version\" : \"2012-10-17\",\n  \"Id\" : \"key-default-1\",...,
    "ReplicaTags": []
}
```

# 使用匯入的金鑰材料建立 KMS 金鑰
<a name="importing-keys-conceptual"></a>

匯入的金鑰材料可讓您使用產生的密碼編譯金鑰來保護 AWS 資源。以下概觀說明如何將金鑰材料匯入 AWS KMS。如需程序中每個步驟的詳細資訊，請參閱對應的主題。

1. [建立不含金鑰資料的 KMS 金鑰](importing-keys-create-cmk.md) — 來源必須是 `EXTERNAL`。金鑰來源 `EXTERNAL`表示金鑰專為匯入的金鑰材料而設計，並 AWS KMS 防止 產生 KMS 金鑰的金鑰材料。在後續步驟中，您會將您自己的金鑰材料匯入到這個 KMS 金鑰中。

   您匯入的金鑰材料必須與相關聯金鑰的 AWS KMS 金鑰規格相容。如需相容性的詳細資訊，請參閱 [匯入金鑰資料需求](#importing-keys-material-requirements)。

1. [下載包裝公有金鑰及匯入字符](importing-keys-get-public-key-and-token.md) — 在完成步驟 1 之後，請下載包裝公有金鑰及匯入字符。這些項目會在匯入至 時保護您的金鑰材料 AWS KMS。

   您可在此步驟選擇 RSA 包裝金鑰的類型 (「金鑰規格」)，以及用來加密資料的包裝演算法，以便將其傳輸至 AWS KMS。每次匯入或重新匯入相同金鑰資料時，您都可選擇不同包裝金鑰規格與包裝金鑰演算法。

1. [加密金鑰資料](importing-keys-encrypt-key-material.md) — 利用您在步驟 2 下載的包裝公有金鑰來加密您在自己系統建立的金鑰資料。

1. [匯入金鑰材料](importing-keys-import-key-material.md) – 上傳您在步驟 3 建立的加密金鑰材料，以及您在步驟 2 下載的匯入字符。

   在此階段，您可以[設定選用的到期時間](importing-keys-import-key-material.md#importing-keys-expiration)。當匯入的金鑰材料過期時， 會將其 AWS KMS 刪除，KMS 金鑰會變成無法使用。若要繼續運用 KMS 金鑰，您必須重新匯入**相同**的金鑰資料。

   當匯入操作成功完成後，KMS 金鑰的金鑰狀態會從 `PendingImport` 變成 `Enabled`。您現在可以在密碼編譯操作中使用 KMS 金鑰。

AWS KMS 當您[建立 KMS 金鑰](ct-createkey.md)、[下載包裝公有金鑰和匯入字符](ct-getparametersforimport.md)，以及匯入金鑰材料時， 會在 AWS CloudTrail 日誌中記錄項目。當您刪除匯入的金鑰材料或 AWS KMS [刪除過期的金鑰材料](ct-deleteexpiredkeymaterial.md)時， AWS KMS 也會記錄項目。 [ImportKeyMaterial](ct-importkeymaterial.md)

## 匯入金鑰材料的許可
<a name="importing-keys-permissions"></a>

若要使用匯入的金鑰材料建立和管理 KMS 金鑰，使用者需要此程序中的操作許可。您可以在建立 KMS 金鑰時提供金鑰政策中的 `kms:GetParametersForImport`、`kms:ImportKeyMaterial` 和 `kms:DeleteImportedKeyMaterial` 許可。在 AWS KMS 主控台中，當您使用**外部**金鑰材料來源建立金鑰時，系統會自動為金鑰管理員新增這些許可。

若要建立具有匯入金鑰材料的 KMS 金鑰，主體需要下列許可。
+ [kms:CreateKey](customer-managed-policies.md#iam-policy-example-create-key) (IAM 政策)
  + 若要將此許可限制至具有匯入金鑰材料的 KMS 金鑰，請使用具有 `EXTERNAL` 值的 [kms:KeyOrigin](conditions-kms.md#conditions-kms-key-origin) 政策條件。

    ```
    {
      "Sid": "CreateKMSKeysWithoutKeyMaterial",
      "Effect": "Allow",
      "Resource": "*",
      "Action": "kms:CreateKey",
      "Condition": {
        "StringEquals": {
          "kms:KeyOrigin": "EXTERNAL"
        }
      }
    }
    ```
+ [kms:GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) (金鑰政策或 IAM 政策)
  + 若要將此許可限制至使用特定包裝演算法和包裝金鑰規格的請求，請使用 [kms:WrappingAlgorithm](conditions-kms.md#conditions-kms-wrapping-algorithm) 和 [kms:WrappingKeySpec](conditions-kms.md#conditions-kms-wrapping-key-spec) 政策條件。
+ [kms:ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) (金鑰政策或 IAM 政策)
  + 若要允許或禁止過期的金鑰材料並控制過期日期，請使用 [kms:ExpirationModel](conditions-kms.md#conditions-kms-expiration-model) 和 [kms:ValidTo](conditions-kms.md#conditions-kms-valid-to) 政策條件。

若要重新匯入匯入的金鑰材料，主體需要 [kms:GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) 和 [kms:ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 許可。

若要刪除匯入的金鑰材料，主體需要 [kms:DeleteImportedKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteImportedKeyMaterial.html) 許可。

例如，若要准許範例 `KMSAdminRole` 管理具有匯入金鑰資料的 KMS 金鑰的所有方面，請在 KMS 金鑰的金鑰政策中包含如下所示的金鑰政策陳述式。

```
{
  "Sid": "Manage KMS keys with imported key material",
  "Effect": "Allow",
  "Resource": "*",
  "Principal": {
    "AWS": "arn:aws:iam::111122223333:role/KMSAdminRole"
  },
  "Action": [
    "kms:GetParametersForImport",
    "kms:ImportKeyMaterial",
    "kms:DeleteImportedKeyMaterial"
  ]  
}
```

## 匯入金鑰資料需求
<a name="importing-keys-material-requirements"></a>

您匯入的金鑰資料必須與關聯 KMS 金鑰的[金鑰規格](create-keys.md#key-spec)相容。對於非對稱金鑰對，請僅匯入配對的私有金鑰。 會從私有金鑰 AWS KMS 衍生公有金鑰。

AWS KMS 支援具有匯入金鑰材料的 KMS 金鑰的下列金鑰規格。
+ **對稱加密金鑰**
  + **金鑰規格：**
    + SYMMETRIC\$1DEFAULT。
  + **使用要求：**
    + 256 位元 (32 位元組） 的二進位資料。
    + 在中國區域，必須是 128 位元 (16 位元組) 的二進位資料。
+ **HMAC 金鑰**
  + **金鑰規格：**
    + HMAC\$1224
    + HMAC\$1256
    + HMAC\$1384
    + HMAC\$1512
  + **使用要求：**
    + HMAC 金鑰資料必須符合 [RFC 2104](https://datatracker.ietf.org/doc/html/rfc2104)。
    + 金鑰長度必須至少與金鑰規格指定的長度相同。金鑰長度上限為 1024 位元。
    + 如果您的金鑰材料超過 1024 位元，您可以雜湊金鑰材料並匯入雜湊輸出。雜湊演算法必須符合您正在建立之 HMAC KMS 金鑰的金鑰規格。
  + **範例**：
    + 若要將 2048 位元的金鑰材料匯入 HMAC\$1256 金鑰，請先計算 2048 位元金鑰材料的 SHA-256 雜湊，然後將產生的 256 位元雜湊輸出匯入 KMS 金鑰。
  + **有效的金鑰長度：**
    + HMAC\$1224：224–1024 位元
    + HMAC\$1256：256–1024 位元
    + HMAC\$1384：384–1024 位元
    + HMAC\$1512：512–1024 位元
+ **RSA 非對稱私有金鑰**
  + **金鑰規格：**
    + RSA\$12048
    + RSA\$13072
    + RSA\$14096
  + **使用要求：**
    + 您匯入的 RSA 非對稱私有金鑰必須是符合 [RFC 3447](https://datatracker.ietf.org/doc/html/rfc3447/) 金鑰對的一部分。
    + **模數**：2048 位元、3072 位元或 4096 位元
    + **素數**：2 (不支持多素 RSA 金鑰)
    + 非對稱金鑰材料必須使用符合 [RFC 520](https://datatracker.ietf.org/doc/html/rfc5208)8 的公有金鑰密碼編譯標準 (PKCS) \$18 格式的 BER 編碼或 DER 編碼。
+ **橢圓曲線非對稱私有金鑰**
  + **金鑰規格：**
    + ECC\$1NIST\$1P256 (secp256r1)
    + ECC\$1NIST\$1P384 (secp384r1)
    + ECC\$1NIST\$1P521 (secp521r1)
    + ECC\$1SECG\$1P256K1 (secp256k1)
    + ECC\$1NIST\$1EDWARDS25519 (ed25519)
  + **使用要求：**
    + 您匯入的 ECC 非對稱私有金鑰必須是符合 [RFC 5915](https://datatracker.ietf.org/doc/html/rfc5915/) 的一種金鑰對。
    + **曲線：**NIST P-256、NIST P-384、NIST P-521, Secp256k1、NIST Ed25519。
    + **參數：**僅限具名曲線 （具有明確參數的 ECC 金鑰會遭到拒絕）。
    + **公有點座標：**可壓縮、未壓縮或投影。
    + 非對稱金鑰材料必須以符合 [RFC 520](https://datatracker.ietf.org/doc/html/rfc5208)8 的公有金鑰密碼編譯標準 (PKCS) \$18 格式進行 BER 編碼或 DER 編碼。
+ **ML-DSA 金鑰**
  + **金鑰規格：**
    + ML\$1DSA\$144
    + ML\$1DSA\$165
    + ML\$1DSA\$187
**重要**  
不支援匯入 ML-DSA 金鑰。
+ **SM2 非對稱私有金鑰** （僅限中國區域）
  + **使用要求：**
    + 您匯入的 SM2 非對稱私有金鑰必須是符合 GM/T 0003 之金鑰對的一部分。
    + **曲線：**SM2。
    + **參數：**僅限具名曲線 （具有明確參數的 SM2 金鑰會遭到拒絕）。
    + **公有點座標：**可壓縮、未壓縮或投影。
    + 非對稱金鑰材料必須使用符合 [RFC 520](https://datatracker.ietf.org/doc/html/rfc5208)8 的公有金鑰密碼編譯標準 (PKCS) \$18 格式的 BER 編碼或 DER 編碼。

# 步驟 1：建立 AWS KMS key 不含金鑰材料的
<a name="importing-keys-create-cmk"></a>

根據預設， 會在您 AWS KMS 建立 KMS 金鑰時為您建立金鑰材料。若是要匯入您自己的金鑰材料，請從建立一個不含金鑰材料的 KMS 金鑰開始。然後再匯入金鑰材料。若要建立不含金鑰材料的 KMS 金鑰，請使用 AWS KMS 主控台或 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作。

若要建立不含金鑰資料的金鑰，請指定 `EXTERNAL` 的[來源](create-keys.md#key-origin)。KMS 金鑰的來源屬性不可變。建立 KMS 金鑰之後，您就無法將專為匯入金鑰材料設計的 KMS 金鑰轉換為 KMS 金鑰，其中包含來自 AWS KMS 或任何其他來源的金鑰材料。

具有 `EXTERNAL` 來源且沒有金鑰材料的 KMS 金鑰的[金鑰狀態](key-state.md)為 `PendingImport`。KMS 金鑰可以無限期保持在 `PendingImport` 狀態。然而，您無法在密碼編譯操作採用 `PendingImport` 狀態的 KMS 金鑰。在匯入金鑰資料之後，KMS 金鑰的金鑰狀態會變為 `Enabled`，且您可在密碼編譯操作使用該 KMS 金鑰。

AWS KMS 當您[建立 KMS 金鑰](ct-createkey.md)、[下載公有金鑰和匯入字符](ct-getparametersforimport.md)，以及[匯入金鑰材料](ct-importkeymaterial.md)時， 會在 AWS CloudTrail 日誌中記錄事件。 AWS KMS 當您[刪除匯入的金鑰材料](ct-deleteimportedkeymaterial.md)或 AWS KMS [刪除過期的金鑰材料](ct-deleteexpiredkeymaterial.md)時， 也會記錄 CloudTrail 事件。

**Topics**
+ [建立不含金鑰材料的 KMS 金鑰 (主控台)](#importing-keys-create-cmk-console)
+ [建立不含金鑰材料 (AWS KMS API) 的 KMS 金鑰](#importing-keys-create-cmk-api)

## 建立不含金鑰材料的 KMS 金鑰 (主控台)
<a name="importing-keys-create-cmk-console"></a>

您只需為匯入的金鑰資料建立一次 KMS 金鑰。您可視需要無限次匯入及重新匯入相同金鑰資料至現有 KMS 金鑰，但您不能匯入不同金鑰資料至一個 KMS 金鑰。如需詳細資訊，請參閱[步驟 2：下載包裝公有金鑰及匯入字符](importing-keys-get-public-key-and-token.md)。

若要在 **Customer managed keys** (客戶受管金鑰) 資料表中尋找具有匯入金鑰材料的現有 KMS 金鑰，請使用右上角的齒輪圖示在 KMS 金鑰清單中顯示 **Origin** (來源) 資料欄。匯入金鑰的**來源**值為**外部 (匯入金鑰資料)**。

若要使用匯入的金鑰材料建立 KMS 金鑰，請先遵循[建立您慣用金鑰類型的 KMS 金鑰的指示](create-keys.md)，但有下列例外。

在選擇金鑰用途之後，請執行下列步驟：

1. 展開 **Advanced options (進階選項)**。

1. 對於 **Key material origin** (金鑰材料來源)，選擇 **External (Import key material)** (外部 (匯入金鑰材料))。

1. 然後選擇**我了解採用已匯入金鑰的安全性及持久性隱憂**旁邊的核取方塊，表示您了解使用匯入金鑰資料的隱憂。如要閱讀這些隱憂的相關資訊，請參閱 [保護匯入的金鑰資料](import-keys-protect.md)。

1. 選用：若要使用匯入[的金鑰材料建立多區域 KMS](multi-region-keys-overview.md) 金鑰，請在**區域**性下選取**多區域金鑰**。

1. 返回基本說明。對於該類型的所有 KMS 金鑰，基本程序的其餘步驟均相同。

當您選擇**完成**時，您已建立不含金鑰資料的 KMS 金鑰，且狀態 ([金鑰狀態](key-state.md)) 為**待匯入**。

然而，主控台不會返回**客戶自管金鑰**表，而是顯示頁面讓您可在其中下載匯入金鑰資料所需的公有金鑰與匯入字符。您可立即繼續執行下載步驟，或選擇**取消**並在此時停止。您可隨時返回此下載步驟。

下一步：[步驟 2：下載包裝公有金鑰及匯入字符](importing-keys-get-public-key-and-token.md)。

## 建立不含金鑰材料 (AWS KMS API) 的 KMS 金鑰
<a name="importing-keys-create-cmk-api"></a>

若要使用 [AWS KMS API](https://docs.aws.amazon.com/kms/latest/APIReference/) 建立不含金鑰資料的對稱加密 KMS 金鑰，請傳送 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 請求並將 `Origin` 參數設為 `EXTERNAL`。以下範例顯示如何使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/) 執行此作業。

```
$ aws kms create-key --origin EXTERNAL
```

如果命令成功執行，您會看到類似如下的輸出。 AWS KMS 金鑰的 `Origin`是 `EXTERNAL` ，其 `KeyState`是 `PendingImport`。

**提示**  
如果命令未成功，您可能看到 `KMSInvalidStateException` 或 `NotFoundException`。您可重試請求。

```
{
    "KeyMetadata": {
        "Origin": "EXTERNAL",
        "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
        "Description": "",
        "Enabled": false,
        "MultiRegion": false,
        "KeyUsage": "ENCRYPT_DECRYPT",
        "KeyState": "PendingImport",
        "CreationDate": 1568289600.0,
        "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
        "AWSAccountId": "111122223333",
        "KeyManager": "CUSTOMER",
        "KeySpec": "SYMMETRIC_DEFAULT",
        "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
        "EncryptionAlgorithms": [
            "SYMMETRIC_DEFAULT"
        ]
    }
}
```

從命令輸出複製 `KeyId` 值以供後續步驟使用，然後繼續進行 [步驟 2：下載包裝公有金鑰及匯入字符](importing-keys-get-public-key-and-token.md)。

**注意**  
此命令會利用 `SYMMETRIC_DEFAULT` 的 `KeySpec` 與 `ENCRYPT_DECRYPT` 的 `KeyUsage` 來建立對稱加密 KMS 金鑰。您可利用選用參數 `--key-spec` 與 `--key-usage` 來建立非對稱 HMAC KMS 金鑰。如需詳細資訊，請參閱 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作。

# 步驟 2：下載包裝公有金鑰及匯入字符
<a name="importing-keys-get-public-key-and-token"></a>

[建立 AWS KMS key 不含金鑰資料的 ](importing-keys-create-cmk.md)後，請使用 AWS KMS 主控台或 [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) API，下載該 KMS 金鑰的包裝公有金鑰和匯入字符。包裝公有金鑰與匯入字符是不可分割的集合，必須一起使用。

您將利用包裝公有金鑰來[加密您的金鑰資料](importing-keys-encrypt-key-material.md)，以便進行傳輸。在下載 RSA 包裝金鑰對之前，您可以選取 RSA 包裝金鑰對的長度 （金鑰規格），以及用於在[步驟 3 ](importing-keys-encrypt-key-material.md)中加密匯入金鑰材料以進行傳輸的包裝演算法。 AWS KMS 也支援 SM2 包裝金鑰規格 （僅限中國區域）。

每個包裝公有金鑰與匯入字符集合的有效期為 24 小時。如您未在下載後 24 小時內利用它們來匯入金鑰資料，則必須下載新的集合。您可隨時下載新的包裝公有金鑰與匯入字符集合。這可讓您更改 RSA 包裝金鑰長度 (「金鑰規格」) 或替取代遺失的集合。

您也可下載包裝公有金鑰與匯入字符集合，以便[重新匯入相同金鑰資料](importing-keys-import-key-material.md#reimport-key-material)至 KMS 金鑰。這樣做可設定或變更金鑰資料的過期時間，或者還原已過期或已刪除的金鑰資料。每次匯入金鑰材料時，都必須下載並重新加密。 AWS KMS

**運用包裝公有金鑰**  
下載包含專屬於您的公有金鑰 AWS 帳戶，也稱為*包裝公有金鑰*。  
匯入金鑰材料之前，您可以使用公有包裝金鑰加密金鑰材料，然後將加密的金鑰材料上傳至其中 AWS KMS。當 AWS KMS 收到您的加密金鑰材料時，它會使用對應的私有金鑰解密金鑰材料，然後在 AES 對稱金鑰下重新加密金鑰材料，全部都在 AWS KMS 硬體安全模組 (HSM) 內。

**使用匯入符記**  
該下載包括匯入字符，字符所帶的中繼資料可確保金鑰材料正確匯入。當您上傳加密的金鑰資料到 時 AWS KMS，您必須上傳您在此步驟中下載的相同匯入字符。

## 選取包裝公有金鑰規格
<a name="select-wrapping-key-spec"></a>

為了在匯入期間保護您的金鑰材料，您可以使用您下載的包裝公有金鑰 AWS KMS和支援的[包裝演算法](#select-wrapping-algorithm)來加密它。在下載包裝公有金鑰與匯入字符之前，請先選取金鑰規格。所有包裝金鑰對都會在 AWS KMS 硬體安全模組 (HSMs中產生。您的私有金鑰永遠不會以純文字形式離開 HSM。

**RSA 包裝金鑰規格**  
包裝公有金鑰的*金鑰規格*決定 RSA 金鑰對的金鑰長度，該金鑰對在傳輸至 AWS KMS的過程會保護您的金鑰資料。一般情況而言，建議採用符合實用的最長公有金鑰。我們提供數種包裝公有金鑰規格，以便支援各種 HSM 與金鑰管理器。  
AWS KMS 支援用於匯入所有類型金鑰材料的 RSA 包裝金鑰的下列金鑰規格，除非另有說明。  
+ RSA\$14096 （建議）
+ RSA\$13072
+ RSA\$12048
**注意**  
不支援下列組合：ECC\$1NIST\$1P521 金鑰資料、RSA\$12048 公有包裝金鑰規格以及 RSAES\$1OAE\$1SHA\$1\$1 包裝演算法。  
您無法使用 RSA\$12048 公有包裝金鑰直接包裝 ECC\$1NIST\$1P521 金鑰材質。使用較大的包裝金鑰或 RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1\$1 包裝演算法。

**SM2 包裝金鑰規格 （僅限中國區域）**  
AWS KMS 支援用於匯入非對稱金鑰材料的 SM2 包裝金鑰的下列金鑰規格。  
+ SM2

## 選取包裝演算法
<a name="select-wrapping-algorithm"></a>

為在匯入期間保護金鑰資料，請利用下載的包裝公有金鑰及支援的包裝演算法來加密金鑰資料。

AWS KMS 支援數個標準 RSA 包裝演算法和兩個步驟的混合包裝演算法。一般而言，建議採用相容匯入金鑰資料及[包裝金鑰規格](#select-wrapping-key-spec)的最安全包裝演算法。您通常是選擇硬體安全模組 (HSM) 或保護金鑰資料的金鑰管理系統所支援的演算法。

下表顯示每種金鑰資料與 KMS 金鑰類型所支援的包裝演算法。演算法以偏好順序列出。


| 金鑰資料 | 支援的包裝演算法與規格 | 
| --- | --- | 
| 對稱加密金鑰 256 位元 AES 金鑰   128 位元 SM4 金鑰 (僅限中國區域) |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/importing-keys-get-public-key-and-token.html)  | 
| 非對稱 RSA 私有金鑰  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/importing-keys-get-public-key-and-token.html)  | 
| 非對稱橢圓曲線 (ECC) 私有金鑰   您不能搭配採用 RSAES\$1OAEP\$1SHA\$1\$1 包裝演算法與 RSA\$12048 包裝金鑰規格來包裝 ECC\$1NIST\$1P521 金鑰資料。 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/importing-keys-get-public-key-and-token.html)  | 
| 非對稱 SM2 私有金鑰 （僅限中國區域） |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/importing-keys-get-public-key-and-token.html)  | 
| HMAC 金鑰 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/importing-keys-get-public-key-and-token.html)  | 

**注意**  
中國區域不支援 `RSA_AES_KEY_WRAP_SHA_256`和 `RSA_AES_KEY_WRAP_SHA_1`包裝演算法。
+ `RSA_AES_KEY_WRAP_SHA_256` - 此為兩步驟混合包裝演算法，結合加密金鑰資料以及您產生的 AES 對稱金鑰，然後利用下載的 RSA 公有包裝金鑰與 RSAES\$1OAEP\$1SHA\$1256 包裝演算法來加密 AES 對稱金鑰。

  除了您必須使用`RSA_AES_KEY_WRAP_SHA_*`包裝演算法的中國區域以外，包裝 RSA 私有金鑰材料需要`SM2PKE`包裝演算法。
+ `RSA_AES_KEY_WRAP_SHA_1` - 此為兩步驟混合包裝演算法，結合加密金鑰資料以及您產生的 AES 對稱金鑰，然後利用下載的 RSA 包裝公有金鑰與 RSAES\$1OAEP\$1SHA\$11 包裝演算法來加密 AES 對稱金鑰。

  除了您必須使用`RSA_AES_KEY_WRAP_SHA_*`包裝演算法的中國區域以外，包裝 RSA 私有金鑰材料需要`SM2PKE`包裝演算法。
+ `RSAES_OAEP_SHA_256` – RSA 加密演算法搭配最佳非對稱加密填補 (OAEP) 以及 SHA-256 雜湊函數。
+ `RSAES_OAEP_SHA_1` – RSA 加密演算法搭配最佳非對稱加密填補 (OAEP) 以及 SHA-1 雜湊函數。
+ `RSAES_PKCS1_V1_5` （已棄用；截至 2023 年 10 月 10 日， AWS KMS 不支援 RSAES\$1PKCS1\$1V1\$15 包裝演算法） – RSA 加密演算法搭配 PKCS \$11 版本 1.5 中定義的填補格式。
+ `SM2PKE` （僅限中國區域） – OSCCA 在 GM/T 0003.4-2012 中定義的橢圓曲線型加密演算法。

**Topics**
+ [選取包裝公有金鑰規格](#select-wrapping-key-spec)
+ [選取包裝演算法](#select-wrapping-algorithm)
+ [下載包裝公有金鑰與匯入字符 (主控台)](#importing-keys-get-public-key-and-token-console)
+ [下載包裝公有金鑰和匯入字符 (AWS KMS API)](#importing-keys-get-public-key-and-token-api)

## 下載包裝公有金鑰與匯入字符 (主控台)
<a name="importing-keys-get-public-key-and-token-console"></a>

您可以使用 AWS KMS 主控台下載包裝公有金鑰和匯入字符。

1. 如果您剛完成[建立不含金鑰材料之 KMS 金鑰](importing-keys-create-cmk.md#importing-keys-create-cmk-console)的步驟，且目前是在 **Download wrapping key and import token** (下載包裝金鑰和匯入字符) 頁面，請跳到 [Step 10](#id-wrap-step)。

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** (客戶受管金鑰)。
**提示**  
您僅能匯入金鑰資料至**來源**是**外部 (匯入金鑰資料) **的 KMS 金鑰。這表示建立的 KMS 金鑰不含金鑰資料。如要將 **Origin (來源)** 資料行新增至您的資料表，請在頁面的右上角選擇設定圖示 (![\[Gear or cog icon representing settings or configuration options.\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/console-icon-settings-new.png))。開啟 **Origin (來源)**，然後選擇 **Confirm (確認)**。

1. 選擇待匯入的 KMS 金鑰的別名或金鑰 ID。

1. 選擇 **Cryptographic configuration** (密碼編譯組態) 索引標籤並檢視其值。索引標籤位於 **General Configuration** (一般組態) 區段下。

   您僅能匯入金鑰資料至**來源**是**外部 (匯入金鑰資料) **的 KMS 金鑰。如需有關建立具有匯入金鑰材料之 KMS 金鑰的資訊，請參閱 [匯入金鑰的 AWS KMS 金鑰材料](importing-keys.md)。

1. 根據您的金鑰類型選擇適當的標籤。
   + 對於非對稱和 HMAC 金鑰，請選擇**金鑰材料**索引標籤。
   + 針對對稱加密金鑰，選擇**金鑰材料和輪換**標籤。

1. 選擇匯入動作。
   + 針對非對稱和 HMAC 金鑰，選擇**匯入金鑰材料**。
   + 針對對稱加密金鑰，選擇下列其中一項：
     + **匯入初始金鑰材料** （如果尚未匯入金鑰材料）
     + **匯入新的金鑰材料** （新增要輪換的新材料）
     + **重新匯入金鑰材料** （可從金鑰材料資料表中的**動作**功能表取得）
**注意**  
對於多區域金鑰，您必須先將新的金鑰材料匯入主要區域金鑰。然後，將相同的金鑰材料匯入每個複本區域金鑰。  
對於主要多區域金鑰，**金鑰資料**資料表包含**複本匯入狀態**欄，顯示所有複本區域的匯入狀態 （例如，匯入 3 的 0)。選擇複本匯入狀態值，以開啟顯示每個複本區域的匯入狀態的模態。模態為尚未**匯入新金鑰材料**的複本區域提供匯入金鑰材料連結。

1. 針對**選取包裝金鑰規格**，請選擇 KMS 金鑰的組態。在建立此金鑰後，您便無法變更金鑰規格。

1. <a name="id-wrap-step"></a>對於 **Select wrapping algorithm (選取包裝演算法)**，請選擇您將用來加密金鑰材料的選項。如需選項的詳細資訊，請參閱[選取包裝演算法](#select-wrapping-algorithm)。

1. 選擇**下載包裝公有金鑰與匯入字符**，然後儲存檔案。

   如果您有 **Next (下一步)** 選項，現在請繼續程序，選擇 **Next (下一步)**。若要稍後再繼續，請選擇 **Cancel (取消)**。

1. 解壓縮您在上一個步驟中儲存的 `.zip` 檔案 (`Import_Parameters_<key_id>_<timestamp>`)。

   資料夾內含下列檔案：
   + 在名為 的檔案中包裝公有金鑰`WrappingPublicKey.bin`。
   + 匯入字符位於名為 `ImportToken.bin` 的檔案。
   + 名為 README.txt 的文本檔案。此檔案包含包裝公有金鑰的相關資訊、用來加密金鑰資料的包裝演算法，以及包裝公有金鑰與匯入字符過期的日期及時間。

1. 若要繼續程序，請參閱[加密金鑰材料](importing-keys-encrypt-key-material.md)。

## 下載包裝公有金鑰和匯入字符 (AWS KMS API)
<a name="importing-keys-get-public-key-and-token-api"></a>

若要下載公有金鑰和匯入字符，請使用 [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) API。指定將與匯入金鑰材料相關聯的 KMS 金鑰。此 KMS 金鑰的 [Origin](create-keys.md#key-origin) (來源) 值必須為 `EXTERNAL`。

**注意**  
您無法匯入 ML-DSA KMS 金鑰的金鑰材料。

此範例指定 `RSA_AES_KEY_WRAP_SHA_256` 包裝演算法、RSA\$13072 包裝公有金鑰規格，以及金鑰 ID 範例。將這些範例值取代為下載的有效值。對於金鑰 ID，您可採用[金鑰 ID](concepts.md#key-id-key-id) 或[金鑰 ARN](concepts.md#key-id-key-ARN)，但您不能在此操作採用[別名名稱](concepts.md#key-id-alias-name)或[別名 ARN](concepts.md#key-id-alias-ARN)。

```
$ aws kms get-parameters-for-import \
    --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
    --wrapping-algorithm RSA_AES_KEY_WRAP_SHA_256 \
    --wrapping-key-spec RSA_3072
```

如果命令成功執行，您會看到類似如下的輸出：

```
{
    "ParametersValidTo": 1568290320.0,
    "PublicKey": "public key (base64 encoded)",
    "KeyId": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "ImportToken": "import token (base64 encoded)"
}
```

為了準備下一步要使用的資料，將對公有金鑰和匯入字符進行 base64 解碼，然後將解碼的值保存在檔案中。

若要對公有金鑰和匯入字符進行 base64 解碼：

1. 複製 base64 編碼公有金鑰 (在範例輸出中表示為*公有金鑰 (base64 編碼)*)，將其貼入新檔案，然後儲存檔案。以描述性名稱命名檔案，例如 `PublicKey.b64`。

1. 使用 [OpenSSL](https://openssl.org/) 來以 base64 解碼檔案的內容，並將解碼資料儲存到新的檔案。以下範例會解碼您在上一個步驟中所儲存檔案的資料 (`PublicKey.b64`)，並將輸出儲存到新的檔案，檔名為 `WrappingPublicKey.bin`。

   ```
   $ openssl enc -d -base64 -A -in PublicKey.b64 -out WrappingPublicKey.bin
   ```

1. 複製 base64 編碼匯入字符 (在範例輸出中表示為*匯入字符 (base64 編碼)*)、將其貼入新檔案，然後儲存檔案。提供檔案描述性的名稱，例如 `importtoken.b64`。

1. 使用 [OpenSSL](https://openssl.org/) 來以 base64 解碼檔案的內容，並將解碼資料儲存到新的檔案。以下範例會解碼您在上一個步驟中所儲存檔案的資料 (`ImportToken.b64`)，並將輸出儲存到新的檔案，檔名為 `ImportToken.bin`。

   ```
   $ openssl enc -d -base64 -A -in importtoken.b64 -out ImportToken.bin
   ```

繼續執行「[步驟 3：加密金鑰材料](importing-keys-encrypt-key-material.md)」。

# 步驟 3：加密金鑰材料
<a name="importing-keys-encrypt-key-material"></a>

在您[下載公有金鑰和匯入字符](importing-keys-get-public-key-and-token.md)之後，請使用您下載的公有金鑰與您指定的包裝演算法來加密金鑰資料。如果您需要替換公有金鑰或匯入字符，或要變更包裝算法，則必須下載新的公有金鑰和匯入字符。如需 AWS KMS 支援的公有金鑰和包裝演算法的相關資訊，請參閱 [選取包裝公有金鑰規格](importing-keys-get-public-key-and-token.md#select-wrapping-key-spec)和 [選取包裝演算法](importing-keys-get-public-key-and-token.md#select-wrapping-algorithm)。

金鑰材料必須是二進位格式。如需詳細資訊，請參閱 [匯入金鑰資料需求](importing-keys-conceptual.md#importing-keys-material-requirements)。

**注意**  
對於非對稱金鑰對，請僅加密和匯入私有金鑰。 會從私有金鑰 AWS KMS 衍生公有金鑰。  
不支援下列組合：ECC\$1NIST\$1P521 金鑰資料、RSA\$12048 公有包裝金鑰規格以及 RSAES\$1OAE\$1SHA\$1\$1 包裝演算法。  
您無法使用 RSA\$12048 公有包裝金鑰直接包裝 ECC\$1NIST\$1P521 金鑰材質。使用較大的包裝金鑰或 RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1\$1 包裝演算法。  
中國區域不支援 RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 和 RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 包裝演算法。

一般而言，當您從硬體安全模組 (HSM) 或金鑰管理系統匯出金鑰材料，您會將其加密。如需如何以二進位格式匯出金鑰材料的詳細資訊，請參閱您的 HSM 或金鑰管理系統的文件。您也可以參閱以下章節，其中提供使用 OpenSSL 的概念驗證示範。

當加密金鑰資料時，請使用您在[下載包裝公有金鑰與匯入字符](importing-keys-get-public-key-and-token.md)時所指定的包裝演算法。若要尋找您指定的包裝演算法，請參閱 CloudTrail 日誌事件，以瞭解關聯的 [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) 要求。

## 產生用於測試的金鑰資料
<a name="importing-keys-example-key-material"></a>

下列 OpenSSL 指令會產生每種受支援類型的金鑰資料以供測試。這些範例僅供測試與概念驗證示範之用。對於生產系統，請使用更安全方法 (例如商業 HSM 或金鑰管理系統) 來產生並存放您的金鑰資料。

若要將非對稱金鑰配對的私有金鑰轉換為 DER 編碼格式，請將金鑰資料產生命令傳輸至下列 `openssl pkcs8` 命令。此 `topk8` 參數會指示 OpenSSL 取得私有金鑰做為匯入，並傳回 PKCS \$18 格式化的金鑰。(預設行為是相反。) 

```
openssl pkcs8 -topk8 -outform der -nocrypt
```

下列命令會為每個受支援的金鑰類型產生測試金鑰資料。
+ 對稱加密金鑰 (32 位元組)

  此命令會產生 256 位元對稱金鑰 (32 位元組隨機字串)，並將其儲存在 `PlaintextKeyMaterial.bin` 檔案。您不需要對此金鑰資料進行編碼。

  ```
  openssl rand -out PlaintextKeyMaterial.bin 32
  ```

  僅在中國區域，您必須產生 128 位元對稱金鑰 (16 位元組隨機字串)。

  ```
  openssl rand -out PlaintextKeyMaterial.bin 16
  ```
+ HMAC 金鑰

  此命令產生指定大小的隨機位元組字串。您不需要對此金鑰資料進行編碼。

  HMAC 金鑰的長度必須符合 KMS 金鑰規格所定義的長度。例如，如果 KMS 金鑰是 HMAC\$1384，您必須匯入 384 位元 (48 位元組) 金鑰。

  ```
  openssl rand -out HMAC_224_PlaintextKey.bin 28
  
  openssl rand -out HMAC_256_PlaintextKey.bin 32
  
  openssl rand -out HMAC_384_PlaintextKey.bin 48
  
  openssl rand -out HMAC_512_PlaintextKey.bin 64
  ```
+ RSA 私有金鑰

  ```
  openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_2048_PrivateKey.der
  
  openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:3072 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_3072_PrivateKey.der
  
  openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_4096_PrivateKey.der
  ```
+ ECC 私有金鑰

  ```
  openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P256_PrivateKey.der
  
  openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-384 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P384_PrivateKey.der
  
  openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-521 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P521_PrivateKey.der
  
  openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:secp256k1 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_SECG_P256K1_PrivateKey.der
  ```
+ SM2 私有金鑰 （僅限中國區域）

  ```
  openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:sm2 | openssl pkcs8 -topk8 -outform der -nocrypt > SM2_PrivateKey.der
  ```

## 範例：使用 OpenSSL 加密金鑰資料
<a name="importing-keys-encrypt-key-material-openssl"></a>

下列範例說明如何使用 [OpenSSL](https://openssl.org/) 以下載的公有金鑰來加密金鑰內容。若要使用 SM2 公有金鑰加密金鑰材料 （僅限中國區域），請使用 [`SM2OfflineOperationHelper`類別](offline-operations.md#key-spec-sm-offline-helper)。如需每個包裝演算法支援的金鑰材料類型的詳細資訊，請參閱 [選取包裝演算法](importing-keys-get-public-key-and-token.md#select-wrapping-algorithm)。

**重要**  
此範例僅為概念驗證示範。對於生產系統，請使用更安全方法 (例如商業 HSM 或金鑰管理系統) 來產生和存放您的金鑰材料。  
不支援下列組合：ECC\$1NIST\$1P521 金鑰資料、RSA\$12048 公有包裝金鑰規格以及 RSAES\$1OAE\$1SHA\$1\$1 包裝演算法。  
您無法使用 RSA\$12048 公有包裝金鑰直接包裝 ECC\$1NIST\$1P521 金鑰材質。使用較大的包裝金鑰或 RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1\$1 包裝演算法。

------
#### [ RSAES\$1OAEP\$1SHA\$11 ]

AWS KMS 支援對稱加密金鑰 (SYMMETRIC\$1DEFAULT)、橢圓曲線 (ECC) 私有金鑰、SM2 私有金鑰和 HMAC 金鑰的 RSAES\$1OAEP\$1SHA\$11。

RSAES\$1OAEP\$1SHA\$11 不支援 RSA 私有金鑰。此外，您不能將 RSA\$12048 公有包裝金鑰與任何 RSAES\$1OAEP\$1SHA\$1\$1 包裝演算法搭配使用，來包裝 ECC\$1NIST\$1P521 (secp521r1) 私有金鑰。您必須使用較大的公有包裝金鑰或 RSA\$1AES\$1KEY\$1WRAP 包裝演算法。

下列範例會使用[您下載的公有金鑰](importing-keys-get-public-key-and-token.md)與 RSAES\$1OAEP\$1SHA\$11 包裝演算法來加密金鑰資料，並將其儲存在 `EncryptedKeyMaterial.bin` 檔案。

在此範例中：
+ *`WrappingPublicKey.bin`* 是包含下載的包裝公有金鑰的檔案。
+ *`PlaintextKeyMaterial.bin`* 是包含您正在加密的金鑰資料的檔案，例如 `PlaintextKeyMaterial.bin`、`HMAC_384_PlaintextKey.bin` 或 `ECC_NIST_P521_PrivateKey.der`。

```
$ openssl pkeyutl \
    -encrypt \
    -in PlaintextKeyMaterial.bin \
    -out EncryptedKeyMaterial.bin \
    -inkey WrappingPublicKey.bin \
    -keyform DER \
    -pubin \
    -pkeyopt rsa_padding_mode:oaep \
    -pkeyopt rsa_oaep_md:sha1
```

------
#### [ RSAES\$1OAEP\$1SHA\$1256 ]

AWS KMS 支援 RSAES\$1OAEP\$1SHA\$1256 的對稱加密金鑰 (SYMMETRIC\$1DEFAULT)、橢圓曲線 (ECC) 私有金鑰、SM2 私有金鑰和 HMAC 金鑰。

RSAES\$1OAEP\$1SHA\$1256 不支援 RSA 私有金鑰。此外，您不能將 RSA\$12048 公有包裝金鑰與任何 RSAES\$1OAEP\$1SHA\$1\$1 包裝演算法搭配使用，來包裝 ECC\$1NIST\$1P521 (secp521r1) 私有金鑰。您必須使用較大的公有金鑰或 RSA\$1AES\$1KEY\$1WRAP 包裝演算法。

下列範例會使用[您下載的公有金鑰](importing-keys-get-public-key-and-token.md)與 RSAES\$1OAEP\$1SHA\$1256 包裝演算法來加密金鑰資料，並將其儲存在 `EncryptedKeyMaterial.bin` 檔案。

在此範例中：
+ *`WrappingPublicKey.bin`* 是包含下載的公有包裝金鑰的檔案。如果從主控台下載公有金鑰，這個檔案名稱為 `wrappingKey_KMS key_key_ID_timestamp` (例如 `wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909`)。
+ *`PlaintextKeyMaterial.bin`* 是包含您正在加密金鑰資料的檔案，例如 `PlaintextKeyMaterial.bin`、`HMAC_384_PlaintextKey.bin` 或 `ECC_NIST_P521_PrivateKey.der`。

```
$ openssl pkeyutl \
    -encrypt \
    -in PlaintextKeyMaterial.bin \
    -out EncryptedKeyMaterial.bin \
    -inkey WrappingPublicKey.bin \
    -keyform DER \
    -pubin \
    -pkeyopt rsa_padding_mode:oaep \
    -pkeyopt rsa_oaep_md:sha256 \
    -pkeyopt rsa_mgf1_md:sha256
```

------
#### [ RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 ]

此 RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 RSA 包裝演算法涉及兩個加密操作。

1. 使用您產生的 AES 對稱金鑰與 AES 對稱加密演算法來加密金鑰資料。

1. 將您所下載的公有金鑰與 RSAES\$1OAEP\$1SHA\$11 包裝演算法搭配使用的 AES 對稱金鑰加密。

The RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 包裝演算法需要 OpenSSL 版本 3。*x* 或更新版本。

1. 

**產生 256 位元 AES 對稱加密金鑰**

   此命令會產生由 256 個隨機位元組成的 AES 對稱加密金鑰，並將其儲存在 `aes-key.bin` 檔案

   ```
   # Generate a 32-byte AES symmetric encryption key
   $ openssl rand -out aes-key.bin 32
   ```

1. 

**使用 AES 對稱加密金鑰加密您的金鑰資料**

   此命令會使用 AES 對稱加密金鑰加密金鑰，並將加密的金鑰資料儲存在 `key-material-wrapped.bin` 檔案。

   以下是範例命令：
   + *`PlaintextKeyMaterial.bin`* 是包含您要匯入金鑰資料的檔案，例如 `PlaintextKeyMaterial.bin`、`HMAC_384_PlaintextKey.bin`、`RSA_3072_PrivateKey.der` 或 `ECC_NIST_P521_PrivateKey.der`。
   + *`aes-key.bin`* 是包含您在上一個命令中產生的 256 位元 AES 對稱加密金鑰的檔案。

   ```
   # Encrypt your key material with the AES symmetric encryption key
   $ openssl enc -id-aes256-wrap-pad \
           -K "$(xxd -p < aes-key.bin | tr -d '\n')" \
           -iv A65959A6 \
           -in PlaintextKeyMaterial.bin \
           -out key-material-wrapped.bin
   ```

1. 

**使用公有金鑰加密 AES 對稱加密金鑰**

   此命令使用您下載的公有金鑰與 RSAES\$1OAEP\$1SHA\$11 包裝演算法對您的 AES 對稱加密金鑰進行加密，並將其保存在 `aes-key-wrapped.bin` 檔案。

   以下是範例命令：
   + *`WrappingPublicKey.bin`* 是包含下載的公有包裝金鑰的檔案。如果從主控台下載公有金鑰，此檔案名稱為 `wrappingKey_KMS key_key_ID_timestamp` (例如 `wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909`)。
   + *`aes-key.bin`* 是包含您在此範例序列的第一個命令所產生的 256 位元 AES 對稱加密金鑰的檔案。

   ```
   # Encrypt your AES symmetric encryption key with the downloaded public key
   $ openssl pkeyutl \
       -encrypt \
       -in aes-key.bin \
       -out aes-key-wrapped.bin \
       -inkey WrappingPublicKey.bin \
       -keyform DER \
       -pubin \
       -pkeyopt rsa_padding_mode:oaep \
       -pkeyopt rsa_oaep_md:sha1 \
       -pkeyopt rsa_mgf1_md:sha1
   ```

1. 

**產生要匯入的檔案**

   將檔案與加密的金鑰資料及檔案與加密的 AES 金鑰連接起來。將它們儲存在 `EncryptedKeyMaterial.bin` 檔案，這是您將匯入在 [步驟 4：匯入金鑰材料](importing-keys-import-key-material.md) 檔案 。

   以下是範例命令：
   + *`key-material-wrapped.bin`* 是包含加密金鑰資料的檔案。
   + *`aes-key-wrapped.bin`* 是包含加密 AES 加密金鑰的檔案。

   ```
   # Combine the encrypted AES key and encrypted key material in a file
   $ cat aes-key-wrapped.bin key-material-wrapped.bin > EncryptedKeyMaterial.bin
   ```

------
#### [ RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 ]

此 RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 RSA 包裝演算法涉及兩個加密操作。

1. 使用您產生的 AES 對稱金鑰與 AES 對稱加密演算法來加密金鑰資料。

1. 將您所下載的公有金鑰與 RSAES\$1OAEP\$1SHA\$1256 包裝演算法搭配使用的 AES 對稱金鑰加密。

The RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 包裝演算法需要 OpenSSL 版本 3。*x* 或更新版本。

1. 

**產生 256 位元 AES 對稱加密金鑰**

   此命令會產生由 256 個隨機位元組成的 AES 對稱加密金鑰，並將其儲存在 `aes-key.bin` 檔案

   ```
   # Generate a 32-byte AES symmetric encryption key
   $ openssl rand -out aes-key.bin 32
   ```

1. 

**使用 AES 對稱加密金鑰加密您的金鑰資料**

   此命令會使用 AES 對稱加密金鑰加密金鑰，並將加密的金鑰資料儲存在 `key-material-wrapped.bin` 檔案。

   以下是範例命令：
   + *`PlaintextKeyMaterial.bin`* 是包含您要匯入金鑰資料的檔案，例如 `PlaintextKeyMaterial.bin`、`HMAC_384_PlaintextKey.bin`、`RSA_3072_PrivateKey.der` 或 `ECC_NIST_P521_PrivateKey.der`。
   + *`aes-key.bin`* 是包含您在上一個命令中產生的 256 位元 AES 對稱加密金鑰的檔案。

   ```
   # Encrypt your key material with the AES symmetric encryption key
   $ openssl enc -id-aes256-wrap-pad \
           -K "$(xxd -p < aes-key.bin | tr -d '\n')" \
           -iv A65959A6 \
           -in PlaintextKeyMaterial.bin \
           -out key-material-wrapped.bin
   ```

1. 

**使用公有金鑰加密 AES 對稱加密金鑰**

   此命令使用您下載的公有金鑰與 RSAES\$1OAEP\$1SHA\$1256 包裝演算法對您的 AES 對稱加密金鑰進行加密，並將其保存在 `aes-key-wrapped.bin` 檔案。

   以下是範例命令：
   + *`WrappingPublicKey.bin`* 是包含下載的公有包裝金鑰的檔案。如果從主控台下載公有金鑰，此檔案名稱為 `wrappingKey_KMS key_key_ID_timestamp` (例如 `wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909`)。
   + *`aes-key.bin`* 是包含您在此範例序列的第一個命令所產生的 256 位元 AES 對稱加密金鑰的檔案。

   ```
   # Encrypt your AES symmetric encryption key with the downloaded public key
   $ openssl pkeyutl \
       -encrypt \
       -in aes-key.bin \
       -out aes-key-wrapped.bin \
       -inkey WrappingPublicKey.bin \
       -keyform DER \
       -pubin \
       -pkeyopt rsa_padding_mode:oaep \
       -pkeyopt rsa_oaep_md:sha256 \
       -pkeyopt rsa_mgf1_md:sha256
   ```

1. 

**產生要匯入的檔案**

   將檔案與加密的金鑰資料及檔案與加密的 AES 金鑰連接起來。將它們儲存在 `EncryptedKeyMaterial.bin` 檔案，這是您將匯入在 [步驟 4：匯入金鑰材料](importing-keys-import-key-material.md) 檔案 。

   以下是範例命令：
   + *`key-material-wrapped.bin`* 是包含加密金鑰資料的檔案。
   + *`aes-key-wrapped.bin`* 是包含加密 AES 加密金鑰的檔案。

   ```
   # Combine the encrypted AES key and encrypted key material in a file
   $ cat aes-key-wrapped.bin key-material-wrapped.bin > EncryptedKeyMaterial.bin
   ```

------

繼續執行「[步驟 4：匯入金鑰材料](importing-keys-import-key-material.md)」。

# 步驟 4：匯入金鑰材料
<a name="importing-keys-import-key-material"></a>

[加密您的金鑰材料之後](importing-keys-encrypt-key-material.md)，您可以匯入金鑰材料以便搭配使用 AWS KMS key。若要匯入金鑰材料，請上傳在[步驟 3：加密金鑰材料](importing-keys-encrypt-key-material.md)加密的金鑰材料，以及在[步驟 2：下載包裝公有金鑰及匯入字符](importing-keys-get-public-key-and-token.md)下載的匯入符記。您必須將金鑰材料匯入至您在[下載公有金鑰和匯入字符](importing-keys-get-public-key-and-token.md)時指定的同一個 KMS 金鑰。在成功匯入金鑰資料之後，KMS 金鑰的[金鑰狀態](key-state.md)會變為 `Enabled`，這表示您可在密碼編譯操作使用 KMS 金鑰。

在匯入金鑰材料時，您可以為金鑰材料[設定可選的過期時間](#importing-keys-expiration)。當金鑰材料過期時， AWS KMS 會刪除金鑰材料，讓 KMS 金鑰變成不可用。匯入金鑰材料後，您無法設定、變更或取消目前匯入材料的過期日期。若要變更這些值，您必須[重新匯入](#reimport-key-material)相同的金鑰材料。

對於具有`EXTERNAL`原始伺服器的所有 KMS 金鑰，匯入其中的第一個金鑰材料會成為最新版本，並永久與其相關聯。具有`EXTERNAL`原始伺服器的對稱加密金鑰支援隨需輪換。您可以將多個金鑰材料與支援隨需輪換的匯入金鑰建立關聯。匯入新金鑰材料的程序會因單一區域和多區域金鑰而有所不同，如[匯入新金鑰材料](#import-new-key-material)一節所述。您必須使用 [ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 動作`NEW_KEY_MATERIAL`將 `importType` 參數設定為 ，以將新的金鑰材料與 KMS 金鑰建立關聯。選用`ImportType`參數的預設值為 `EXISTING_KEY_MATERIAL`。當您省略 `ImportType` 參數或將其指定為 時`EXISTING_KEY_MATERIAL`，您必須匯入先前與 KMS 金鑰相關聯的金鑰材料。

對於非對稱或具有`EXTERNAL`原始伺服器的 HMAC KMS 金鑰，只能有一個金鑰材料與金鑰相關聯。 AWS KMS 將使用 `ImportType` 參數拒絕 [ ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) API 請求。

匯入與 KMS 金鑰永久相關聯的所有金鑰材料時，KMS 金鑰可用於密碼編譯操作。如果這些金鑰材料中的任何一種遭到刪除或允許過期，KMS 金鑰狀態會變更為 ，`PendingImport`且金鑰不適用於密碼編譯操作。

若要匯入金鑰材料，您可以使用 [AWS KMS 主控台](#importing-keys-import-key-material-console)或 [ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) API。您可以透過提出 HTTP 請求，或透過使用 [AWS 開發套件](https://aws.amazon.com/tools/#sdk)、[AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/) 或 [AWS Tools for PowerShell](https://docs.aws.amazon.com/powershell/latest/userguide/)，直接使用 API。

當您匯入金鑰材料時，會將 [ImportKeyMaterial 項目](ct-importkeymaterial.md)新增至您的 AWS CloudTrail 日誌，以記錄`ImportKeyMaterial`操作。無論您使用 AWS KMS 主控台或 AWS KMS API，CloudTrail 項目都相同。

## 設定到期時間 (選用)
<a name="importing-keys-expiration"></a>

匯入 KMS 金鑰的金鑰材料時，可以為金鑰材料設定選用的到期日期和時間，從匯入日期算起最多 365 天。當匯入的金鑰材料過期時， 會將其 AWS KMS 刪除。此動作會將 KMS 金鑰的[金鑰狀態](key-state.md#key-state-table)變更為 `PendingImport`，這會防止在任何密碼編譯操作中對其進行使用。若要使用 KMS 金鑰，您必須[重新匯入原始金鑰材料的複本](#reimport-key-material)。

確保匯入的金鑰材料頻繁地到期，可協助您滿足法規要求，但這會對使用 KMS 金鑰加密的資料帶來額外的風險。在您重新匯入原始金鑰材料的複本之前，包含過期金鑰材料的 KMS 金鑰將無法使用，而且使用該 KMS 金鑰進行加密的任何資料都無法存取。如果您因任何原因而無法重新匯入金鑰材料，包括遺失原始金鑰材料的複本，則該 KMS 金鑰將永久無法使用，而且使用該 KMS 金鑰進行加密的資料將無法復原。

若要降低此風險，請確定您可以存取匯入金鑰材料的副本，並設計系統在金鑰材料過期和中斷 AWS 工作負載之前刪除和重新匯入金鑰材料。建議您為已匯入的金鑰材料到期[設定一個警示](imported-key-material-expiration-alarm.md)，讓您有足夠的時間在金鑰材料到期前重新匯入。您也可以使用 CloudTrail 日誌來稽核[匯入 (含重新匯入) 金鑰材料](ct-importkeymaterial.md)和[刪除已匯入的金鑰材料](ct-deleteimportedkeymaterial.md)的操作，以及[刪除過期金鑰材料](ct-deleteexpiredkeymaterial.md)的 AWS KMS 操作。

AWS KMS 無法還原、復原或重現已刪除的金鑰材料。您可以透過程式設計方式定期[刪除](importing-keys-delete-key-material.md)和[重新匯入](#reimport-key-material)已匯入的金鑰材料，而不是設定到期時間，但是保留原始金鑰材料複本的要求是相同的。

您可以在匯入金鑰材料時確定金鑰材料是否有到期時間以及何時到期。不過，您可以開啟和關閉過期，或透過重新匯入金鑰材料來設定新的過期時間。使用 [ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 的 `ExpirationModel` 參數來開啟 (`KEY_MATERIAL_EXPIRES`) 和關閉 (`KEY_MATERIAL_DOES_NOT_EXPIRE`) 到期時間，以及使用 `ValidTo` 參數來設定何時到期。最長時間為匯入資料後 365 天；沒有最低限度，但時間必須為將來的時間。

## 設定金鑰材料描述
<a name="set-key-material-description"></a>

具有`EXTERNAL`原始伺服器的對稱加密金鑰可以有多個與其相關聯的金鑰材料。您可以在將金鑰材料匯入此類金鑰時指定選用的金鑰材料描述。描述可用來追蹤在外部長期維護對應金鑰材料的位置 AWS KMS。

對於多區域金鑰，您只能在主要區域金鑰上設定或變更金鑰材料描述。 AWS KMS 會自動將金鑰材料描述傳播至複本區域金鑰。

## 匯入新的金鑰資料
<a name="import-new-key-material"></a>

若要在具有匯入金鑰材料的對稱加密 KMS 金鑰上執行隨需輪換，您必須先匯入新的金鑰材料，先前不會與金鑰相關聯。
+ **單一區域金鑰**
  + 使用 [ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 操作，並將 `ImportType` 參數設定為 `NEW_KEY_MATERIAL`來完成此任務。在您執行 [RotateKeyOnDemand](https://docs.aws.amazon.com/kms/latest/APIReference/API_RotateKeyOnDemand.html) 操作或在 中輪換金鑰之前，此金鑰材料不會永久與金鑰相關聯 AWS 管理主控台。在此之前，此金鑰材料處於 `PENDING_ROTATION` 狀態。KMS 金鑰隨時最多可有一個處於 `PENDING_ROTATION` 狀態的金鑰材料。可以刪除處於 `PENDING_ROTATION` 狀態的金鑰材料，而不會影響金鑰在密碼編譯操作中的可用性。
+ **多區域金鑰**
  + 若要將金鑰材料匯入多區域金鑰，您必須先將新的金鑰材料匯入主要區域金鑰。您無法將新的金鑰材料直接匯入複本區域金鑰。將新的金鑰材料匯入主要區域金鑰後，您可以將相同的金鑰材料匯入複本區域金鑰。
  + 針對主要區域金鑰使用 `ImportType` 參數設定為 **NEW\$1KEY\$1MATERIAL** [https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html)的操作來完成此任務。對於複本區域金鑰，請使用 的 **EXISTING\$1KEY\$1MATERIAL** 參數`ImportType`進行 `ImportKeyMaterial`操作。
  + 在金鑰材料狀態變更為 `PENDING_ROTATION` 狀態之前，對稱加密多區域金鑰的金鑰材料必須匯入所有複本區域金鑰和主要區域金鑰。在此之前，新金鑰材料的狀態為 `PENDING_MULTI_REGION_IMPORT_AND_ROTATION`。KMS 金鑰隨時最多可有一個處於 `PENDING_ROTATION`或 `PENDING_MULTI_REGION_IMPORT_AND_ROTATION`狀態的金鑰材料 （請參閱 [RotationsListEntry](https://docs.aws.amazon.com/kms/latest/APIReference/API_RotationsListEntry.html) 中的`KeyMaterialState`描述）。處於 `PENDING_MULTI_REGION_IMPORT_AND_ROTATION`或 `PENDING_ROTATION` 狀態的金鑰材料不會永久與金鑰相關聯，而且可以在不影響金鑰在密碼編譯操作中的可用性的情況下刪除。

## 重新匯入金鑰材料
<a name="reimport-key-material"></a>

如果您管理的 KMS 金鑰含有已匯入的金鑰資料，您可能需要重新匯入金鑰資料。您可能重新匯入金鑰材料來取代即將過期或已刪除的金鑰材料，或變更金鑰材料的過期模型或過期日期。

您可以根據自己的安全性需求來排程或隨時重新匯入金鑰材料。不必等到金鑰材料到期或接近到期時間。

重新匯入金鑰材料的程序與您第一次用來匯入金鑰材料的程序相同，但有下列例外。
+ 使用現有的 KMS 金鑰，而不是建立新的 KMS 金鑰。您可以略過匯入程序的[步驟 1](importing-keys-create-cmk.md)。
+ 重新匯入金鑰資料時，您可以變更過期模型和過期日期。對於對稱加密金鑰，您也可以變更金鑰材料描述。

  對於多區域金鑰，您只能在主要區域金鑰上設定或變更金鑰材料描述。 AWS KMS 會自動將金鑰材料描述傳播至複本區域金鑰。

每次將金鑰材料匯入 KMS 金鑰時，您需要為 KMS 金鑰[下載並使用新的包裝金鑰和匯入字符](importing-keys-get-public-key-and-token.md)。包裝程序不會影響金鑰資料內容，因此您可採用不同包裝公有金鑰和不同包裝演算法來匯入相同金鑰資料。

## 匯入金鑰材料 (主控台)
<a name="importing-keys-import-key-material-console"></a>

您可以使用 AWS 管理主控台 匯入金鑰材料。

1. 如您在 **Upload your wrapped key material** (上傳包裝的金鑰資料) 頁面，請跳至 [Step 10](#id-key-materials-step)。

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. 針對您已下載公開金鑰和匯入字符的 KMS 金鑰，選擇其金鑰 ID 或別名。

1. 選擇 **Cryptographic configuration** (密碼編譯組態) 索引標籤並檢視其值。這些索引標籤位於 **General configuration** (一般組態) 區段下 KMS 金鑰的詳細資訊頁面上。

   您僅能將金鑰資料匯入 **Origin** (來源) 是 **EXTERNAL** (外部 (匯入金鑰材料)) 的 KMS 金鑰。如需有關建立具有匯入金鑰材料之 KMS 金鑰的資訊，請參閱 [匯入金鑰的 AWS KMS 金鑰材料](importing-keys.md)。

1. 根據您的金鑰類型選擇適當的標籤。
   + 對於非對稱和 HMAC 金鑰，請選擇**金鑰材料**索引標籤。
   + 針對對稱加密金鑰，選擇**金鑰材料和輪換**索引標籤。

1. 選擇匯入動作。
   + 針對非對稱和 HMAC 金鑰，選擇**匯入金鑰材料**。
   + 針對對稱加密金鑰，選擇下列其中一項：
     + **匯入初始金鑰材料** （如果尚未匯入金鑰材料）
     + **匯入新的金鑰材料** （新增用於輪換的新材料）
     + **重新匯入金鑰材料** （可從金鑰材料資料表中的**動作**功能表取得）
**注意**  
對於多區域金鑰，您必須先將新的金鑰材料匯入主要區域金鑰。然後，將相同的金鑰材料匯入每個複本區域金鑰。  
對於主要多區域金鑰，**金鑰資料**資料表包含**複本匯入狀態**欄，顯示所有複本區域的匯入狀態 （例如，匯入 3 個中的 0 個）。選擇複本匯入狀態值，以開啟顯示每個複本區域的匯入狀態的模態。模態為尚未**匯入新金鑰材料**的複本區域提供匯入金鑰材料連結。

1. 如您已下載金鑰資料、匯入字符並加密金鑰資料，請選擇 **Next** (下一步)。
**注意**  
對於多區域金鑰，您必須先將新的金鑰材料匯入主要區域金鑰。然後，您可以將相同的金鑰材料匯入複本區域金鑰。

1. <a name="id-key-materials-step"></a>在 **Encrypted key material and import token** (加密金鑰資料與匯入字符) 區段，執行下列動作。

   1. 在 **Wrapped key material** (包裝的金鑰資料)，選擇 **Choose file** (選擇檔案)。然後，上傳內含包裝 (加密) 金鑰資料的檔案。

   1. 在 **Import token** (匯入字符)，選擇 **Choose file** (上傳檔案)。上傳內含您[下載](importing-keys-get-public-key-and-token.md#importing-keys-get-public-key-and-token-console)之匯入符記的檔案。

1. 在 **Expiration option (過期選項)** 區段中，您可以決定金鑰材料是否會過期。若要設定過期日期和時間，請選擇 **Key material expires (金鑰資料過期)**，然後使用行事曆選取日期和時間。您可以指定自目前日期和時間起的日期，但最長不超過 365 天。

1. 對於對稱加密金鑰，您可以選擇指定要匯入之金鑰資料的描述。

1. 選擇**匯入金鑰材料**。

## 匯入金鑰材料 (AWS KMS API)
<a name="importing-keys-import-key-material-api"></a>

若要匯入金鑰材料，請使用 [ImportKeyMaterial](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html) 操作。以下範例使用 [AWS CLI](https://aws.amazon.com/cli/)，但您可以使用任何支援的程式設計語言。

若要使用此範例：

1. 將 `1234abcd-12ab-34cd-56ef-1234567890ab` 取代為您在下載公有金鑰和匯入字符時指定的 KMS 金鑰的金鑰 ID。若要識別 KMS 金鑰，請使用它的[金鑰 ID](concepts.md#key-id-key-id) 或[金鑰 ARN](concepts.md#key-id-key-ARN)。不能對此操作使用[別名](concepts.md#key-id-alias-name)或[別名 ARN](concepts.md#key-id-alias-ARN)。

1. 將 `EncryptedKeyMaterial.bin` 取代為包含加密金鑰材料的檔案名稱。

1. 將 `ImportToken.bin` 取代為包含匯入符記的檔案名稱。

1. 如果希望匯入的金鑰材料過期，請將 `expiration-model` 參數設定為其預設值 `KEY_MATERIAL_EXPIRES`，或省略 `expiration-model` 參數。然後，將 `valid-to` 參數的值取代為您希望金鑰材料到期的日期和時間。日期和時間最多可以是自提出請求之日起的 365 天內。

   ```
   $ aws kms import-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
       --encrypted-key-material fileb://EncryptedKeyMaterial.bin \
       --import-token fileb://ImportToken.bin \
       --expiration-model KEY_MATERIAL_EXPIRES \
       --valid-to 2023-06-17T12:00:00-08:00
   ```

   如果不希望匯入的金鑰材料過期，請將 `expiration-model` 參數的值設定為 `KEY_MATERIAL_DOES_NOT_EXPIRE`，並省略命令中的 `valid-to` 參數。

   ```
   $ aws kms import-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
       --encrypted-key-material fileb://EncryptedKeyMaterial.bin \
       --import-token fileb://ImportToken.bin \
       --expiration-model KEY_MATERIAL_DOES_NOT_EXPIRE
   ```

1. 如果您想要匯入新的金鑰材料，但先前未與 KMS 金鑰相關聯，請將 `ImportType` 參數設定為 `NEW_KEY_MATERIAL`。此選項只能與對稱加密金鑰搭配使用。對於這些金鑰，您也可以在下列命令列範例中，使用選用`KeyMaterialDescription`參數來設定匯入金鑰資料的描述：

   ```
   $ aws kms import-key-material --key-id 1234abcd-12ab-34cd-56ef-1234567890ab \
       --encrypted-key-material fileb://EncryptedKeyMaterial.bin \
       --import-token fileb://ImportToken.bin \
       --expiration-model KEY_MATERIAL_EXPIRES \
       --valid-to 2023-06-17T12:00:00-08:00 \
       --import-type NEW_KEY_MATERIAL \
       --key-material-description "Q2 2025 Rotation"
   ```

1. 對於多區域金鑰，您只能在主要區域金鑰上設定或變更金鑰材料描述。 AWS KMS 會自動將金鑰材料描述傳播至複本區域金鑰。

**提示**  
如果命令未成功，您可能看到 `KMSInvalidStateException` 或 `NotFoundException`。您可重試請求。

# 在 金鑰存放區中建立 KMS AWS CloudHSM 金鑰
<a name="create-cmk-keystore"></a>

建立 AWS CloudHSM 金鑰存放區之後，您可以在金鑰存放區 AWS KMS keys 中建立 。它們必須是具有 AWS KMS 產生的金鑰材料的[對稱加密 KMS](symm-asymm-choose-key-spec.md#symmetric-cmks) 金鑰。您無法在自訂金鑰存放區中建立[非對稱 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。若要尋找 HSM 的連接狀態和數目，請檢視 AWS 管理主控台中的 [AWS CloudHSM 金鑰存放區頁面](view-keystore.md#view-keystore-console)。使用 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) 操作。

當您在 AWS CloudHSM 金鑰存放區中建立 KMS 金鑰時， 會在其中 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 CloudHSM 金鑰之 操作的 AWS CloudTrail 日誌範例，請參閱 [CreateKey](ct-createkey.md)。

## 在 CloudHSM 金鑰存放區中建立新的 KMS 金鑰
<a name="create-key-keystore"></a>

您可以在主控台的 AWS CloudHSM AWS KMS 金鑰存放區中或使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作來建立對稱加密 KMS 金鑰。

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

使用下列程序在 金鑰存放區中建立對稱加密 KMS AWS CloudHSM 金鑰。

**注意**  
請勿在別名、說明或標籤包含機密或敏感資訊。這些欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

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. 選擇 **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)。如需新增 HSM 的說明，請參閱《*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 AWS KMS](abac.md)。

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

1. 在 **Key Administrators** (金鑰管理員) 區段中，選取可管理 KMS 金鑰的 IAM 使用者和角色。如需詳細資訊，請參閱[允許金鑰管理員來管理 KMS 金鑰](key-policy-default.md#key-policy-default-allow-administrators)。
**備註**  
IAM 政策可授權其他 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 CloudHSM 金鑰存放區中建立新的 AWS KMS key (KMS 金鑰），請使用 [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) 操作來驗證與 `ExampleKeyStore`(cluster-1a23b4cdefg) 相關聯的 AWS CloudHSM 叢集至少有兩個作用中 HSMs。如果叢集的 HSM 少於兩個，`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"
    ]
  }
}
```

# 在外部金鑰存放區中建立 KMS 金鑰
<a name="create-xks-keys"></a>

[建立](create-xks-keystore.md)並[連接](xks-connect-disconnect.md)外部金鑰存放區之後，您可以在金鑰存放區 AWS KMS keys 中建立 。其必須是具有 **External key store** (外部金鑰存放區) (`EXTERNAL_KEY_STORE`) 原始值的[對稱加密 KMS 金鑰](symm-asymm-choose-key-spec.md#symmetric-cmks)。您無法在自訂金鑰存放區中建立[非對稱 KMS 金鑰](symmetric-asymmetric.md)、[HMAC KMS 金鑰](hmac.md)，或是含有[匯入金鑰資料](importing-keys.md)的 KMS 金鑰。此外，您無法在自訂金鑰存放區中使用對稱加密 KMS 金鑰來產生非對稱資料金鑰對。

與標準 KMS 金鑰相比，外部金鑰存放區中的 KMS 金鑰可能具有較差的延遲、耐久性和可用性，因為其依賴於 AWS之外的元件。在外部金鑰存放區中建立或使用 KMS 金鑰之前，請確認您需要具有外部金鑰存放區屬性的金鑰。

**注意**  
有些外部金鑰管理器會提供更簡單的方法來建立外部金鑰存放區的 KMS 金鑰。如需詳細資訊，請參閱外部金鑰管理器文件。

若要在外部金鑰存放區建立 KMS 金鑰，您必須指定下列項目：
+ 外部金鑰存放區的 ID。
+ 外部金鑰存放區 (`EXTERNAL_KEY_STORE`) 的[金鑰材料來源](create-keys.md#key-origin)。
+ 與外部金鑰存放區相關聯的[外部金鑰管理器](keystore-external.md#concept-ekm)中的現有[外部金鑰](keystore-external.md#concept-external-key) ID。此外部金鑰作為 KMS 金鑰的金鑰材料。您無法在建立 KMS 金鑰之後變更外部金鑰 ID。

  AWS KMS 在加密和解密操作的請求中提供外部金鑰存放區代理的外部金鑰 ID。 AWS KMS 無法直接存取您的外部金鑰管理器或其任何密碼編譯金鑰。

除了外部金鑰之外，外部金鑰存放區中的 KMS 金鑰也具有 AWS KMS 金鑰材料。在 KMS 金鑰下加密的所有資料會先 AWS KMS 使用金鑰的 AWS KMS 金鑰材料在 中加密，然後使用外部金鑰由外部金鑰管理器加密。此[雙重加密](keystore-external.md#concept-double-encryption)程序可確保受外部金鑰存放區中 KMS 金鑰保護的密文至少與僅受 AWS KMS保護的密文一樣強。如需詳細資訊，請參閱[外部金鑰存放區的運作方式](keystore-external.md#xks-how-it-works)。

當 `CreateKey` 操作成功時，新 KMS 金鑰的[金鑰狀態](key-state.md)為 `Enabled`。當您[在外部金鑰存放區檢視 KMS 金鑰](identify-key-types.md#view-xks-key)時，您會看到一般屬性，例如其金鑰 ID、[金鑰規格](create-keys.md#key-spec)、[金鑰用途](create-keys.md#key-usage)、[金鑰狀態](key-state.md)和建立日期。但是您也可以看到外部金鑰存放區的 ID 和[連接狀態](xks-connect-disconnect.md#xks-connection-state)以及外部金鑰的 ID。

如果您嘗試在外部金鑰存放區建立 KMS 金鑰失敗，請使用錯誤訊息來判斷原因。這可能表示外部金鑰存放區未連接 (`CustomKeyStoreInvalidStateException`)、外部金鑰存放區代理找不到具有指定外部金鑰 ID 的外部金鑰 (`XksKeyNotFoundException`)，或外部金鑰已與相同外部金鑰存放區中的 KMS 金鑰相關聯 `XksKeyAlreadyInUseException`。

如需在外部金鑰存放區中建立 KMS 金鑰之操作的 AWS CloudTrail 日誌範例，請參閱 [CreateKey](ct-createkey.md)。

**Topics**
+ [外部金鑰存放區中 KMS 金鑰的要求](#xks-key-requirements)
+ [在外部金鑰存放區中建立新的 KMS 金鑰](#create-key-xks)

## 外部金鑰存放區中 KMS 金鑰的要求
<a name="xks-key-requirements"></a>

若要在外部金鑰存放區中建立 KMS 金鑰，外部金鑰存放區、KMS 金鑰以及作為 KMS 金鑰之外部密碼編譯金鑰材料的外部金鑰需要下列屬性。

**外部金鑰存放區要求**
+ 必須連接到其外部金鑰存放區代理。

  若要檢視外部金鑰存放區的[連接狀態](xks-connect-disconnect.md#xks-connection-state)，請參閱 [檢視外部金鑰存放區](view-xks-keystore.md)。若要連接外部金鑰存放區，請參閱 [連接和中斷連接外部金鑰存放區](xks-connect-disconnect.md)。

**KMS 金鑰要求**

您無法在建立 KMS 金鑰之後變更這些屬性。
+ 金鑰規格：SYMMETRIC\$1DEFAULT
+ 金鑰用途：ENCRYPT\$1DECRYPT
+ 金鑰材料來源：EXTERNAL\$1KEY\$1STORE
+ 多區域：FALSE

**外部金鑰要求**
+ 256 位元 AES 密碼編譯金鑰 (256 個隨機位元)。外部金鑰的 `KeySpec` 必須為 `AES_256`。
+ 已啟用並可供使用。外部金鑰的 `Status` 必須為 `ENABLED`。
+ 設定用於加密和解密。外部金鑰的 `KeyUsage` 必須包含 `ENCRYPT` 和 `DECRYPT`。
+ 僅與此 KMS 金鑰搭配使用。外部金鑰存放區中的每個 `KMS key` 都必須與不同的外部金鑰關聯。

  AWS KMS 也建議將外部金鑰專用於外部金鑰存放區。此限制可讓您更輕鬆地識別並解決金鑰的問題。
+ 可供外部金鑰存放區的[外部金鑰存放區代理](keystore-external.md#concept-xks-proxy)存取。

  如果外部金鑰存放區代理找不到使用指定外部金鑰 ID 的金鑰，`CreateKey` 操作就會失敗。
+ 可以處理您使用 AWS 服務 產生的預期流量。 AWS KMS 建議外部金鑰準備處理每秒最多 1800 個請求。

## 在外部金鑰存放區中建立新的 KMS 金鑰
<a name="create-key-xks"></a>

您可以在 AWS KMS 主控台的外部金鑰存放區中或使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作建立新的 KMS 金鑰。

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

有兩種方法可以在外部金鑰存放區中建立 KMS 金鑰。
+ 方法 1 (建議選擇)：選擇外部金鑰存放區，然後在該外部金鑰存放區建立 KMS 金鑰。
+ 方法 2：建立 KMS 金鑰，然後指出金鑰位於外部金鑰存放區。

如果您使用方法 1，在建立金鑰之前選擇外部金鑰存放區， 會為您 AWS KMS 選擇所有必要的 KMS 金鑰屬性，並填入外部金鑰存放區的 ID。此方法可避免您在建立 KMS 金鑰時可能發生的錯誤。

**注意**  
請勿在別名、說明或標籤包含機密或敏感資訊。這些欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

**方法 1 (建議選擇)：在外部金鑰存放區開始**

若要使用此方法，請選擇外部金鑰存放區，然後建立 KMS 金鑰。 AWS KMS 主控台會為您選擇所有必要的屬性，並填入外部金鑰存放區的 ID。此方法可避免您在建立 KMS 金鑰時可能發生的許多錯誤。

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

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

1. 在導覽窗格中，依次選擇 **Custom key stores** (自訂金鑰存放區)、**External key stores** (外部金鑰存放區)。

1. 選擇外部金鑰存放區的名稱。

1. 在右上角，選擇 **Create a KMS key in this key store** (在此金鑰存放區建立 KMS 金鑰)。

   如果*未*連接外部金鑰存放區，系統會提示您進行連接。如果連接嘗試失敗，則您需要先解決問題並連接外部金鑰存放區，才能在其中建立新的 KMS 金鑰。

   如果外部金鑰存放區已連接，則系統會將您重新導向至 **Customer managed keys** (客戶受管金鑰) 頁面以建立金鑰。已為您選擇所需的 **Key configuration** (金鑰組態) 值。此外，會填寫外部金鑰存放區的自訂金鑰存放區 ID，不過您可以變更它。

1. 在[外部金鑰管理器](keystore-external.md#concept-ekm)中輸入[外部金鑰](keystore-external.md#concept-external-key)的金鑰 ID。此外部金鑰必須[滿足要求](#xks-key-requirements)，才能與 KMS 金鑰搭配使用。建立金鑰之後，便無法變更此值。

   如果外部金鑰有多個 ID，請輸入外部金鑰存放區代理用來識別外部金鑰的金鑰 ID。

1. 確認您要在指定的外部金鑰存放區中建立 KMS 金鑰。

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

   此程序的其餘部分與[建立標準 KMS 金鑰](create-keys.md)相同。

1. 輸入 KMS 金鑰的別名 (必需) 和描述 (選用)。

1. (選用)。在 **Add Tags** (新增標籤) 頁面，新增標籤來識別或分類 KMS 金鑰。

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

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

1. 在 **Key Administrators** (金鑰管理員) 區段中，選取可管理 KMS 金鑰的 IAM 使用者和角色。如需詳細資訊，請參閱[允許金鑰管理員來管理 KMS 金鑰](key-policy-default.md#key-policy-default-allow-administrators)。
**注意**  
IAM 政策可授權其他 IAM 使用者和角色來使用 KMS 金鑰。  
IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

1. (選用) 若要防止這些金鑰管理員刪除此 KMS 金鑰，請清除 **Allow key administrators to delete this key** (允許金鑰管理員刪除此金鑰) 核取方塊。

   刪除 KMS 金鑰是一種破壞性和不可復原的操作，可可能導致密文無法復原。即使您擁有外部金鑰材料，也無法在外部金鑰存放區中重新建立對稱 KMS 金鑰。不過，刪除 KMS 金鑰不會影響其相關聯的外部金鑰。如需有關從外部金鑰存放區刪除 KMS 金鑰的資訊，請參閱[刪除金鑰的特殊考量](deleting-keys.md#special-considerations-delete)。

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

1. 在此**帳戶**區段中，選取可在[密碼編譯操作](kms-cryptography.md#cryptographic-operations)中使用 KMS 金鑰的 IAM AWS 帳戶 使用者和角色。如需詳細資訊，請參閱[允許金鑰使用者使用 KMS 金鑰](key-policy-default.md#key-policy-default-allow-users)。
**注意**  
IAM 政策可授權其他 IAM 使用者和角色來使用 KMS 金鑰。  
IAM 最佳實務不建議使用具有長期憑證的 IAM 使用者。盡可能使用提供臨時憑證的 IAM 角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的 [IAM 中的安全性最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。

1. （選用） 您可以允許其他 AWS 帳戶 使用此 KMS 金鑰進行密碼編譯操作。若要這樣做，請在頁面底部的**其他 AWS 帳戶**區段中，選擇**新增另一個 AWS 帳戶**並輸入外部帳戶的 AWS 帳戶 ID。若要新增多個外部帳戶，請重複此步驟。
**注意**  
其他 的管理員 AWS 帳戶 也必須透過為其使用者建立 IAM 政策來允許存取 KMS 金鑰。如需詳細資訊，請參閱[允許其他帳戶中的使用者使用 KMS 金鑰](key-policy-modifying-external-accounts.md)。

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

1. 檢閱您選擇的金鑰設定。您仍然可以返回並變更所有設定。

1. 完成時，請選擇 **Finish** (完成) 以建立金鑰。

**方法 2：在客戶受管金鑰中開始**

此程序與使用金鑰材料建立對稱加密 AWS KMS 金鑰的程序相同。但是，在此程序中，您可指定外部金鑰存放區的自訂金鑰存放區 ID 和外部金鑰的金鑰 ID。您也必須為外部金鑰存放區中的 KMS 金鑰指定[必要的屬性值](#xks-key-requirements)，例如金鑰規格和金鑰用途。

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. 選擇 **Symmetric (對稱)**。

1. 在 **Key usage** (金鑰用途) 欄位中，系統會自動選取 **Encrypt and decrypt** (加密和解密) 選項。請勿變更該欄位。

1. 選擇 **Advanced options (進階選項)**。

1. 對於 **Key material origin** (金鑰材料來源)，選擇 **External key store** (外部金鑰存放區)。

1. 確認您要在指定的外部金鑰存放區中建立 KMS 金鑰。

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

1. 選擇代表新 KMS 金鑰的外部金鑰存放區的資料列。

   您無法選擇已中斷連接的外部金鑰存放區。若要連接已中斷連接的金鑰存放區，請選擇金鑰存放區名稱，然後在 **Key store actions** (金鑰存放區動作) 中選擇 **Connect** (連接)。如需詳細資訊，請參閱[使用 AWS KMS 主控台](about-xks-connecting.md#connect-xks-console)。

1. 在[外部金鑰管理器](keystore-external.md#concept-ekm)中輸入[外部金鑰](keystore-external.md#concept-external-key)的金鑰 ID。此外部金鑰必須[滿足要求](#xks-key-requirements)，才能與 KMS 金鑰搭配使用。建立金鑰之後，便無法變更此值。

   如果外部金鑰有多個 ID，請輸入外部金鑰存放區代理用來識別外部金鑰的金鑰 ID。

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

   此程序的其餘部分與[建立標準 KMS 金鑰](create-keys.md)相同。

1. 輸入 KMS 金鑰的別名和選用描述。

1. (選用)。在 **Add Tags** (新增標籤) 頁面，新增標籤來識別或分類 KMS 金鑰。

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

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

1. 在 **Key Administrators** (金鑰管理員) 區段中，選取可管理 KMS 金鑰的 IAM 使用者和角色。如需詳細資訊，請參閱[允許金鑰管理員來管理 KMS 金鑰](key-policy-default.md#key-policy-default-allow-administrators)。
**注意**  
IAM 政策可授權其他 IAM 使用者和角色來使用 KMS 金鑰。

1. (選用) 若要防止這些金鑰管理員刪除此 KMS 金鑰，請清除 **Allow key administrators to delete this key** (允許金鑰管理員刪除此金鑰) 核取方塊。

   刪除 KMS 金鑰是一種破壞性和不可復原的操作，可可能導致密文無法復原。即使您擁有外部金鑰材料，也無法在外部金鑰存放區中重新建立對稱 KMS 金鑰。不過，刪除 KMS 金鑰不會影響其相關聯的外部金鑰。如需從外部金鑰存放區刪除 KMS 金鑰的相關資訊，請參閱 [刪除 AWS KMS key](deleting-keys.md)。

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

1. 在此**帳戶**區段中，選取可在[密碼編譯操作](kms-cryptography.md#cryptographic-operations)中使用 KMS 金鑰的 IAM AWS 帳戶 使用者和角色。如需詳細資訊，請參閱[允許金鑰使用者使用 KMS 金鑰](key-policy-default.md#key-policy-default-allow-users)。
**注意**  
IAM 政策可授權其他 IAM 使用者和角色來使用 KMS 金鑰。

1. （選用） 您可以允許其他 AWS 帳戶 使用此 KMS 金鑰進行密碼編譯操作。若要這樣做，請在頁面底部的**其他 AWS 帳戶**區段中，選擇**新增另一個 AWS 帳戶**，然後輸入外部帳戶的 AWS 帳戶 ID。若要新增多個外部帳戶，請重複此步驟。
**注意**  
其他 的管理員 AWS 帳戶 也必須透過為其使用者建立 IAM 政策來允許存取 KMS 金鑰。如需詳細資訊，請參閱[允許其他帳戶中的使用者使用 KMS 金鑰](key-policy-modifying-external-accounts.md)。

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

1. 檢閱您選擇的金鑰設定。您仍然可以返回並變更所有設定。

1. 完成時，請選擇 **Finish** (完成) 以建立金鑰。

當處理程序成功時，畫面會在您選擇的外部金鑰存放區中顯示新的 KMS 金鑰。當您選擇新 KMS 金鑰的名稱或別名時，其詳細資訊頁面上的 **Cryptographic configuration** (密碼編譯組態) 標籤會顯示 KMS 金鑰的來源 (**External key store (外部金鑰存放區)**)、名稱、ID、自訂金鑰存放區類型，以及外部金鑰的 ID、金鑰用途和狀態。如果程序失敗，則會出現錯誤訊息來描述失敗。若為 ，請參閱 [外部金鑰存放區故障診斷](xks-troubleshooting.md)。

**提示**  
為了更輕鬆識別自訂金鑰存放區中的 KMS 金鑰，請在 **Customer managed keys** (客戶受管金鑰) 頁面上，新增要顯示的 **Origin** (來源) 和 **Custom key store ID** (自訂金鑰存放區 ID) 資料欄。若要變更資料表欄位，請選擇頁面右上角的齒輪圖示。如需詳細資訊，請參閱[自訂您的主控台檢視](viewing-console-customize.md)。

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

若要在外部金鑰存放區建立新的 KMS 金鑰，請使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作。下列是必要參數：
+ `Origin` 值必須為 `EXTERNAL_KEY_STORE`。
+ `CustomKeyStoreId` 參數可識別您的外部金鑰存放區。指定的外部金鑰存放區的 [`ConnectionState`](xks-connect-disconnect.md#xks-connection-state) 必須為 `CONNECTED`。若要尋找 `CustomKeyStoreId` 和 `ConnectionState`，請使用 `DescribeCustomKeyStores` 操作。
+ `XksKeyId` 參數可識別外部金鑰。此外部金鑰必須[滿足要求](#xks-key-requirements)，才能與 KMS 金鑰相關聯。

您也可以使用 `CreateKey` 操作的任何選用參數，例如使用 `Policy` 或 [Tags](https://docs.aws.amazon.com/kms/latest/APIReference/API_TagResource.html) (標籤) 參數。

**注意**  
請勿在 `Description` 或 `Tags` 欄位包含機密或敏感資訊。這些欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。

本節中的範例使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/)，但您可以使用任何支援的程式設計語言。

此範例命令使用 [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作以在外部金鑰存放區建立 KMS 金鑰。回應包括 KMS 金鑰的屬性、外部金鑰存放區 ID 以及外部金鑰的 ID、用途和狀態。

執行此命令之前，請將範例自訂金鑰存放區 ID 換成有效的 ID。

```
$ aws kms create-key --origin EXTERNAL_KEY_STORE --custom-key-store-id cks-1234567890abcdef0 --xks-key-id bb8562717f809024
{
  "KeyMetadata": {
    "Arn": "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab",
    "AWSAccountId": "111122223333",
    "CreationDate": "2022-12-02T07:48:55-07:00",
    "CustomerMasterKeySpec": "SYMMETRIC_DEFAULT",
    "CustomKeyStoreId": "cks-1234567890abcdef0",
    "Description": "",
    "Enabled": true,
    "EncryptionAlgorithms": [
      "SYMMETRIC_DEFAULT"
    ],
    "KeyId": "1234abcd-12ab-34cd-56ef-1234567890ab",
    "KeyManager": "CUSTOMER",
    "KeySpec": "SYMMETRIC_DEFAULT",
    "KeyState": "Enabled",
    "KeyUsage": "ENCRYPT_DECRYPT",
    "MultiRegion": false,
    "Origin": "EXTERNAL_KEY_STORE",
    "XksKeyConfiguration": {
      "Id": "bb8562717f809024"
    }
  }
}
```