

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

# 對自訂金鑰存放區進行故障診斷
<a name="fix-keystore"></a>

AWS CloudHSM 金鑰存放區旨在提供可用性和彈性。不過，您可能需要修復一些錯誤條件，才能維持 AWS CloudHSM 金鑰存放區的運作。

**Topics**
+ [如何修正無法使用的 KMS 金鑰](#fix-unavailable-cmks)
+ [如何修正失效的 KMS 金鑰](#fix-cmk-failed)
+ [如何修正連線失敗](#fix-keystore-failed)
+ [如何回應密碼編譯操作失敗](#fix-keystore-communication)
+ [如何修正無效的 `kmsuser` 登入資料](#fix-keystore-password)
+ [如何刪除遺棄的金鑰材料](#fix-keystore-orphaned-key)
+ [如何復原 KMS 金鑰已刪除的金鑰材料](#fix-keystore-recover-backing-key)
+ [如何以 `kmsuser` 身分登入](#fix-login-as-kmsuser)

## 如何修正無法使用的 KMS 金鑰
<a name="fix-unavailable-cmks"></a>

金鑰存放區 AWS KMS keys 中 [的金鑰狀態](key-state.md)通常是 `Enabled`。 AWS CloudHSM 如同所有 KMS 金鑰，當您停用金鑰存放區中的 KMS 金鑰或排定刪除金鑰時， AWS CloudHSM 金鑰狀態會變更。不過，與其他 KMS 金鑰不同，自訂金鑰存放區中的 KMS 金鑰也可以有 `Unavailable` 的[金鑰狀態](key-state.md)。

`Unavailable` 的金鑰狀態表示自訂金鑰存放區中的 KMS 金鑰是特意[中斷連接](disconnect-keystore.md)，並且會在失敗時 (如果有) 嘗試重新連接。當 KMS 金鑰無法使用時，您可以檢視和管理 KMS 金鑰，但無法將它用於[密碼編譯操作](manage-cmk-keystore.md#use-cmk-keystore)。

若要尋找 KMS 金鑰的金鑰狀態，請在 **Customer managed keys** (客戶受管金鑰) 頁面上，檢視 KMS 金鑰的 **Status** (狀態) 欄位。或使用 [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) 操作並檢視回應中的 `KeyState` 元素。如需詳細資訊，請參閱[識別和檢視金鑰](viewing-keys.md)。

中斷連線的自訂金鑰存放區中的 KMS 金鑰會有 `Unavailable` 或 `PendingDeletion` 的金鑰狀態。排程要從自訂金鑰存放區刪除的 KMS 金鑰會有 `Pending Deletion` 金鑰狀態，即使自訂金鑰存放區中斷連接時亦然。這可讓您取消排程的金鑰刪除，而無需重新連接自訂金鑰存放區。

若要修正無法使用的 KMS 金鑰，請[重新連線自訂金鑰存放區](disconnect-keystore.md)。自訂金鑰存放區重新連接之後，自訂金鑰存放區中 KMS 金鑰的金鑰狀態會自動還原到其先前的狀態，例如 `Enabled` 或 `Disabled`。等待刪除的 KMS 金鑰會保持在 `PendingDeletion` 狀態。不過，當問題存在時，[啟用和停用無法使用的 KMS 金鑰](enabling-keys.md)不會變更它的金鑰狀態。啟用或停用動作僅在金鑰可供使用時生效。

如需失敗的連接的協助，請參閱[如何修正連線失敗](#fix-keystore-failed)。

## 如何修正失效的 KMS 金鑰
<a name="fix-cmk-failed"></a>

在 AWS CloudHSM 金鑰存放區中建立和使用 KMS 金鑰的問題可能是由 AWS CloudHSM 金鑰存放區、其關聯的 AWS CloudHSM 叢集、KMS 金鑰或其金鑰材料的問題所造成。

當 AWS CloudHSM 金鑰存放區與其 AWS CloudHSM 叢集中斷連線時，自訂金鑰存放區中 KMS 金鑰的金鑰狀態為 `Unavailable`。在中斷連線的金鑰存放區中建立 KMS AWS CloudHSM 金鑰的所有請求都會傳回`CustomKeyStoreInvalidStateException`例外狀況。加密、解密、重新加密或產生資料金鑰的所有請求會傳回 `KMSInvalidStateException` 例外狀況。若要修正此問題，[請重新連接 AWS CloudHSM 金鑰存放區](connect-keystore.md)。

不過，即使 AWS CloudHSM 金鑰狀態為 `Enabled`且金鑰存放區的連線狀態為 ，您嘗試在金鑰存放區中使用 KMS AWS CloudHSM 金鑰進行[密碼編譯操作](manage-cmk-keystore.md#use-cmk-keystore)仍可能會失敗`Connected`。這可能是因為以下任何情況所造成。
+ 可能已從相關聯的 AWS CloudHSM 叢集刪除 KMS 金鑰的金鑰材料。若要調查，[請尋找 KMS 金鑰之金鑰材料的金鑰 ID](find-handle-for-cmk-id.md)，並視需要嘗試[復原金鑰材料](#fix-keystore-recover-backing-key)。
+ 所有 HSMs都已從與 AWS CloudHSM 金鑰存放區相關聯的 AWS CloudHSM 叢集中刪除。若要在密碼編譯操作的 AWS CloudHSM 金鑰存放區中使用 KMS 金鑰，其 AWS CloudHSM 叢集必須至少包含一個作用中的 HSM。若要驗證 AWS CloudHSM 叢集中 HSMs的數量和狀態，[請使用 AWS CloudHSM 主控台](https://docs.aws.amazon.com/cloudhsm/latest/userguide/add-remove-hsm.html)或 [DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html) 操作。若要將 HSM 新增至叢集，請使用 AWS CloudHSM 主控台或 [CreateHsm](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_CreateHsm.html) 操作。
+ 已刪除與 AWS CloudHSM 金鑰存放區相關聯的 AWS CloudHSM 叢集。若要修正此問題，請從與原始叢集相關的備份 (例如，原始叢集的備份，或用於建立原始叢集的備份) [建立叢集](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html)。然後在自訂金鑰存放區設定中[編輯叢集 ID](update-keystore.md)。如需說明，請參閱[如何復原 KMS 金鑰已刪除的金鑰材料](#fix-keystore-recover-backing-key)。
+ 與自訂金鑰存放區相關聯的 AWS CloudHSM 叢集沒有任何可用的 PKCS \$111 工作階段。這通常發生在高爆量流量期間，此時需要額外的工作階段來服務流量。若要回應帶有關於 PKCS \$111 工作階段錯誤訊息的 `KMSInternalException`，請退回並重試請求。

## 如何修正連線失敗
<a name="fix-keystore-failed"></a>

如果您嘗試[將 AWS CloudHSM 金鑰存放區](connect-keystore.md)連接至其 AWS CloudHSM 叢集，但 操作失敗，則 AWS CloudHSM 金鑰存放區的連線狀態會變更為 `FAILED`。若要尋找 AWS CloudHSM 金鑰存放區的連線狀態，請使用 AWS KMS 主控台或 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作。

或者，由於很容易偵測到叢集組態錯誤，一些連接嘗試會很快失敗。在這種情況下，連接狀態仍然是 `DISCONNECTED`。這些失敗會傳回錯誤訊息或 [例外狀況](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html#API_ConnectCustomKeyStore_Errors)來說明嘗試失敗的原因。檢閱例外狀況描述和[叢集需求](create-keystore.md#before-keystore)、修正問題、視需要[更新 AWS CloudHSM 金鑰存放區](update-keystore.md)，然後再次嘗試連線。

當連接狀態為 `FAILED` 時，請執行 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作，並查看回應中的 `ConnectionErrorCode` 元素。

**注意**  
當 AWS CloudHSM 金鑰存放區的連線狀態為 時`FAILED`，您必須先[中斷連接 AWS CloudHSM 金鑰存放區，](disconnect-keystore.md)然後再嘗試重新連線。您無法以連線狀態`FAILED`連接 AWS CloudHSM 金鑰存放區。
+ `CLUSTER_NOT_FOUND` 表示 AWS KMS 找不到具有指定 AWS CloudHSM 叢集 ID 的叢集。發生此情況可能是因為提供給 API 操作的是錯誤的叢集 ID 或是已刪除叢集而無法取代。若要修正此錯誤，請驗證叢集 ID，例如使用 AWS CloudHSM 主控台或 [DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html) 操作。如果已刪除叢集，請從原始叢集的[最近備份建立叢集](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html)。然後，[中斷連接 AWS CloudHSM 金鑰存放](disconnect-keystore.md)區、[編輯 AWS CloudHSM 金鑰存放](update-keystore.md)區叢集 ID 設定，然後將[AWS CloudHSM 金鑰存放區重新](connect-keystore.md)連線至叢集。
+ `INSUFFICIENT_CLOUDHSM_HSMS` 表示相關聯的 AWS CloudHSM 叢集不包含任何 HSMs。若要連接，叢集必須至少有一個 HSM。若要尋找叢集中的 HSM 數量，請使用 [DescribeClusters](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeClusters.html) 操作。若要解決此錯誤，請[新增至少一個 HSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-hsm.html) 到叢集。如果您新增多個 HSM，最好在不同的可用區域建立它們。
+ `INSUFFICIENT_FREE_ADDRESSES_IN_SUBNET` 表示 AWS KMS 無法將 AWS CloudHSM 金鑰存放區連接至其 AWS CloudHSM 叢集，因為至少一個[與叢集相關聯的私有子網路](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-subnets.html)沒有任何可用的 IP 地址。 AWS CloudHSM 金鑰存放區連線在每個相關聯的私有子網路中需要一個可用的 IP 地址，但最好有兩個。

  您[無法新增 IP 地址](https://aws.amazon.com/premiumsupport/knowledge-center/vpc-ip-address-range/) (CIDR 區塊) 至現有的子網路。如果可能，請移動或刪除子網路中使用 IP 地址的其他資源，例如未使用的 EC2 執行個體或彈性網路介面。否則，您可以從[最近備份的叢集建立叢集](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html)，該 AWS CloudHSM 叢集具有新的或現有的私有子網路，這些子網路具有[更多可用的地址空間](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html#subnet-sizing)。然後，若要將新叢集與您的 AWS CloudHSM 金鑰存放區建立關聯，[請中斷連接自訂金鑰存放區](disconnect-keystore.md)，[將金鑰存放區的叢集 ID 變更為](update-keystore.md)新叢集的 ID，然後再次嘗試連線。 AWS CloudHSM 
**提示**  
若要避免[重設密碼`kmsuser`](#fix-keystore-password)，請使用 AWS CloudHSM 叢集的最新備份。
+ `INTERNAL_ERROR` 表示 AWS KMS 因內部錯誤而無法完成請求。重試 請求。對於`ConnectCustomKeyStore`請求，請先中斷連接 AWS CloudHSM 金鑰存放區，然後再嘗試再次連線。
+ `INVALID_CREDENTIALS` 表示 AWS KMS 無法登入相關聯的 AWS CloudHSM 叢集，因為它沒有正確的`kmsuser`帳戶密碼。如需此錯誤的協助，請參閱[如何修正無效的 `kmsuser` 登入資料](#fix-keystore-password)。
+ `NETWORK_ERRORS` 通常指出暫時性的網路問題。[中斷連接 AWS CloudHSM 金鑰存放區](disconnect-keystore.md)，等待幾分鐘，然後再次嘗試連線。
+ `SUBNET_NOT_FOUND` 表示 AWS CloudHSM 叢集組態中至少有一個子網路已刪除。如果 AWS KMS 找不到叢集組態中的所有子網路， 會嘗試將 AWS CloudHSM 金鑰存放區連線至 AWS CloudHSM 叢集失敗。

  若要修正此錯誤，[請從相同叢集的最近備份建立](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html) AWS CloudHSM 叢集。(此程序會建立具有 VPC 和私有子網路的新叢集組態)。請確認新叢集符合[自訂金鑰存放區的需求](create-keystore.md#before-keystore)，並記下新的叢集 ID。然後，若要將新叢集與您的 AWS CloudHSM 金鑰存放區建立關聯，[請中斷連接自訂金鑰存放區](disconnect-keystore.md)，將 AWS CloudHSM 金鑰存放區的[叢集 ID 變更為](update-keystore.md)新叢集的 ID，然後再次嘗試連線。
**提示**  
若要避免[重設密碼`kmsuser`](#fix-keystore-password)，請使用 AWS CloudHSM 叢集的最新備份。
+ `USER_LOCKED_OUT` 指出 [`kmsuser` 加密使用者 (CU) 帳戶](keystore-cloudhsm.md#concept-kmsuser)因為有太多失敗的密碼嘗試，已鎖定在相關聯的 AWS CloudHSM 叢集之外。如需此錯誤的協助，請參閱[如何修正無效的 `kmsuser` 登入資料](#fix-keystore-password)。

  若要修正此錯誤，[請中斷連接 AWS CloudHSM 金鑰存放區](disconnect-keystore.md)，並使用 CloudHSM CLI 中的[https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html) 命令來變更`kmsuser`帳戶密碼。然後編輯自訂金鑰存放區的[`kmsuser` 密碼設定](update-keystore.md)，並嘗試重新連接。如需協助，請使用[如何修正無效的 `kmsuser` 登入資料](#fix-keystore-password)主題中描述的程序。
+ `USER_LOGGED_IN` 表示 CU `kmsuser` 帳戶已登入相關聯的 AWS CloudHSM 叢集。這 AWS KMS 可防止 輪換`kmsuser`帳戶密碼和登入叢集。若要修正這個錯誤，請將 `kmsuser` CU 登出叢集。如果您變更`kmsuser`密碼以登入叢集，也必須更新金鑰存放區的 AWS CloudHSM 金鑰存放區密碼值。如需協助，請參閱 [如何登出和重新連線](#login-kmsuser-2)。
+ `USER_NOT_FOUND` 表示 在關聯的 AWS CloudHSM 叢集中 AWS KMS 找不到 `kmsuser` CU 帳戶。若要修正此錯誤，請在叢集中[建立 `kmsuser` CU 帳戶](create-keystore.md#kmsuser-concept)，然後[更新金鑰存放區的金鑰存放區密碼值](update-keystore.md)。 AWS CloudHSM 如需協助，請參閱 [如何修正無效的 `kmsuser` 登入資料](#fix-keystore-password)。

## 如何回應密碼編譯操作失敗
<a name="fix-keystore-communication"></a>

在自訂金鑰存放區採用 KMS 金鑰的密碼編譯操作可能失敗，並顯示 `KMSInvalidStateException`。下列錯誤訊息可能會伴隨 `KMSInvalidStateException`。


|  | 
| --- |
| KMS 無法與 CloudHSM 叢集通訊。這可能是暫時性的網路問題。如果您重複看到此錯誤，請確認 AWS CloudHSM 叢集 VPC 的網路 ACLs 和安全群組規則正確無誤。 | 
+ 雖然這是 HTTPS 400 錯誤，但可能是因為暫時性網路問題所造成的。若要回應，請先重試請求。不過，如果繼續失敗，請檢查聯網元件的組態。此錯誤很可能是因為聯網元件設定錯誤所造成，例如防火牆規則或 VPC 安全群組規則封鎖傳出流量。例如，KMS 無法透過 IPv6 與 AWS CloudHSM 叢集通訊。如需先決條件的詳細資訊，請參閱 [建立 AWS CloudHSM 金鑰存放區](create-keystore.md)。


|  | 
| --- |
| KMS 無法與您的 AWS CloudHSM 叢集通訊，因為 kmsuser 已鎖定。如果您重複看到此錯誤，請中斷連接 AWS CloudHSM 金鑰存放區並重設 kmsuser 帳戶密碼。更新自訂金鑰存放區的 kmsuser 密碼並重試請求。 | 
+ 此錯誤訊息指出 [`kmsuser`加密使用者 (CU) 帳戶](keystore-cloudhsm.md#concept-kmsuser)因密碼嘗試多次失敗，已鎖定在關聯的 AWS CloudHSM 叢集之外。如需此錯誤的協助，請參閱[如何中斷連線和登入](#login-kmsuser-1)。

## 如何修正無效的 `kmsuser` 登入資料
<a name="fix-keystore-password"></a>

當您[連接 AWS CloudHSM 金鑰存放區](connect-keystore.md)時， 會以[`kmsuser`加密使用者](keystore-cloudhsm.md#concept-kmsuser) (CU) 身分 AWS KMS 登入相關聯的 AWS CloudHSM 叢集。它會保持登入狀態，直到 AWS CloudHSM 金鑰存放區中斷連線為止。[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 回應顯示 `FAILED` 的 `ConnectionState` 和 `INVALID_CREDENTIALS` 的 `ConnectionErrorCode` 值，如以下範例所示。

如果您中斷連接 AWS CloudHSM 金鑰存放區並變更`kmsuser`密碼， AWS KMS 無法使用 CU `kmsuser` 帳戶的登入資料登入 AWS CloudHSM 叢集。因此，所有連線 AWS CloudHSM 金鑰存放區的嘗試都會失敗。`DescribeCustomKeyStores` 回應顯示 `FAILED` 的 `ConnectionState` 和 `INVALID_CREDENTIALS` 的 `ConnectionErrorCode` 值，如以下範例所示。

```
$ aws kms describe-custom-key-stores --custom-key-store-name ExampleKeyStore
{
   "CustomKeyStores": [
      "CloudHsmClusterId": "cluster-1a23b4cdefg",
      "ConnectionErrorCode": "INVALID_CREDENTIALS"
      "CustomKeyStoreId": "cks-1234567890abcdef0",
      "CustomKeyStoreName": "ExampleKeyStore",
      "TrustAnchorCertificate": "<certificate string appears here>",
      "CreationDate": "1.499288695918E9",
      "ConnectionState": "FAILED"
   ],
}
```

此外，在以不正確的密碼嘗試登入叢集失敗五次之後， AWS CloudHSM 會鎖定該使用者帳戶。若要登入叢集，您必須變更帳戶的密碼。

如果 嘗試以 CU `kmsuser` 身分登入叢集時 AWS KMS 取得鎖定回應，連線 AWS CloudHSM 金鑰存放區的請求會失敗。[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 回應包含 `FAILED` 的 `ConnectionState` 和 `USER_LOCKED_OUT` 的 `ConnectionErrorCode` 值，如以下範例所示。

```
$ aws kms describe-custom-key-stores --custom-key-store-name ExampleKeyStore
{
   "CustomKeyStores": [
      "CloudHsmClusterId": "cluster-1a23b4cdefg",
      "ConnectionErrorCode": "USER_LOCKED_OUT"
      "CustomKeyStoreId": "cks-1234567890abcdef0",
      "CustomKeyStoreName": "ExampleKeyStore",
      "TrustAnchorCertificate": "<certificate string appears here>",
      "CreationDate": "1.499288695918E9",
      "ConnectionState": "FAILED"
   ],
}
```

若要修正任一個情況，請使用下列程序。

1. [中斷連接 AWS CloudHSM 金鑰存放區](disconnect-keystore.md)。

1. 執行 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作，並檢視回應中 `ConnectionErrorCode` 元素的值。
   + 如果 `ConnectionErrorCode` 值為 `INVALID_CREDENTIALS`，請判斷 `kmsuser` 帳戶目前的密碼。如有必要，請使用 CloudHSM CLI 中的[https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html) 命令，將密碼設定為已知值。
   + 如果`ConnectionErrorCode`值為 `USER_LOCKED_OUT`，您必須使用 CloudHSM CLI 中的[https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html) 命令來變更`kmsuser`密碼。

1. [編輯 `kmsuser` 密碼設定](update-keystore.md)，讓它符合叢集中目前的 `kmsuser` 密碼。此動作可告知 AWS KMS 要使用哪個密碼來登入叢集。它不會變更叢集中的 `kmsuser` 密碼。

1. [連接自訂金鑰存放區](connect-keystore.md)。

## 如何刪除遺棄的金鑰材料
<a name="fix-keystore-orphaned-key"></a>

排程從金鑰存放區刪除 KMS AWS CloudHSM 金鑰之後，您可能需要從相關聯的 AWS CloudHSM 叢集手動刪除對應的金鑰材料。

當您在 AWS CloudHSM 金鑰存放區中建立 KMS 金鑰時， 會在 中 AWS KMS 建立 KMS 金鑰中繼資料， AWS KMS 並在相關聯的 AWS CloudHSM 叢集中產生金鑰材料。當您排程刪除 AWS CloudHSM 金鑰存放區中的 KMS 金鑰時，在等待期間之後， 會 AWS KMS 刪除 KMS 金鑰中繼資料。然後， AWS KMS 會盡最大努力從 AWS CloudHSM 叢集中刪除對應的金鑰材料。如果 AWS KMS 無法存取叢集，則嘗試可能會失敗，例如當它與 AWS CloudHSM 金鑰存放區中斷連線或`kmsuser`密碼變更時。 AWS KMS 不會嘗試從叢集備份中刪除金鑰材料。

AWS KMS 會在 AWS CloudTrail 日誌`DeleteKey`的事件項目中報告嘗試從叢集刪除金鑰材料的結果。它會出現在 `additionalEventData` 元素的 `backingKeysDeletionStatus` 元素中，如以下範例項目所示。項目也包含 KMS 金鑰 ARN、 AWS CloudHSM 叢集 ID 和金鑰材料的 ID (`backing-key-id`)。

```
{
    "eventVersion": "1.08",
    "userIdentity": {
        "accountId": "111122223333",
        "invokedBy": "AWS Internal"
    },
    "eventTime": "2021-12-10T14:23:51Z",
    "eventSource": "kms.amazonaws.com",
    "eventName": "DeleteKey",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "AWS Internal",
    "userAgent": "AWS Internal",
    "requestParameters": null,
    "responseElements":  {
        "keyId":"arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    },
    "additionalEventData": {
        "customKeyStoreId": "cks-1234567890abcdef0",
        "clusterId": "cluster-1a23b4cdefg",
        "backingKeys": "[{\"backingKeyId\":\"backing-key-id\"}]",
        "backingKeysDeletionStatus": "[{\"backingKeyId\":\"backing-key-id\",\"deletionStatus\":\"FAILURE\"}]"
    },
    "eventID": "c21f1f47-f52b-4ffe-bff0-6d994403cf40",
    "readOnly": false,
    "resources": [
        {
            "accountId": "111122223333",
            "type": "AWS::KMS::Key",
            "ARN": "arn:aws:kms:eu-west-1:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
        }
    ],
    "eventType": "AwsServiceEvent",
    "recipientAccountId": "111122223333",
    "managementEvent": true,
    "eventCategory": "Management"
}
```

**備註**  
下列程序使用 AWS CloudHSM 用戶端 SDK 5 命令列工具 [CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli.html)。CloudHSM CLI `key-handle`會取代為 `key-reference`。  
2025 年 1 月 1 日， AWS CloudHSM 將結束對用戶端 SDK 3 命令列工具、CloudHSM 管理公用程式 (CMU) 和金鑰管理公用程式 (KMU) 的支援。如需用戶端 SDK 3 命令列工具和用戶端 SDK 5 命令列工具之間差異的詳細資訊，請參閱*AWS CloudHSM 《 使用者指南*》中的[從用戶端 SDK 3 CMU 和 KMU 遷移至用戶端 SDK 5 CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-migrate-from-kmu-cmu.html)。

下列程序示範如何從相關聯的 AWS CloudHSM 叢集刪除孤立的金鑰材料。

1. 如果 AWS CloudHSM 金鑰存放區尚未中斷連線，請中斷連線，然後[https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-login.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-login.html)，如中所述[如何中斷連線和登入](#login-kmsuser-1)。
**注意**  
當自訂金鑰存放區中斷連接時，所有在自訂金鑰存放區中建立 KMS 金鑰的嘗試，或在密碼編譯操作中使用現有 KMS 金鑰的嘗試，均會失敗。此動作可防止使用者存放和存取敏感資料。

1. 使用 CloudHSM CLI 中的[金鑰刪除](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-key-delete.html)命令，從叢集中的 HSMs刪除金鑰。

    AWS CloudHSM 金鑰存放區中具有 KMS 金鑰之密碼編譯操作的所有 CloudTrail 日誌項目都包含具有 `customKeyStoreId`和 `additionalEventData`的欄位`backingKey`。`backingKeyId` 欄位中傳回的值是 CloudHSM 金鑰`id`屬性。建議您透過 篩選**金鑰刪除**操作`id`，以刪除您在 CloudTrail 日誌中識別的孤立金鑰材料。

   AWS CloudHSM 會將`backingKeyId`值識別為十六進位值。若要依 篩選`id`，您必須在 前面`backingKeyId`加上 `Ox`。例如，如果 CloudTrail 日誌`backingKeyId`中的 是 `1a2b3c45678abcdef`，您會依 篩選`0x1a2b3c45678abcdef`。

   下列範例會從叢集中的 HSMs刪除金鑰。`backing-key-id` 會列在 CloudTrail 日誌項目中。執行此命令之前，請將範例取代`backing-key-id`為您的帳戶中有效的範例。

   ```
   aws-cloudhsm key delete --filter attr.id="0x<backing-key-id>"
   {
     "error_code": 0,
     "data": {
       "message": "Key deleted successfully"
     }
   }
   ```

1. 如中所述登出並重新連接 AWS CloudHSM 金鑰存放區[如何登出和重新連線](#login-kmsuser-2)。

## 如何復原 KMS 金鑰已刪除的金鑰材料
<a name="fix-keystore-recover-backing-key"></a>

如果刪除 AWS KMS key 的金鑰材料，則 KMS 金鑰無法使用，而且無法在 KMS 金鑰下加密的所有加密文字都無法解密。如果從關聯的 AWS CloudHSM 叢集中刪除金鑰存放區中 KMS 金鑰的 AWS CloudHSM 金鑰材料，就會發生這種情況。不過，復原金鑰材料可能可行。

當您在 AWS CloudHSM 金鑰存放區中建立 AWS KMS key (KMS 金鑰） 時， 會 AWS KMS 登入相關聯的 AWS CloudHSM 叢集，並建立 KMS 金鑰的金鑰材料。它也會將密碼變更為只有它知道的值，只要 AWS CloudHSM 金鑰存放區已連線，就會保持登入狀態。由於只有金鑰擁有者 (也就是建立金鑰的 CU) 可以刪除金鑰，幾乎不可能會從 HSM 中不慎刪除金鑰。

不過，如果某個 KMS 金鑰的金鑰材料已從叢集中的 HSM 刪除，KMS 金鑰之金鑰狀態最終會變更為 `UNAVAILABLE`。如果您嘗試將該 KMS 金鑰用於密碼編譯操作，則該操作會失敗，出現 `KMSInvalidStateException` 例外狀況。最重要的是，使用該 KMS 金鑰加密的任何資料會無法解密。

在某些情況下，您可以透過[從包含金鑰材料的備份建立叢集](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html)來復原已刪除的金鑰材料。此策略僅在當該金鑰存在時並且在刪除它之前建立了至少一個備份的情況下才有用。

使用以下程序來復原金鑰材料。

1. 尋找包含金鑰材料的叢集備份。該備份也必須包含您需要支援叢集及其加密資料的所有使用者和金鑰。

   使用 [DescribeBackups](https://docs.aws.amazon.com/cloudhsm/latest/APIReference/API_DescribeBackups.html) 操作來列出叢集的備份。然後使用備份時間戳記來協助您選取備份。若要限制與 AWS CloudHSM 金鑰存放區相關聯的叢集輸出，請使用 `Filters` 參數，如下列範例所示。

   ```
   $ aws cloudhsmv2 describe-backups --filters clusterIds=<cluster ID>
   {
       "Backups": [
           {
               "ClusterId": "cluster-1a23b4cdefg",
               "BackupId": "backup-9g87f6edcba",
               "CreateTimestamp": 1536667238.328,
               "BackupState": "READY"
           },
                ...
       ]
   }
   ```

1. [從選取的備份建立叢集](https://docs.aws.amazon.com/cloudhsm/latest/userguide/create-cluster-from-backup.html)。驗證備份包含已刪除的金鑰和叢集所需的其他使用者和金鑰。

1. [中斷連接 AWS CloudHSM 金鑰存放區](disconnect-keystore.md)，以便編輯其屬性。

1. [編輯金鑰存放區的叢集 ID](update-keystore.md)。 AWS CloudHSM 輸入您從備份建立之叢集的叢集 ID。由於該叢集與原始叢集共用備份歷史記錄，新叢集 ID 應該是有效的。

1. [重新連接 AWS CloudHSM 金鑰存放區](connect-keystore.md)。

## 如何以 `kmsuser` 身分登入
<a name="fix-login-as-kmsuser"></a>

若要為您的金鑰存放區在 AWS CloudHSM 叢集中建立和管理 AWS CloudHSM 金鑰材料， AWS KMS 會使用[`kmsuser`加密使用者 (CU) 帳戶](keystore-cloudhsm.md#concept-kmsuser)。您可以在叢集中[建立 `kmsuser` CU 帳戶](create-keystore.md#before-keystore)，並在建立 AWS CloudHSM 金鑰存放區 AWS KMS 時提供其密碼給 。

一般而言， 會 AWS KMS 管理`kmsuser`帳戶。不過，對於某些任務，您需要中斷連接 AWS CloudHSM 金鑰存放區、以 CU `kmsuser` 身分登入叢集，並使用 [CloudHSM 命令列界面 (CLI)](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli.html)。

**注意**  
當自訂金鑰存放區中斷連接時，所有在自訂金鑰存放區中建立 KMS 金鑰的嘗試，或在密碼編譯操作中使用現有 KMS 金鑰的嘗試，均會失敗。此動作可防止使用者存放和存取敏感資料。

本主題說明如何[中斷連接您的 AWS CloudHSM 金鑰存放區並以 身分登入](#login-kmsuser-1)`kmsuser`、執行 AWS CloudHSM 命令列工具，以及[登出並重新連接您的 AWS CloudHSM 金鑰存放區](#login-kmsuser-2)。

**Topics**
+ [如何中斷連線和登入](#login-kmsuser-1)
+ [如何登出和重新連線](#login-kmsuser-2)

### 如何中斷連線和登入
<a name="login-kmsuser-1"></a>

每次都需要使用下列程序，以`kmsuser`加密使用者身分登入相關聯的叢集。

**備註**  
下列程序使用 AWS CloudHSM 用戶端 SDK 5 命令列工具 [CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli.html)。CloudHSM CLI `key-handle`會取代為 `key-reference`。  
2025 年 1 月 1 日， AWS CloudHSM 將結束對用戶端 SDK 3 命令列工具、CloudHSM 管理公用程式 (CMU) 和金鑰管理公用程式 (KMU) 的支援。如需用戶端 SDK 3 命令列工具和用戶端 SDK 5 命令列工具之間差異的詳細資訊，請參閱*AWS CloudHSM 《 使用者指南*》中的[從用戶端 SDK 3 CMU 和 KMU 遷移至用戶端 SDK 5 CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-migrate-from-kmu-cmu.html)。

1. 如果 AWS CloudHSM 金鑰存放區尚未中斷連線，請中斷其連線。您可以使用 AWS KMS 主控台或 AWS KMS API。

   當您的 AWS CloudHSM 金鑰連線時， AWS KMS 會以 身分登入`kmsuser`。如此會防止您以 `kmsuser` 身分登入或變更 `kmsuser` 密碼。

   例如，此命令使用 [DisconnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisconnectCustomKeyStore.html) 來中斷連接範例金鑰存放區。將範例 AWS CloudHSM 金鑰存放區 ID 取代為有效的 ID。

   ```
   $ aws kms disconnect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
   ```

1. 使用**登入**命令以管理員身分登入。使用 *AWS CloudHSM 使用者指南*[的使用 CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-getting-started.html#w17aac19c11c13b7) 一節中所述的程序。

   ```
   aws-cloudhsm > login --username admin --role admin
             Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "admin",
       "role": "admin"
     }
   }
   ```

1. 使用 CloudHSM CLI 中的[https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-user-change-password.html) 命令，將`kmsuser`帳戶的密碼變更為您知道的密碼。（在您連接 AWS CloudHSM 金鑰存放區時AWS KMS 輪換密碼。) 密碼必須包含 7 到 32 個英數字元。區分大小寫，且不能包含任何特殊字元。

1. `kmsuser` 使用您設定的密碼登入為 。如需詳細說明，請參閱*AWS CloudHSM 《 使用者指南*》中的[使用 CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-getting-started.html#w17aac19c11c13b7) 一節。

   ```
   aws-cloudhsm > login --username kmsuser --role crypto-user
             Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "kmsuser",
       "role": "crypto-user"
     }
   }
   ```

### 如何登出和重新連線
<a name="login-kmsuser-2"></a>

每次您需要以`kmsuser`加密使用者身分登出並重新連接金鑰存放區時，請使用下列程序。

**備註**  
下列程序使用 AWS CloudHSM 用戶端 SDK 5 命令列工具 [CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli.html)。CloudHSM CLI `key-handle`會取代為 `key-reference`。  
2025 年 1 月 1 日， AWS CloudHSM 將結束對用戶端 SDK 3 命令列工具、CloudHSM 管理公用程式 (CMU) 和金鑰管理公用程式 (KMU) 的支援。如需用戶端 SDK 3 命令列工具和用戶端 SDK 5 命令列工具之間差異的詳細資訊，請參閱*AWS CloudHSM 《 使用者指南*》中的[從用戶端 SDK 3 CMU 和 KMU 遷移至用戶端 SDK 5 CloudHSM CLI](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-migrate-from-kmu-cmu.html)。

1. 執行任務，然後使用 CloudHSM CLI 中的[https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-logout.html](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_cli-logout.html)命令來登出。如果您不登出，嘗試重新連接您的 AWS CloudHSM 金鑰存放區將會失敗。

   ```
   aws-cloudhsm  logout
   {
     "error_code": 0,
     "data": "Logout successful"
   }
   ```

1. [編輯自訂金鑰存放區的 `kmsuser` 密碼設定](update-keystore.md)。

   這會告知叢集`kmsuser`中 的 AWS KMS 目前密碼。如果您省略此步驟， AWS KMS 將無法以 身分登入叢集`kmsuser`，而且所有重新連線自訂金鑰存放區的嘗試都會失敗。您可以使用 AWS KMS 主控台或 [UpdateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateCustomKeyStore.html) 操作的 `KeyStorePassword` 參數。

   例如，此命令 AWS KMS 會告知目前的密碼為 `tempPassword`。將範例密碼以實際密碼取代。

   ```
   $ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 --key-store-password tempPassword
   ```

1. 將 AWS KMS 金鑰存放區重新連線至其 AWS CloudHSM 叢集。將範例 AWS CloudHSM 金鑰存放區 ID 取代為有效的 ID。在連線過程中， 會將`kmsuser`密碼 AWS KMS 變更為只有它知道的值。

   [ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html) 操作會很快傳回，但連接程序可能需要一段很長的時間。初始回應並不表示連接程序已成功。

   ```
   $ aws kms connect-custom-key-store --custom-key-store-id cks-1234567890abcdef0
   ```

1. 使用 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作來驗證 AWS CloudHSM 金鑰存放區是否已連線。將範例 AWS CloudHSM 金鑰存放區 ID 取代為有效的 ID。

   在此範例中，連線狀態欄位會顯示 AWS CloudHSM 金鑰存放區現在已連線。

   ```
   $ aws kms describe-custom-key-stores --custom-key-store-id cks-1234567890abcdef0
   {
      "CustomKeyStores": [
         "CustomKeyStoreId": "cks-1234567890abcdef0",
         "CustomKeyStoreName": "ExampleKeyStore",
         "CloudHsmClusterId": "cluster-1a23b4cdefg",
         "TrustAnchorCertificate": "<certificate string appears here>",
         "CreationDate": "1.499288695918E9",
         "ConnectionState": "CONNECTED"
      ],
   }
   ```