

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

# 使用 AWS KMS keys
<a name="kms-keys"></a>

 AWS KMS key 是指邏輯金鑰，可能是指一或多個硬體安全模組 (HSM) 後端金鑰 (HBKs)。本主題說明如何建立 KMS 金鑰、匯入金鑰材料，以及如何啟用、停用、輪換和刪除 KMS 金鑰。

**注意**  
AWS KMS 正在將術語*客戶主金鑰 (CMK)* 取代為 *AWS KMS key*和 *KMS 金鑰*。概念並沒有變更。為了防止中斷變更， AWS KMS 正在保留此術語的一些變化。

本章討論 KMS 金鑰從建立到刪除的生命週期，如下圖所示。

![\[KMS 金鑰生命週期。\]](http://docs.aws.amazon.com/zh_tw/kms/latest/cryptographic-details/images/keystate.png)


**Topics**
+ [呼叫 CreateKey](create-key.md)
+ [匯入金鑰材料](importing-key-material.md)
+ [啟用和停用 金鑰](enable-and-disable-key.md)
+ [刪除 金鑰](key-deletion.md)
+ [輪換金鑰材料](rotate-customer-master-key.md)

# 呼叫 CreateKey
<a name="create-key"></a>

 AWS KMS key 是呼叫 [https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) API 呼叫的結果。

以下是 [`CreateKey` 請求語法](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html#API_CreateKey_RequestSyntax)的子集。

```
{
  "Description": "string",
  "KeySpec": "string",
  "KeyUsage": "string",
  "Origin": "string";
  "Policy": "string"
}
```

請求接受採用 JSON 格式的下列資料。

**Description**  
(選用) 金鑰的說明。建議您選擇描述以協助您決定金鑰是否適用於任務。

**KeySpec**  
指定要建立的 KMS 金鑰類型。預設值 SYMMETRIC\$1DEFAULT 會建立對稱加密 KMS 金鑰。此參數對於對稱加密金鑰而言為選用，而對於所有其他金鑰規格而言則為必要。

**KeyUsage**  
指定金鑰的使用。有效值為 `ENCRYPT_DECRYPT`、`SIGN_VERIFY` 或 `GENERATE_VERIFY_MAC`。預設值為 `ENCRYPT_DECRYPT`。此參數對於對稱加密金鑰而言為選用，而對於所有其他金鑰規格而言則為必要。

** Origin**  
(選用) 指定 KMS 金鑰的金鑰素材來源。預設值為 `AWS_KMS`，表示 AWS KMS 產生和管理 KMS 金鑰的金鑰材料。其他有效值包括 `EXTERNAL`，代表在沒有金鑰材料的情況下為[匯入的金鑰材料](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html)建立的 KMS `AWS_CLOUDHSM` 金鑰，並在您控制的 AWS CloudHSM 叢集支援的[自訂金鑰存放區中建立 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/custom-key-store-overview.html)。

**政策**  
(選用) 要連接到金鑰的政策。如果省略政策，則會使用預設政策 (下列) 建立金鑰，以允許擁有 AWS KMS 許可的根帳戶和 IAM 主體對其進行管理。

如需有關政策的詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的 [AWS KMS中的金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html)和[預設金鑰政策](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-default.html)。

`CreateKey` 請求傳回包含金鑰 ARN 的[回應](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html#API_CreateKey_ResponseSyntax)。

```
arn:<partition>:kms:<region>:<account-id>:key/<key-id>
```

如果 `Origin` 為 `AWS_KMS`，在建立 ARN 之後，會透過已驗證的工作階段提出對 AWS KMS HSM 的請求，以佈建硬體安全模組 (HSM) 備份金鑰 (HBK)。HBK 是 256 位元的金鑰，與 KMS 金鑰的此金鑰 ID 相關聯。它只能在 HSM 上產生，並且設計永遠不會以純文字格式匯出 HSM 邊界之外。HBK 在目前網域金鑰 DK0 下加密。這些加密的 HBK 稱為加密金鑰字符 (EKT)。雖然 HSM 可以設定為使用各種金鑰包裝方法，但目前的實作會使用在已驗證加密配置 Galois 計數器模式 (GCM) 中的 AES-256。這種已驗證的加密模式允許我們保護部分純文字匯出金鑰字符中繼資料。

這在風格上表示為：

```
EKT = Encrypt(DK0, HBK)
```

為您的 KMS 金鑰和後續 HBK 提供兩種基本保護形式：在 KMS 金鑰上設定的授權政策，以及關聯 HBK 上的密碼編譯保護。其餘章節說明密碼編譯保護和 管理函數的安全性 AWS KMS。

除了 ARN 之外，您還可以透過建立金鑰的*別名*，建立讓使用者易記的名稱並將該名稱與 KMS 金鑰建立關聯。一旦別名已與 KMS 金鑰相關聯，就可以使用別名來在加密操作中識別 KMS 金鑰。如需詳細資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[使用別名](https://docs.aws.amazon.com/kms/latest/developerguide/kms-alias.html)。

多重授權層級涵蓋 KMS 金鑰的使用。 AWS KMS 啟用加密內容和 KMS 金鑰之間的個別授權政策。例如， AWS KMS 使用信封加密的 Amazon Simple Storage Service (Amazon S3) 物件會繼承 Amazon S3 儲存貯體上的政策。不過，對必要加密金鑰的存取權取決於 KMS 金鑰的存取政策。如需 KMS 金鑰授權的資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[AWS KMS的身分驗證與存取控制](https://docs.aws.amazon.com/kms/latest/developerguide/control-access.html)。

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

AWS KMS 提供一種機制，用於匯入用於 HBK 的密碼編譯資料。如 [呼叫 CreateKey](create-key.md) 中所述，當 CreateKey 命令與設定為 `EXTERNAL` 的 `Origin` 搭配使用時，會建立不包含基礎 HBK 的邏輯 KMS 金鑰。必須使用 [https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html)API 呼叫匯入密碼編譯材料。您可以使用此功能來控制密碼編譯材料的金鑰建立和耐久性。如果您使用此功能，建議您在環境中對這些金鑰的處理和耐久性持謹慎態度。如需匯入金鑰材料的完整詳細資訊和建議，請參閱《AWS Key Management Service 開發人員指南》**中的[匯入金鑰材料](https://docs.aws.amazon.com/kms/latest/developerguide/importing-keys.html)。

## 呼叫 ImportKeyMaterial
<a name="importkeymaterial"></a>

`ImportKeyMaterial` 請求會匯入必要的 HBK 密碼編譯材料。密碼編譯材料必須是 256 位元對稱金鑰。它必須使用最近 [https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) 請求的傳回公有金鑰下 `WrappingAlgorithm` 中指定的演算法進行加密。

[`ImportKeyMaterial` 請求](https://docs.aws.amazon.com/kms/latest/APIReference/API_ImportKeyMaterial.html#API_ImportKeyMaterial_RequestSyntax)會使用以下引數。

```
{
  "EncryptedKeyMaterial": blob,
  "ExpirationModel": "string",
  "ImportToken": blob,
  "KeyId": "string",
  "ValidTo": number
}
```

**EncryptedKeyMaterial**  
使用公有金鑰加密的匯入金鑰材料會以使用該請求中指定包裝演算法的 `GetParametersForImport` 請求傳回。

**ExpirationModel**  
指定金鑰材料是否過期。當此值為 `KEY_MATERIAL_EXPIRES` 時，`ValidTo` 參數必須包含過期日期。當此值為 `KEY_MATERIAL_DOES_NOT_EXPIRE` 時，請勿包含 `ValidTo` 參數。有效值為 `"KEY_MATERIAL_EXPIRES"` 和 `"KEY_MATERIAL_DOES_NOT_EXPIRE"`。

**ImportToken**  
匯入字符會由提供公有金鑰的相同 `GetParametersForImport` 請求傳回。

**KeyId**  
將與匯入金鑰材料相關聯的 KMS 金鑰。KMS 金鑰的 `Origin` 必須是 `EXTERNAL`。  
您可以刪除和重新匯入*相同*的匯入金鑰素材至指定的 KMS 金鑰，但您無法匯入或關聯 KMS 金鑰任何其他金鑰素材。

**ValidTo**  
(選用) 匯入的金鑰材料過期的時間。當金鑰材料過期時， AWS KMS 會刪除金鑰材料，讓 KMS 金鑰變成不可用。當 `ExpirationModel` 的值為 `KEY_MATERIAL_EXPIRES` 時，此參數為必要。否則為無效。

當請求成功時，如果提供 KMS 金鑰，則可以在指定的過期日期 AWS KMS 之前使用 KMS 金鑰。匯入的金鑰材料過期後，EKT 會從 AWS KMS 儲存層中刪除。

# 啟用和停用 金鑰
<a name="enable-and-disable-key"></a>

停用 KMS 金鑰可防止金鑰在密碼編譯操作中使用。此做法會暫停使用所有與 KMS 金鑰相關聯之 HBK 的功能。啟用還原 HBK 和 KMS 金鑰的使用。[啟用](https://docs.aws.amazon.com/kms/latest/APIReference/API_Enable.html)和[停用](https://docs.aws.amazon.com/kms/latest/APIReference/API_Disable.html)屬於簡單的請求，只需要使用金鑰 ID 或 KMS 金鑰的金鑰 ARN。

# 刪除 金鑰
<a name="key-deletion"></a>

授權使用者可以使用 [https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ScheduleKeyDeletion.html) API 來安排刪除 KMS 金鑰和所有相關聯的 HBK。這是一個固有的破壞性操作，從 刪除金鑰時應小心 AWS KMS。刪除 KMS 金鑰時， AWS KMS 會強制執行最短的等待時間七天。在等待期間，金鑰會處於停用狀態，而金鑰狀態為 **Pending Deletion** (待刪除)。使用密碼編譯操作金鑰的所有呼叫都會失敗。ScheduleKeyDeletion 會使用以下引數。

```
{
  "KeyId": "string",
  "PendingWindowInDays": number
}
```

**KeyId**  
要刪除 KMS 金鑰的唯一識別符。若要指定該值，請使用唯一的金鑰 ID 或 KMS 金鑰的金鑰 ARN。

** PendingWindowInDays**  
(選用) 等候期間，以天數指定。此值是選用的。範圍為 7 至 30 天，預設值為 30 天。等待期間結束後， 會 AWS KMS 刪除 KMS 金鑰和所有相關聯的 HBKs。

# 輪換金鑰材料
<a name="rotate-customer-master-key"></a>

授權使用者可以啟用其客戶受管 KMS 金鑰的自動年度輪換。 AWS 受管金鑰 一律每年輪換一次。

輪換 KMS 金鑰時，會建立新的 HBK，並標示為所有新加密請求的金鑰素材之目前版本。所有舊版的 HBK 仍然可以使用，以解密使用此 HBK 版本加密的任何密文。由於 AWS KMS 不會存放在 KMS 金鑰下加密的任何加密文字，因此在較舊的輪換 HBK 下加密的加密文字需要 HBK 解密。您可以使用 [https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) API 以在 KMS 金鑰的新 HBK 下或在不會公開純文字的其他 KMS 金鑰下重新加密任何密文。

如需啟用和停用金鑰輪換的資訊，請參閱《*AWS Key Management Service 開發人員指南*》中的[輪換 AWS KMS key](https://docs.aws.amazon.com/kms/latest/developerguide/rotate-keys.html)。