

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

# 外部金鑰存放區
<a name="keystore-external"></a>

外部金鑰存放區可讓您使用 外部的密碼編譯金鑰來保護 AWS 資源 AWS。此進階功能專為受管制的工作負載而設計，您必須使用儲存在您控制的外部金鑰管理系統中的加密金鑰來保護這些工作負載。外部金鑰存放區支援[AWS 數位主權承諾](https://aws.amazon.com/blogs/security/aws-digital-sovereignty-pledge-control-without-compromise/)，讓您對 中的資料進行主權控制 AWS，包括能夠使用您擁有的金鑰材料進行加密，以及在外部控制 AWS。

*外部金鑰存放區*是由您擁有和管理的*外部金鑰管理器支援的*[自訂金鑰存放](key-store-overview.md#custom-key-store-overview)區 AWS。您的外部金鑰管理器可以是實體或虛擬硬體安全模組 (HSM)，也可以是任何能夠產生和使用密碼編譯金鑰的硬體型或軟體型系統。在外部金鑰存放區中使用 KMS 金鑰的加密和解密操作由外部金鑰管理器使用您的密碼編譯金鑰材料執行，這項功能稱為 *Hold Your Own Keys* (HYOK)。

AWS KMS 永遠不會直接與您的外部金鑰管理器互動，也無法建立、檢視、管理或刪除您的金鑰。反之， 只會與您提供的[外部金鑰存放區代理 ](#concept-xks-proxy)(XKS 代理） 軟體 AWS KMS 互動。您的外部金鑰存放區代理會媒介 AWS KMS 與外部金鑰管理器之間的所有通訊。它將所有請求從 傳輸 AWS KMS 到您的外部金鑰管理器，並將來自外部金鑰管理器的回應傳輸回 AWS KMS。外部金鑰存放區代理也會將來自 的一般請求轉譯 AWS KMS 為外部金鑰管理器可以理解的廠商特定格式，讓您可以將外部金鑰存放區與來自各種廠商的金鑰管理器搭配使用。

您可以在外部金鑰存放區中使用 KMS 金鑰進行用戶端加密，包括 [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/)。但是，外部金鑰存放區是伺服器端加密的重要資源，可讓您在 外部 AWS 服務 使用密碼編譯金鑰來保護多個 中的 AWS 資源 AWS。 AWS 服務 支援對稱加密[的客戶受管金鑰](concepts.md#customer-mgn-key)也支援外部金鑰存放區中的 KMS 金鑰。如需服務支援詳細資訊，請參閱 [AWS 服務整合](https://aws.amazon.com/kms/features/#AWS_service_integration)。

外部金鑰存放區可讓您 AWS KMS 將 用於受管制的工作負載，其中加密金鑰必須在外部存放和使用 AWS。但其與標準共同責任模式有很大不同，並且需要額外的運營負擔。對於大多數客戶而言，可用性和延遲的風險更大，將超過外部金鑰存放區的安全優勢。

外部金鑰存放區可讓您控制信任的根源。只有使用您控制的外部金鑰管理器，才能解密使用外部金鑰存放區中 KMS 金鑰加密的資料。如果您暫時撤銷對外部金鑰管理器的存取，例如中斷外部金鑰存放區連線，或中斷外部金鑰管理器與外部金鑰存放區代理的連線， 會 AWS 失去對密碼編譯金鑰的所有存取，直到您將其還原為止。在該間隔期間，不能解密使用 KMS 金鑰加密的密文。如果您永久撤銷對外部金鑰管理器的存取權，則使用外部金鑰存放區中的 KMS 金鑰加密的所有密文都將無法復原。唯一的例外是短暫快取受 KMS [金鑰保護的資料](data-keys.md)金鑰 AWS 的服務。這些資料金鑰會繼續運作，直到您停用資源或快取到期為止。如需詳細資訊，請參閱[無法使用的 KMS 金鑰如何影響資料金鑰](unusable-kms-keys.md)。

外部金鑰存放區會解除封鎖受管制工作負載的少數使用案例，其中加密金鑰必須完全由您控制且無法存取 AWS。但是，這是雲端基礎架構操作方式的重大變化，也是共同責任模式的明顯轉變。對於大多數工作負載而言，額外的操作負擔以及可用性和效能的更大風險將超過外部金鑰存放區感知的安全優勢。



**我需要外部金鑰存放區嗎？**

對於大多數使用者而言，受 [FIPS 140-3 安全層級 3 驗證的硬體安全模組](https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4884)保護的預設 AWS KMS 金鑰存放區可滿足其安全、控制和法規要求。外部金鑰存放區使用者會產生巨大的成本、維護和疑難排解負擔，以及延遲、可用性和可靠性風險。

考量外部金鑰存放區時，請花一些時間了解替代方案，包括您擁有和管理的 AWS CloudHSM 叢集支援的 [AWS CloudHSM 金鑰存放區](keystore-cloudhsm.md)，以及在您自己的 HSM 中產生且可視需要從 KMS 金鑰中刪除的具有[匯入金鑰材料](importing-keys.md)的 KMS 金鑰。特別是，匯入有效期非常短的金鑰材料可能會提供類似的控制層級，而不會造成效能或可用性風險。

如果您有下列需求，外部金鑰存放區可能是您組織的正確解決方案：
+ 您需要在內部部署金鑰管理器或您 AWS 控制範圍之外的金鑰管理器中使用密碼編譯金鑰。
+ 必須證明您的密碼編譯金鑰在雲端之外完全由您控制。
+ 您必須使用具有獨立授權的密碼編譯金鑰來進行加密和解密。
+ 金鑰資料必須放在次要、獨立的稽核路徑。

如果您選擇外部金鑰存放區，則請將其使用限制於需要利用 AWS之外的密碼編譯金鑰來保護的工作負載。



**共同責任模型**

標準 KMS 金鑰使用在 AWS KMS 擁有和管理HSMs 中產生和使用的金鑰材料。您可以在 KMS 金鑰上建立存取控制政策，並設定 AWS 服務 使用 KMS 金鑰來保護 資源。 AWS KMS 會負責 KMS 金鑰中金鑰材料的安全性、可用性、延遲和耐久性。

外部金鑰存放區中的 KMS 金鑰依賴於外部金鑰管理器中的金鑰材料和操作。因此，責任的天平會朝著您的方向移動。您要負責外部金鑰管理器中密碼編譯金鑰的安全性、可靠性、耐用性和效能。 AWS KMS 負責立即回應請求，並與外部金鑰存放區代理通訊，並維護我們的安全標準。為了確保每個外部金鑰存放區加密文字至少與標準 AWS KMS 加密文字一樣強， AWS KMS 首先使用 KMS 金鑰特有的 AWS KMS 金鑰材料加密所有純文字，然後將其傳送到您的外部金鑰管理器，以使用外部金鑰加密，此程序稱為[*雙重加密*](#concept-double-encryption)。因此，無論是 AWS KMS 還是外部金鑰材料擁有者都不能單獨解密雙重加密的密文。

您有責任維護符合法規與效能標準的外部金鑰管理器、供應及維護符合[AWS KMS 外部金鑰存放區代理 API 規格](https://github.com/aws/aws-kms-xksproxy-api-spec/)的外部金鑰存放區代理，並確保金鑰資料的可用性與持久性。此外，您也必須建立、設定和維護外部金鑰存放區。當由您維護的元件導致的錯誤發生時，您必須準備好識別和解決錯誤，以便 AWS 服務可以存取您的資源，而不會過度中斷。 AWS KMS 提供[故障診斷指引](xks-troubleshooting.md)，以協助您判斷問題原因和最可能的解決方法。

檢閱外部金鑰存放區記錄 AWS KMS 的 [Amazon CloudWatch 指標和維度](monitoring-cloudwatch.md#kms-metrics)。 AWS KMS 強烈建議您建立 CloudWatch 警示來監控外部金鑰存放區，以便在發生效能和操作問題的早期跡象之前對其進行偵測。

**有什麼變化？**

外部金鑰存放區僅支援對稱加密 KMS 金鑰。在其中 AWS KMS，您使用和管理外部金鑰存放區中的 KMS 金鑰的方式與管理其他[客戶受管金鑰](concepts.md#customer-mgn-key)的方式大致相同，包括[設定存取控制政策和](authorize-xks-key-store.md)[監控金鑰使用](monitoring-overview.md)。您可以使用具有相同參數的相同 API，在用於任何 KMS 金鑰的外部金鑰存放區中使用 KMS 金鑰來請求密碼編譯操作。定價也與標準 KMS 金鑰相同。如需詳細資訊，請參閱 [外部金鑰存放區中的 KMS 金鑰](keystore-external-key-manage.md)和 [AWS Key Management Service 定價](https://aws.amazon.com/kms/pricing/)。

但是，對於外部金鑰存放區，以下原則發生了變化：
+ 您負責金鑰操作的可用性、耐久性和延遲。
+ 您負責開發、購買、操作和授權外部金鑰管理器系統的所有費用。
+ 您可以從 AWS KMS 對外部金鑰存放區代理實作所有請求[的獨立授權](authorize-xks-key-store.md#xks-proxy-authorization)。
+ 您可以監控、稽核和記錄外部金鑰存放區代理的所有操作，以及與 AWS KMS 請求相關的外部金鑰管理器的所有操作。

**從何處開始？**

若要建立和管理外部金鑰存放區，您需要[選擇外部金鑰存放區代理連接選項](choose-xks-connectivity.md)、[備妥先決條件](create-xks-keystore.md#xks-requirements)以及[建立和設定外部金鑰存放區](create-xks-keystore.md)。

**配額**

AWS KMS 在每個 AWS 帳戶 和 區域中最多允許 [10 個自訂金鑰存放](resource-limits.md)區，包括[AWS CloudHSM 金鑰存放區](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-cloudhsm.html)和[外部金鑰存放區](https://docs.aws.amazon.com/kms/latest/developerguide/keystore-external.html)，無論其連線狀態為何。此外，[在外部金鑰存放區中使用 KMS 金鑰](requests-per-second.md#rps-key-stores)有 AWS KMS 請求配額。

如果您為外部金鑰存放區代理選擇 [VPC 代理連接](#concept-xks-connectivity)，則必要元件 (例如 VPC、子網路和網路負載平衡器) 可能也會有配額。如需這些配額的相關資訊，請使用 [Service Quotas 主控台](https://console.aws.amazon.com/servicequotas/home)。



**區域**

若要將網路延遲降到最低，請在離[外部金鑰管理器](#concept-ekm)最近的 AWS 區域 中建立外部金鑰存放區元件。如果可能，請選擇網路封包來回時間 (RTT) 為 35 毫秒或更短的區域。

除了中國 （北京） 和中國 （寧夏） 以外 AWS 區域 AWS KMS ， 支援的所有 都支援外部金鑰存放區。

**不支援的功能**

AWS KMS 不支援自訂金鑰存放區中的下列功能。
+ [非對稱 KMS 金鑰](symmetric-asymmetric.md)
+ [HMAC KMS 金鑰](hmac.md)
+ [含有匯入金鑰資料的 KMS 金鑰](importing-keys.md)
+ [自動金鑰輪換](rotate-keys.md)
+ [多區域金鑰](multi-region-keys-overview.md)

**進一步了解**：
+ 在 *AWS 新聞部落格*中[宣告 AWS KMS 外部金鑰存放區](https://aws.amazon.com/blogs/aws/announcing-aws-kms-external-key-store-xks/)。

## 外部金鑰存放區概念
<a name="xks-concepts"></a>

了解外部金鑰存放區中使用的基本術語和概念。

### 外部金鑰存放區
<a name="concept-external-key-store"></a>

*外部金鑰存放區*是您 AWS 擁有和管理的外部金鑰管理器支援的 AWS KMS [自訂金鑰存放](key-store-overview.md#custom-key-store-overview)區。外部金鑰存放區中的每個 KMS 金鑰都與外部金鑰管理器中的[外部金鑰](#concept-external-key)相關聯。當您在外部金鑰存放區中使用 KMS 金鑰進行加密或解密時，外部金鑰管理器將使用外部金鑰執行操作，這種安排稱為 *Hold your Own Keys* (HYOK)。此功能專為需要在其外部金鑰管理器中維護密碼編譯金鑰的組織而設計。

外部金鑰存放區可確保保護您的 AWS 資源的密碼編譯金鑰和操作會保留在您的外部金鑰管理器中，由您控制。 AWS KMS 會傳送請求給您的外部金鑰管理器來加密和解密資料，但 AWS KMS 無法建立、刪除或管理任何外部金鑰。從 AWS KMS 到外部金鑰管理器的所有請求，都是由您提供、擁有和管理的[外部金鑰存放區代理](#concept-xks-proxy)軟體元件所媒介。

AWS 支援 AWS KMS [客戶受管金鑰](concepts.md)的 服務可以使用外部金鑰存放區中的 KMS 金鑰來保護您的資料。因此，使用外部金鑰管理器中的加密操作，您的資料最終會受到金鑰保護。

與標準 KMS 金鑰相比，外部金鑰存放區中的 KMS 金鑰具有本質上不同的信任模型、[共同責任安排](#xks-shared-responsibility)和效能預期。透過外部金鑰存放區，您負責金鑰材料和密碼編譯操作的安全性和完整性。外部金鑰存放區中 KMS 金鑰的可用性和延遲會受到硬體、軟體、網路元件以及 AWS KMS 與外部金鑰管理器之間距離的影響。您也可能會對外部金鑰管理器以及外部金鑰管理器與之通訊所需的聯網和負載平衡基礎設施產生額外的成本 AWS KMS

您可以使用外部金鑰存放區作為更廣泛資料保護策略的一部分。對於您保護的每個 AWS 資源，您可以決定哪些需要外部金鑰存放區中的 KMS 金鑰，以及哪些金鑰可以受到標準 KMS 金鑰的保護。這可讓您靈活地為特定資料分類、應用程式或專案選擇 KMS 金鑰。

### 外部金鑰管理器
<a name="concept-ekm"></a>

*外部金鑰管理器*是 AWS 外部的元件，其可產生 256 位元 AES 對稱金鑰並執行對稱加密和解密。外部金鑰存放區的外部金鑰管理器可以是實體硬體安全模組 (HSM)、虛擬 HSM，或是含有或不含 HSM 元件的軟體金鑰管理器。它可以位於 外部的任何位置 AWS，包括在內部部署、本機或遠端資料中心或任何雲端中。您的外部金鑰存放區可由單一外部金鑰管理器或多個共用密碼編譯金鑰的相關金鑰管理器執行個體 (例如 HSM 叢集) 進行支援。外部金鑰存放區的設計是為了支援來自不同廠商的各種外部管理器。如需連線至外部金鑰管理器的詳細資訊，請參閱 [選擇外部金鑰存放區代理連線選項](choose-xks-connectivity.md)。

### 外部金鑰
<a name="concept-external-key"></a>

外部金鑰存放區中的每個 KMS 金鑰都與[外部金鑰管理器](#concept-ekm)中稱為*外部金鑰*的密碼編譯金鑰相關聯。當您在外部金鑰存放區中使用 KMS 金鑰進行加密或解密時，[外部金鑰管理器](#concept-ekm)將使用外部金鑰執行密碼編譯操作。

**警告**  
外部金鑰對於 KMS 金鑰的操作至關重要。如果遺失或刪除外部金鑰，則使用關聯之 KMS 金鑰加密的密文將無法復原。

對於外部金鑰存放區，外部金鑰必須是已啟用且可執行加密和解密動作的 256 位元 AES 金鑰。如需外部金鑰需求的詳細資訊，請參閱 [外部金鑰存放區中 KMS 金鑰的要求](create-xks-keys.md#xks-key-requirements)。

AWS KMS 無法建立、刪除或管理任何外部金鑰。您的密碼編譯金鑰材料永遠不會離開外部金鑰管理器。在外部金鑰存放區中建立 KMS 金鑰時，您需要提供外部金鑰的 ID (`XksKeyId`)。您無法變更與 KMS 金鑰相關聯的外部金鑰 ID，不過您的外部金鑰管理器可以輪換與外部金鑰 ID 相關聯的金鑰材料。

除了外部金鑰之外，外部金鑰存放區中的 KMS 金鑰也包含 AWS KMS 金鑰材料。受 KMS 金鑰保護的資料會先 AWS KMS 使用 AWS KMS 金鑰材料加密，然後使用外部金鑰由外部金鑰管理器加密。此[雙重加密](#concept-double-encryption)程序可確保受 KMS 金鑰保護的密文始終至少與僅受 AWS KMS保護的密文一樣強。

許多密碼編譯金鑰具有不同類型的識別符。在外部金鑰存放區中建立 KMS 金鑰時，請提供[外部金鑰存放區代理](#concept-xks-proxy)用來參照外部金鑰的外部金鑰 ID。如果使用錯誤的識別符，則您嘗試在外部金鑰存放區中建立 KMS 金鑰會失敗。

### 外部金鑰存放區代理
<a name="concept-xks-proxy"></a>

*外部金鑰存放區代理* ("XKS Proxy") 是客戶擁有且客戶受管的軟體應用程式，可協調 AWS KMS 和外部金鑰管理器之間的所有通訊。它也會將一般 AWS KMS 請求轉譯為廠商特定的外部金鑰管理器了解的格式。外部金鑰存放區需要外部金鑰存放區代理。每個外部金鑰存放區與一個外部金鑰存放區代理相關聯。

![\[外部金鑰存放區代理\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/xks-proxy-concept-40.png)


AWS KMS 無法建立、刪除或管理任何外部金鑰。您的密碼編譯金鑰材料永遠不會離開您的外部金鑰管理器。 AWS KMS 與外部金鑰管理器之間的所有通訊均由外部金鑰存放區代理媒介。 AWS KMS 會將請求傳送至外部金鑰存放區代理，並接收來自外部金鑰存放區代理的回應。外部金鑰存放區代理負責將請求從 傳輸 AWS KMS 到外部金鑰管理器，以及將回應從外部金鑰管理器傳輸回 AWS KMS

您擁有並管理外部金鑰存放區的外部金鑰存放區代理，並負責其維護和操作。您可以根據發佈或從廠商購買代理應用程式的開放原始碼[外部金鑰存放區代理 API 規格來開發外部金鑰存放區](https://github.com/aws/aws-kms-xksproxy-api-spec/)代理。 AWS KMS 您的外部金鑰存放區代理可能包含在您的外部金鑰管理器中。為了支援代理開發， AWS KMS 也提供範例外部金鑰存放區代理 ([aws-kms-xks-proxy](https://github.com/aws-samples/aws-kms-xks-proxy)) 和測試用戶端 ([xks-kms-xksproxy-test-client](https://github.com/aws-samples/aws-kms-xksproxy-test-client))，以驗證外部金鑰存放區代理是否符合規格。

為了進行身分驗證 AWS KMS，代理會使用伺服器端 TLS 憑證。若要對您的代理進行身分驗證， 會使用 SigV4 [代理身分驗證憑證](#concept-xks-credential)，向外部金鑰存放區代理 AWS KMS 簽署所有請求。

您的外部金鑰存放區代理必須支援 HTTP/1.1 或更新版本，以及 TLS 1.2 或更新版本，且至少包含下列其中一個加密套件：
+ TLS\$1AES\$1256\$1GCM\$1SHA384 (TLS 1.3)
+ TLS\$1CHACHA20\$1POLY1305\$1SHA256 (TLS 1.3)
**注意**  
 AWS GovCloud (US) Region 不支援 TLS\$1CHACHA20\$1POLY1305\$1SHA256。
+ TLS\$1ECDHE\$1RSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 (TLS 1.2)
+ TLS\$1ECDHE\$1ECDSA\$1WITH\$1AES\$1256\$1GCM\$1SHA384 (TLS 1.2)

若要在外部金鑰存放區中建立和使用 KMS 金鑰，您必須首先將[外部金鑰存放區連接](xks-connect-disconnect.md)至其外部金鑰存放區代理。您也可以視需求中斷外部金鑰存放區與其代理的連接。當您這麼做時，外部金鑰存放區中的所有 KMS 金鑰都變得[無法使用](key-state.md)；其無法用於任何加密操作。

### 外部金鑰存放區代理連接
<a name="concept-xks-connectivity"></a>

外部金鑰存放區代理連線 (「XKS 代理連線」) 說明 AWS KMS 用來與外部金鑰存放區代理通訊的方法。

您可以在建立外部金鑰存放區時指定代理連接選項，其會成為外部金鑰存放區的屬性。您可以透過更新自訂金鑰存放區屬性來變更代理連接選項，但您必須確定外部金鑰存放區代理仍可存取相同的外部金鑰。

AWS KMS 支援下列連線選項。
+ [公有端點連線](choose-xks-connectivity.md#xks-connectivity-public-endpoint) — 透過網際網路將外部金鑰存放區代理的請求 AWS KMS 傳送至您控制的公有端點。此選項的建立和維護非常簡單，但可能無法滿足每個安裝的安全需求。
+ [VPC 端點服務連線](choose-xks-connectivity.md#xks-vpc-connectivity) — AWS KMS 將請求傳送至您建立和維護的 Amazon Virtual Private Cloud (Amazon VPC) 端點服務。您可以在 Amazon VPC 內託管外部金鑰存放區代理，或在 之外託管外部金鑰存放區代理， AWS 並僅使用 Amazon VPC 進行通訊。您也可以將外部金鑰存放區連線至另一個 擁有的 Amazon VPC 端點服務 AWS 帳戶。

如需有關外部金鑰存放區代理連接選項的詳細資訊，請參閱 [選擇外部金鑰存放區代理連線選項](choose-xks-connectivity.md)。

### 外部金鑰存放區代理身分驗證憑證
<a name="concept-xks-credential"></a>

若要向外部金鑰存放區代理進行身分驗證， 會使用 [Signature V4 (SigV4)](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) 身分驗證憑證，將所有請求 AWS KMS 簽署至外部金鑰存放區代理。您可以在代理上建立和維護身分驗證憑證，然後在建立外部存放區 AWS KMS 時將此憑證提供給 。

**注意**  
 AWS KMS 用來簽署 XKS 代理請求的 SigV4 登入資料與 中與 AWS Identity and Access Management 主體相關聯的任何 SigV4 登入資料無關 AWS 帳戶。請勿針對外部金鑰存放區代理重複使用任何 IAM SigV4 憑證。

每個代理身分驗證憑證有兩部分。建立外部金鑰存放區或更新外部金鑰存放區的身分驗證憑證時，您必須同時提供這兩個部分。
+ 存取金鑰 ID：識別私密存取金鑰。您可以提供純文字形式的 ID。
+ 私密存取金鑰：登入資料的私密部分。在儲存登入資料之前， 會在登入資料中 AWS KMS 加密私密存取金鑰。

您可以隨時[編輯憑證設定](update-xks-keystore.md)，例如當您輸入錯誤的值時、變更代理上的憑證時或者代理輪換憑證時。如需外部金鑰存放區代理身分驗證的技術詳細資訊 AWS KMS ，請參閱 AWS KMS 外部金鑰存放區代理 API 規格中的身分[驗證](https://github.com/aws/aws-kms-xksproxy-api-spec/blob/main/xks_proxy_api_spec.md#authentication)。

若要讓您在不中斷外部金鑰存放區中使用 KMS 金鑰 AWS 服務 的 的情況下輪換登入資料，建議您的外部金鑰存放區代理支援至少兩個有效的身分驗證登入資料 AWS KMS。這可確保當您為 AWS KMS提供新憑證時，先前的憑證可繼續運作。

為了協助您追蹤代理身分驗證憑證的存留期， AWS KMS 會定義 Amazon CloudWatch 指標 [XksProxyCredentialAge](monitoring-cloudwatch.md#metric-xks-proxy-credential-age)。您可以使用此指標建立 CloudWatch 警示，在憑證有效期達到您建立的閾值時通知您。

### 代理 API
<a name="concept-proxy-apis"></a>

若要支援 AWS KMS 外部金鑰存放區，[外部金鑰存放區代理](#concept-xks-proxy)必須實作必要的代理 APIs，如[AWS KMS 外部金鑰存放區代理 API 規格](https://github.com/aws/aws-kms-xksproxy-api-spec/)所述。這些代理 API 請求是唯一 AWS KMS 傳送到代理的請求。雖然您永遠不會直接傳送這些請求，但了解其可能有助於您解決外部金鑰存放區或其代理可能出現的任何問題。例如，在外部金鑰存放區的 [Amazon CloudWatch 指標](monitoring-cloudwatch.md)中 AWS KMS 包含這些 API 呼叫延遲和成功率的相關資訊。如需詳細資訊，請參閱[監控外部金鑰存放區](xks-monitoring.md)。

下表列出並說明每個代理 API。它還包括 AWS KMS 觸發對代理 API 呼叫的操作，以及與代理 API 相關的任何 AWS KMS 操作例外狀況。


| 代理 API | Description | 相關 AWS KMS 操作 | 
| --- | --- | --- | 
| 解密 | AWS KMS 會傳送要解密的加密文字，以及要使用的[外部金鑰](#concept-external-key) ID。所需的加密演算法是 AES\$1GCM。 | [Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)、[ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) | 
| 加密 | AWS KMS 會傳送要加密的資料，以及要使用的[外部金鑰](#concept-external-key) ID。所需的加密演算法是 AES\$1GCM。 | [Encrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html)、[GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html)、[GenerateDataKeyWithoutPlaintext](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKeyWithoutPlaintext.html)、[ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html) | 
| GetHealthStatus | AWS KMS 會請求有關代理和外部金鑰管理器狀態的資訊。每個外部金鑰管理器的狀態可以為以下其中一種。[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/keystore-external.html) | [CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html) (用於[公有端點連接](choose-xks-connectivity.md#xks-connectivity-public-endpoint)),[ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html) (用於 [VPC 端點服務連接](choose-xks-connectivity.md#xks-vpc-connectivity))如果所有外部金鑰管理器執行個體都是 `Unavailable`，則嘗試建立或連接金鑰存放區會失敗，且出現 [`XksProxyUriUnreachableException`](xks-troubleshooting.md#fix-xks-latency)。 | 
| GetKeyMetadata | AWS KMS 會請求與[外部金鑰](#concept-external-key)存放區中的 KMS 金鑰相關聯的外部金鑰相關資訊。回應包括金鑰規格 (`AES_256`)、金鑰用法 (`[ENCRYPT, DECRYPT]`) 以及外部金鑰是否為 `ENABLED` 或 `DISABLED`。 | [CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html)如果金鑰規格不是 `AES_256`，或金鑰用法不是 `[ENCRYPT, DECRYPT]`，或狀態為 `DISABLED`，則 `CreateKey` 操作會失敗，且會出現 `XksKeyInvalidConfigurationException`。 | 

### 雙重加密
<a name="concept-double-encryption"></a>

透過外部金鑰存放區中 KMS 金鑰加密的資料會加密兩次。首先， 會使用 KMS AWS KMS 金鑰特定的金鑰材料來 AWS KMS 加密資料。然後，[外部金鑰管理器](#concept-ekm)使用[外部金鑰](#concept-external-key)對 AWS KMS加密的密文進行加密。此過程稱為*雙重加密*。

雙重加密可確保由外部金鑰存放區中 KMS 金鑰加密的密文至少與使用標準 KMS 金鑰加密的密文一樣強。它也可以保護從 傳輸 AWS KMS 到外部金鑰存放區代理的純文字。使用雙重加密，您可以完全控制您的密文。如果您透過外部代理永久撤銷對外部金鑰的 AWS 存取權，則 AWS 中剩餘的任何密文都會被有效地加密銷毀。

![\[對外部金鑰存放區中由 KMS 金鑰保護的資料進行雙重加密\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/xks-double-encrypt-40.png)


若要啟用雙重加密，外部金鑰存放區中的每個 KMS 金鑰都有*兩個*密碼編譯備份金鑰：
+ KMS AWS KMS 金鑰的唯一金鑰材料。系統會產生此金鑰材料，且僅使用於 AWS KMS [經 FIPS 140-3 安全層級 3](https://csrc.nist.gov/projects/cryptographic-module-validation-program/certificate/4884) 認證的硬體安全模組 (HSMs)。
+ 外部金鑰管理器中的[外部金鑰](#concept-external-key)。

雙重加密具有以下效果：
+ AWS KMS 無法在沒有透過外部金鑰存放區代理存取外部金鑰的情況下，解密由外部金鑰存放區中 KMS 金鑰加密的任何加密文字。
+ 您無法解密 KMS 金鑰在 外部的外部金鑰存放區中加密的任何加密文字 AWS，即使您擁有其外部金鑰材料。
+ 您無法重新建立從外部金鑰存放區刪除的 KMS 金鑰，即使您擁有其外部金鑰材料。每個 KMS 金鑰都擁有包含在對稱密文中的唯一中繼資料。新的 KMS 金鑰無法解密由原始金鑰加密的密文，即使其使用相同的外部金鑰材料。

如需做法中的雙重加密範例，請參閱 [外部金鑰存放區的運作方式](#xks-how-it-works)。

## 外部金鑰存放區的運作方式
<a name="xks-how-it-works"></a>

您的[外部金鑰存放區](#concept-external-key-store)、[外部金鑰存放區代理](#concept-xks-proxy)和[外部金鑰管理器](#concept-ekm)會共同運作，以保護您的 AWS 資源。以下程序描述了典型 AWS 服務 的加密工作流程，該服務使用由 KMS 金鑰保護的唯一資料金鑰對每個物件進行加密。在此情況下，您已選擇外部金鑰存放區中的 KMS 金鑰來保護物件。此範例顯示 AWS KMS 如何使用[雙重加密](#concept-double-encryption)來保護傳輸中的資料金鑰，並確保外部金鑰存放區中 KMS 金鑰所產生的加密文字至少與使用金鑰材料的標準對稱 KMS 金鑰加密的加密文字一樣強 AWS KMS。

與 AWS 服務 整合的每個實際 所使用的加密方法 AWS KMS 會有所不同。如需詳細資訊，請參閱 AWS 服務 文件「安全性」一章中的「資料保護」主題。

![\[外部金鑰存放區的運作方式\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/xks-how-it-works-jan26.png)


1. 您可以將新物件新增至 AWS 服務 資源。若要加密物件， AWS KMS 會使用外部金鑰存放區中的 KMS 金鑰，將 [GenerateDataKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_GenerateDataKey.html) 請求 AWS 服務 傳送至 。

1. AWS KMS 會產生 256 位元對稱[資料金鑰](data-keys.md)，並準備透過外部金鑰存放區代理將純文字資料金鑰的副本傳送至外部金鑰管理器。透過使用與外部金鑰存放區中的 KMS 金鑰相關聯的[AWS KMS 金鑰材料](#concept-double-encryption)加密純文字資料金鑰， AWS KMS 開始[雙重加密](#concept-double-encryption)程序。

1. AWS KMS 會將[加密](#concept-proxy-apis)請求傳送至與外部金鑰存放區相關聯的外部金鑰存放區代理。請求包含要加密的資料金鑰加密文字，以及與 KMS 金鑰相關聯的[外部金鑰](#concept-external-key) ID。 會使用外部金鑰存放區代理的[代理身分驗證憑證](#concept-xks-credential)來 AWS KMS 簽署請求。

   資料金鑰的純文字複本不會傳送至外部金鑰存放區代理。

1. 外部金鑰存放區代理會驗證請求，然後將加密請求傳送至外部金鑰管理器。

   某些外部金鑰存放區代理也會實作選用的[授權政策](authorize-xks-key-store.md#xks-proxy-authorization)，只允許選取的主體在特定條件下執行操作。

1. 您的外部金鑰管理器會使用指定的外部金鑰加密資料金鑰密文。外部金鑰管理器會將雙重加密的資料金鑰傳回至您的外部金鑰存放區代理，它會將其傳回 AWS KMS。

1. AWS KMS 會將純文字資料金鑰和該資料金鑰的雙重加密複本傳回 AWS 服務。

1.  AWS 服務 使用純文字資料金鑰來加密資源物件、銷毀純文字資料金鑰，以及將加密的資料金鑰與加密的物件一起存放。

   有些 AWS 服務 可能會快取純文字資料金鑰，以用於多個物件，或在資源使用時重複使用。如需詳細資訊，請參閱[無法使用的 KMS 金鑰如何影響資料金鑰](unusable-kms-keys.md)。

若要解密加密的物件， AWS 服務 必須在[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)請求 AWS KMS 中將加密的資料金鑰傳回 。若要解密加密的資料金鑰， AWS KMS 必須使用外部金鑰的 ID 將加密的資料金鑰傳回外部金鑰存放區代理。如果對外部金鑰存放區代理的解密請求因任何原因失敗， AWS KMS 則 無法解密加密的資料金鑰，且 AWS 服務 無法解密加密的物件。

# 控制對外部金鑰存放區的存取
<a name="authorize-xks-key-store"></a>

與標準 KMS 金鑰搭配使用的所有 AWS KMS 存取控制功能 — [金鑰政策](key-policies.md)、[IAM 政策和](iam-policies.md)[授權](grants.md) — 對外部金鑰存放區中的 KMS 金鑰的運作方式相同。您可以使用 IAM 政策來控制對建立和管理外部金鑰存放區之 API 操作的存取。您可以使用 IAM 政策和金鑰政策來控制對外部金鑰存放區 AWS KMS keys 中 的存取。您也可以為 AWS 組織和 VPC 端點[政策使用服務控制](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps.html)政策，以控制對外部金鑰存放區中 KMS 金鑰的存取。 [https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy](https://docs.aws.amazon.com/vpc/latest/privatelink/interface-endpoints.html#edit-vpc-endpoint-policy)

建議您僅向使用者和角色提供執行任務所需的許可。

**Topics**
+ [授權外部金鑰存放區管理器](#authorize-xks-managers)
+ [授權外部金鑰存放區中 KMS 金鑰的使用者](#authorize-xks-users)
+ [授權 與您的外部金鑰存放區代理 AWS KMS 通訊](#allowlist-kms-xks)
+ [外部金鑰存放區代理授權 (選用)](#xks-proxy-authorization)
+ [mTLS 身分驗證 （已棄用）](#xks-mtls)

## 授權外部金鑰存放區管理器
<a name="authorize-xks-managers"></a>

建立及管理外部金鑰存放區的主體需要自訂金鑰存放區操作許可。以下清單說明了外部金鑰存放區管理器所需的最低許可。由於自訂金鑰存放區不是 AWS 資源，因此您無法為其他 中的主體提供外部金鑰存放區的許可 AWS 帳戶。
+ `kms:CreateCustomKeyStore`
+ `kms:DescribeCustomKeyStores`
+ `kms:ConnectCustomKeyStore`
+ `kms:DisconnectCustomKeyStore`
+ `kms:UpdateCustomKeyStore`
+ `kms:DeleteCustomKeyStore`

若要使用 [Amazon VPC 端點服務連線](choose-xks-connectivity.md#xks-vpc-connectivity)建立外部金鑰存放區，且 VPC 端點服務由不同的 擁有 AWS 帳戶，您還需要下列許可：
+ `ec2:DescribeVPCEndpointServices`

建立外部金鑰存放區的主體需要許可，才能建立及設定外部金鑰存放區元件。主體只能在自己的帳戶中建立外部金鑰存放區。若要建立具有 [VPC 端點服務連接](choose-xks-connectivity.md#xks-vpc-connectivity)的外部金鑰存放區，主體必須具有建立下列元件的許可：
+ Amazon VPC
+ 公有和私有子網路
+ 網路負載平衡器和目標群組
+ Amazon VPC 端點服務

如需詳細資訊，請參閱 [Amazon VPC 的身分和存取管理](https://docs.aws.amazon.com/vpc/latest/userguide/security-iam.html)、[VPC 端點和 VPC 端點服務的身分和存取管理](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-iam.html)以及 [Elastic Load Balancing API 許可](https://docs.aws.amazon.com/elasticloadbalancing/latest/userguide/elb-api-permissions.html)。

## 授權外部金鑰存放區中 KMS 金鑰的使用者
<a name="authorize-xks-users"></a>

在外部金鑰存放區 AWS KMS keys 中建立和管理的委託人需要與建立和管理任何 KMS 金鑰的委託人[相同的許可](create-keys.md#create-key-permissions) AWS KMS。外部金鑰存放區中 KMS 金鑰的[預設金鑰政策](key-policy-default.md)與 AWS KMS中 KMS 金鑰的預設金鑰政策完全相同。[屬性型存取控制](abac.md) (ABAC) 使用標籤和別名來控制對 KMS 金鑰的存取，對外部金鑰存放區中的 KMS 金鑰也有效。

將自訂金鑰存放區中的 KMS 金鑰用於[密碼編譯操作](manage-cmk-keystore.md#use-cmk-keystore)的委託人，需要許可對 KMS 金鑰執行密碼編譯操作，例如 [kms:Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)。您可以在 IAM 或金鑰政策中提供這些許可。但是，他們使用自訂金鑰存放區中的 KMS 金鑰並不需要任何額外的許可。

若要設定僅適用於外部金鑰存放區中 KMS 金鑰的許可，請使用值為 `EXTERNAL_KEY_STORE` 的 [`kms:KeyOrigin`](conditions-kms.md#conditions-kms-key-origin) 政策條件。您可以使用此條件來限制 [kms:CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 許可或 KMS 金鑰資源專屬的任何許可。例如，下列 IAM 政策允許其所連接的身分，以便對帳戶中的所有 KMS 金鑰呼叫指定的操作，前提是 KMS 金鑰位於外部金鑰存放區中。請注意，您可以將許可限制為外部金鑰存放區中的 KMS 金鑰，以及 中的 KMS 金鑰 AWS 帳戶，但不能限制為帳戶中的任何特定外部金鑰存放區。

```
{
  "Sid": "AllowKeysInExternalKeyStores",
  "Effect": "Allow",
  "Action": [
    "kms:Encrypt",
    "kms:Decrypt",
    "kms:ReEncrypt*",
    "kms:GenerateDataKey*",
    "kms:DescribeKey"
  ],
  "Resource": "arn:aws:kms:us-west-2:111122223333:key/*",
  "Condition": {
    "StringEquals": {
      "kms:KeyOrigin": "EXTERNAL_KEY_STORE"
    }
  }
}
```

## 授權 與您的外部金鑰存放區代理 AWS KMS 通訊
<a name="allowlist-kms-xks"></a>

AWS KMS 只會透過您提供的[外部金鑰存放區代理](keystore-external.md#concept-xks-proxy)與您的外部金鑰管理器通訊。 AWS KMS 會使用 [Signature 第 4 版 (SigV4) 程序](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)與您指定的[外部金鑰存放區代理身分驗證憑證](keystore-external.md#concept-xks-credential)簽署請求，以驗證您的代理。如果您為外部金鑰存放區代理使用[公有端點連線](choose-xks-connectivity.md#xks-connectivity-public-endpoint)， AWS KMS 不需要任何其他許可。

不過，如果您使用的是 [VPC 端點服務連線](choose-xks-connectivity.md#xks-vpc-connectivity)，您必須授予 AWS KMS 許可，才能建立 Amazon VPC 端點服務的介面端點。無論外部金鑰存放區代理位於您的 VPC 中，還是外部金鑰存放區代理位於其他地方，但使用 VPC 端點服務與 通訊，都需要此許可 AWS KMS。

若要允許 AWS KMS 建立介面端點，請使用 [Amazon VPC 主控台](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)或 [ModifyVpcEndpointServicePermissions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVpcEndpointServicePermissions.html) 操作。允許下列主體的許可：`cks.kms.<region>.amazonaws.com`。

如果您的 Amazon VPC 端點服務是由 AWS 帳戶 與 AWS 帳戶 擁有外部金鑰存放區 (XKS) 不同的 所擁有，您也需要允許 XKS 存取 VPC 端點服務。若要這麼做，[請允許將 XKS AWS 帳戶 ID 列為 Amazon VPC 端點服務的主體](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)。

------
#### [ Same AWS 帳戶 ]

當您的 VPC 端點服務擁有 AWS 帳戶 與外部金鑰存放區相同的 時，您必須 AWS KMS 將 新增至 VPC 端點服務的**允許委託人**清單。

下列範例使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-vpc-endpoint-service-permissions.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-vpc-endpoint-service-permissions.html) AWS CLI 命令， AWS KMS 允許 連線到美國西部 （奧勒岡） (us-west-2) 區域中指定的 VPC 端點服務。使用此命令之前，請將 Amazon VPC 服務 ID 和 AWS 區域 取代為您的組態的有效值。

```
modify-vpc-endpoint-service-permissions
--service-id vpce-svc-12abc34567def0987
--add-allowed-principals '["cks.kms.us-west-2.amazonaws.com"]'
```

若要移除此許可，請使用 [Amazon VPC 主控台](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)或具有 `RemoveAllowedPrincipals` 參數的 [ModifyVpcEndpointServicePermissions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVpcEndpointServicePermissions.html)。

------
#### [ Cross AWS 帳戶 ]

當另一個 VPC 端點服務擁有時 AWS 帳戶，您必須將 AWS KMS 和外部金鑰存放區新增至 VPC 端點服務的**允許主體**清單。

下列範例使用 [https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-vpc-endpoint-service-permissions.html](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-vpc-endpoint-service-permissions.html) AWS CLI 命令來允許 AWS KMS 和外部金鑰存放區 (XKS) 連線到美國西部 （奧勒岡） (us-west-2) 區域中指定的 VPC 端點服務。使用此命令之前，請將 Amazon VPC 服務 ID、 AWS 區域和 IAM 主體 ARN 取代為您的組態的有效值。IAM 主體應該替換為 XKS 擁有者中的主體 AWS 帳戶。

在此範例中， `arn:aws:iam::123456789012:role/cks_role`是 XKS 擁有者帳戶中的 IAM 主體，用於建立、更新或連接 XKS 到您的 VPC 端點服務。如果您想要允許 XKS 擁有者帳戶中的所有主體存取您的 VPC 端點服務，您可以指定 `arn:aws:iam::123456789012:root`。

```
modify-vpc-endpoint-service-permissions
--service-id vpce-svc-12abc34567def0987
--add-allowed-principals '["cks.kms.us-west-2.amazonaws.com", "arn:aws:iam::123456789012:role/cks_role"]'
```

若要移除此許可，請使用 [Amazon VPC 主控台](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)或具有 `RemoveAllowedPrincipals` 參數的 [ModifyVpcEndpointServicePermissions](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVpcEndpointServicePermissions.html)。

------

## 外部金鑰存放區代理授權 (選用)
<a name="xks-proxy-authorization"></a>

某些外部金鑰存放區代理會實作使用其外部金鑰的授權需求。允許外部金鑰存放區代理 (但不是必需的) 來設計和實作授權方案，該方案允許特定使用者僅在特定條件下請求特定操作。例如，代理可能會設定為允許使用者 A 使用特定的外部金鑰進行加密，但無法使用其進行解密。

Proxy 授權獨立於所有外部金鑰存放區代理 AWS KMS 所需的 [SigV4-based代理身分驗證](keystore-external.md#concept-xks-credential)。其也獨立於金鑰政策、IAM 政策和授予，其可授權存取會影響外部金鑰存放區或其 KMS 金鑰的操作。

若要啟用外部金鑰存放區代理的授權， 會在每個[代理 API 請求](keystore-external.md#concept-proxy-apis)中 AWS KMS 包含中繼資料，包括發起人、KMS 金鑰、 AWS KMS 操作、 AWS 服務 （如果有的話）。外部金鑰代理 API 第 1 版 (v1) 的請求中繼資料如下所示。

```
"requestMetadata": {
    "awsPrincipalArn": string,
    "awsSourceVpc": string, // optional
    "awsSourceVpce": string, // optional
    "kmsKeyArn": string,
    "kmsOperation": string,
    "kmsRequestId": string,
    "kmsViaService": string // optional
}
```

例如，您可以設定代理以允許來自特定委託人 (`awsPrincipalArn`) 的請求，但僅限於由特定 AWS 服務 () 代表委託人提出請求時`kmsViaService`。

如果代理授權失敗，相關 AWS KMS 操作會失敗，並顯示說明錯誤的訊息。如需詳細資訊，請參閱 [代理授權問題](xks-troubleshooting.md#fix-xks-authorization)。

## mTLS 身分驗證 （已棄用）
<a name="xks-mtls"></a>

本指南的先前版本提及*交互 Transport Layer Security* (mTLS) 做為驗證請求的選用次要身分驗證機制 AWS KMS。透過 mTLS，雙方 (AWS KMS 做為用戶端和 XKS 代理做為伺服器） 透過 TLS 頻道進行通訊會使用憑證彼此驗證。

不過，[Chrome 根計劃政策 （第 4.2.2 節） 的變更](https://googlechrome.github.io/chromerootprogram/policy-archive/policy-version-1-7/#422-pki-hierarchies-included-in-the-chrome-root-store)禁止 Chrome 根存放區中包含的公開信任根 CAs 在 2026 年 6 月 15 日之後使用 clientAuth 延伸金鑰使用 (EKU) 延伸發行憑證。因此， AWS KMS 無法再從 [Amazon Trust Services](https://www.amazontrust.com/repository/) 取得適用於 mTLS 的用戶端憑證。2026 年 3 月 16 日 AWS KMS 之後，用於在 中建立新的外部金鑰存放區的任何 XKS 代理都不需要 mTLS。2026 年 6 月 15 日之後，任何設定為需要 mTLS 的 XKS 代理將無法與 通訊 AWS KMS。客戶必須依賴 SigV4 身分驗證來驗證請求是否來自 AWS KMS。如需詳細資訊，請參閱[外部金鑰存放區代理身分驗證憑證](keystore-external.md#concept-xks-credential)。

# 選擇外部金鑰存放區代理連線選項
<a name="choose-xks-connectivity"></a>

在建立外部金鑰存放區之前，請選擇連線選項，以決定 如何與外部金鑰存放區元件 AWS KMS 通訊。您選擇的連接選項會決定規劃程序的剩餘部分。

如果您要建立外部金鑰存放區，您需要判斷 如何與[外部金鑰存放區代理](keystore-external.md#concept-xks-proxy) AWS KMS 通訊。此選項將決定您需要哪些元件，以及如何設定這些元件。 AWS KMS 支援下列連線選項。
+ [公有端點連接](#xks-connectivity-public-endpoint)
+ [VPC 端點服務連接](#xks-vpc-connectivity)

選擇可滿足您的效能和安全目標的選項。

開始之前，[請確認您需要外部金鑰存放區](keystore-external.md#do-i-need-xks)。大多數客戶都可以使用金鑰材料支援的 KMS AWS KMS 金鑰。

**考量事項**
+ 如果您的外部金鑰存放區代理內建於外部金鑰管理器中，則可能已預先決定您的連接。如需相關指導，請參閱外部金鑰管理器或外部金鑰存放區代理的文件。
+ 即使在正操作的外部金鑰存放區中，您也可以[變更外部金鑰存放區代理連接選項](update-xks-keystore.md)。但是，必須仔細規劃和執行此程序，以最大限度地減少中斷、避免錯誤並確保持續存取對您的資料進行加密的密碼編譯金鑰。

## 公有端點連接
<a name="xks-connectivity-public-endpoint"></a>

AWS KMS 使用公有端點透過網際網路連線至外部金鑰存放區代理 (XKS 代理）。

此連接選項更易於設定和維護，並且可與某些金鑰管理模式完美配合。但是，其可能無法滿足某些組織的安全要求。

![\[公有端點連接\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/xks-public-endpoint-60.png)


**需求**

如果您選擇公有端點連接，則需要下列項目。
+ 您的外部金鑰存放區代理在公開可路由端點必須可存取。
+ 您可對多個外部金鑰存放區使用相同的公有端點，前提是它們使用不同的[代理 URI 路徑](create-xks-keystore.md#require-path)值。
+ 您無法將相同的端點用於具有公有端點連線的外部金鑰存放區，以及任何具有 VPC 端點服務連線的外部金鑰存放區 AWS 區域，即使金鑰存放區位於不同的 AWS 帳戶。
+ 您必須取得由外部金鑰存放區支援的公有憑證授權機構核發的 TLS 憑證。如需清單，請參閱[受信任的憑證授權機構](https://github.com/aws/aws-kms-xksproxy-api-spec/blob/main/TrustedCertificateAuthorities)。

  TLS 憑證上的主體通用名稱 (CN) 必須與外部金鑰存放區代理之[代理 URI 端點](create-xks-keystore.md#require-endpoint)中的網域名稱相符。例如，如果公有端點為 `https://myproxy.xks.example.com`，則 TLS 憑證上的通用名稱必須為 `myproxy.xks.example.com` 或 `*.xks.example.com`。
+ 確保 AWS KMS 和外部金鑰存放區代理之間的任何防火牆允許進出 Proxy 上連接埠 443 的流量。透過 IPv4 在連接埠 443 上 AWS KMS 通訊。此值不可設定。

如需外部金鑰存放區的所有要求，請參閱[備妥先決條件](create-xks-keystore.md#xks-requirements)。

## VPC 端點服務連接
<a name="xks-vpc-connectivity"></a>

AWS KMS 透過建立介面端點到您建立和設定的 Amazon VPC 端點服務，連接到外部金鑰存放區代理 (XKS 代理）。您必須負責[建立 VPC 端點服務](vpc-connectivity.md)，並將 VPC 連接至外部金鑰管理器。

您的端點服務可以使用任何[支援的網路到 Amazon VPC 選項](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)進行通訊，包括 [AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/)。

此連接選項的設定和維護更為複雜。但它使用 AWS PrivateLink，可讓 AWS KMS 私下連線至您的 Amazon VPC 和外部金鑰存放區代理，而無需使用公有網際網路。

您可以在 Amazon VPC 中找到外部金鑰存放區代理。

![\[VPC 端點服務連接 - VPC 中的 XKS 代理\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/xks-proxy-in-vpc-60.png)


或者，您可以在 外部找到外部金鑰存放區代理 AWS 雲端 ，並僅將 Amazon VPC 端點服務用於與 進行安全通訊 AWS KMS。

![\[VPC 端點服務連線 - 外部的 XKS 代理 AWS\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/xks-proxy-via-vpc-60.png)


您也可以將外部金鑰存放區連接到另一個 擁有的 Amazon VPC 端點服務 AWS 帳戶。兩者 AWS 帳戶 都需要[必要的許可](authorize-xks-key-store.md#authorize-xks-managers)，才能允許 AWS KMS 和 VPC 端點服務之間的通訊 

**進一步了解**：
+ 檢閱建立外部金鑰存放區的程序，包括[備妥先決條件](create-xks-keystore.md#xks-requirements)。它將幫助您確保在建立外部金鑰存放區時具有所需的所有元件。
+ 了解如何[控制對外部金鑰存放區的存取](authorize-xks-key-store.md)，包括外部金鑰存放區管理員和使用者所需的許可。
+ 了解為外部金鑰存放區 AWS KMS 記錄的 [Amazon CloudWatch 指標和維度](monitoring-cloudwatch.md#kms-metrics)。強烈建議您建立警示來監控外部金鑰存放區，以便可偵測到效能和操作問題的早期跡象。

# 設定 VPC 端點服務連線
<a name="vpc-connectivity"></a>

使用本節中的指引來建立和設定使用 [VPC 端點服務連線](choose-xks-connectivity.md#xks-vpc-connectivity)的外部金鑰存放區所需的 AWS 資源和相關元件。針對此連接選項列出的資源是[所有外部金鑰存放區所需資源](create-xks-keystore.md#xks-requirements)的補充。建立並設定所需資源後，您可以[建立外部金鑰存放區](create-xks-keystore.md)。

您可以在 Amazon VPC 中找到外部金鑰存放區代理，或在 外部找到代理 AWS ，並使用 VPC 端點服務進行通訊。

開始之前，[請確認您需要外部金鑰存放區](keystore-external.md#do-i-need-xks)。大多數客戶都可以使用金鑰材料支援的 KMS AWS KMS 金鑰。

**注意**  
VPC 端點服務連接所需的一些元素可能包含在外部金鑰管理器中。此外，您的軟體可能還有其他組態要求。在建立和設定本節中的 AWS 資源之前，請參閱您的代理和金鑰管理器文件。

**Topics**
+ [VPC 端點服務連接的要求](#xks-vpce-service-requirements)
+ [步驟 1：建立 Amazon VPC 和子網路](#xks-create-vpc)
+ [步驟 2：建立目標群組](#xks-target-group)
+ [步驟 3：建立網路負載平衡器](#xks-nlb)
+ [步驟 4：建立 VPC 端點服務](#xks-vpc-svc)
+ [步驟 5：驗證您的私有 DNS 名稱網域](#xks-private-dns)
+ [步驟 6：授權 AWS KMS 連線至 VPC 端點服務](#xks-vpc-authorize-kms)

## VPC 端點服務連接的要求
<a name="xks-vpce-service-requirements"></a>

如果您為外部金鑰存放區選擇 VPC 端點服務連接，則需要下列資源。
+ 連接到外部金鑰管理器的 Amazon VPC。其在兩個不同可用區域中必須擁有至少兩個私有[子網路](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html)。

  您可以將現有的 Amazon VPC 用於外部金鑰存放區，前提是其[符合與外部金鑰存放區搭配使用的要求](#xks-vpc-requirements)。多個外部金鑰存放區可以共用 Amazon VPC，但是每個外部金鑰存放區都必須擁有自己的 VPC 端點服務和私有 DNS 名稱。
+ [由 AWS PrivateLink提供支援的 Amazon VPC 端點服務](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-share-your-services.html)，具有[網路負載平衡器](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/introduction.html)和[目標群組](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html)。

  端點服務無法要求接受。此外，您必須新增 AWS KMS 作為允許的主體。這可讓 AWS KMS 建立介面端點，以便與您的外部金鑰存放區代理通訊。
+ VPC 端點服務的私有 DNS 名稱在其 AWS 區域中是唯一的。

  私有 DNS 名稱必須是較高層級公有網域的子網域。例如，如果私有 DNS 名稱為 `myproxy-private.xks.example.com`，則其必須是公有網域的子網域，例如 `xks.example.com` 或 `example.com`。

  您必須[驗證私有 DNS 名稱的 DNS 網域的擁有權](#xks-private-dns)。
+ [支援的公有憑證授權機構](https://github.com/aws/aws-kms-xksproxy-api-spec/blob/main/TrustedCertificateAuthorities)為您的外部金鑰存放區代理核發的 TLS 憑證。

  TLS 憑證上的主體通用名稱 (CN) 必須與私有 DNS 名稱相符。例如，如果私有 DNS 名稱為 `myproxy-private.xks.example.com`，則 TLS 憑證上的 CN 必須為 `myproxy-private.xks.example.com` 或 `*.xks.example.com`。
+ 若要將網路延遲降至最低，請在最接近[外部金鑰管理器](keystore-external.md#concept-ekm)的[支援 AWS 區域](keystore-external.md#xks-regions) 中建立 AWS 元件。如果可能，請選擇網路封包來回時間 (RTT) 為 35 毫秒或更短的區域。

如需外部金鑰存放區的所有要求，請參閱[備妥先決條件](create-xks-keystore.md#xks-requirements)。

## 步驟 1：建立 Amazon VPC 和子網路
<a name="xks-create-vpc"></a>

VPC 端點服務連接需要一個 Amazon VPC，其使用至少兩個私有子網路連接到外部金鑰管理器。您可以建立 Amazon VPC，或使用符合外部金鑰存放區要求的現有 Amazon VPC。如需有關建立新 Amazon VPC 的說明，請參閱《Amazon 虛擬私有雲端使用者指南》**中的[建立 VPC](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#Create-VPC)。

### Amazon VPC 的要求
<a name="xks-vpc-requirements"></a>

Amazon VPC 端點服務必須具有下列屬性，才能使用外部金鑰存放區。
+ 必須位於[支援的區域中](keystore-external.md#xks-regions)，做為外部金鑰存放區。
+ 需要至少兩個私有子網路，每個處於不同的可用區域。
+ Amazon VPC 的私有 IP 地址範圍不得與託管[外部金鑰管理器](keystore-external.md#concept-ekm)之資料中心的私有 IP 地址範圍重疊。
+ 所有元件都必須使用 IPv4。

您有許多選項可將 Amazon VPC 連接到外部金鑰存放區代理。選擇可滿足您的效能和安全需求的選項。如需清單，請參閱[將您的 VPC 連接到其他網路](https://docs.aws.amazon.com/vpc/latest/userguide/extend-intro.html)和[網路到 Amazon VPC 連接選項](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)。如需詳細資訊，請參閱 [Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 和 [AWS Site-to-Site VPN 使用者指南](https://docs.aws.amazon.com/vpn/latest/s2svpn/)。

### 為您的外部金鑰存放區建立 Amazon VPC
<a name="xks-vpc-create"></a>

遵循以下指示建立外部金鑰存放區的 Amazon VPC。只有在選擇 [VPC 端點服務連接](choose-xks-connectivity.md)選項時，才需要 Amazon VPC。您可以使用符合外部金鑰存放區要求的現有 Amazon VPC。

遵循[建立 VPC、子網路和其他 VPC 資源](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-vpcs.html#create-vpc-and-other-resources)主題中的指示，使用以下所需值。對於其他欄位，請接受預設值，並按要求提供名稱。


| 欄位 | Value | 
| --- | --- | 
| IPv4 CIDR 區塊 | 輸入 VPC 的 IP 地址。Amazon VPC 的私有 IP 地址範圍不得與託管[外部金鑰管理器](keystore-external.md#concept-ekm)之資料中心的私有 IP 地址範圍重疊。 | 
| 可用區域 (AZ) 的數量 | 2 或以上 | 
| 公有子網路數量 |  需要空值 (0)  | 
| 私有子網路數量 | 每個 AZ 一個 | 
| NAT 閘道 | 需要空值。 | 
| VPC 端點 | 需要空值。 | 
| Enable DNS hostnames (啟用 DNS 主機名稱) | 是 | 
| 啟用 DNS 解析 | 是 | 

請務必測試 VPC 通訊。例如，如果您的外部金鑰存放區代理不在 Amazon VPC 中，則請在 Amazon VPC 中建立 Amazon EC2 執行個體，確認 Amazon VPC 可以與您的外部金鑰存放區代理通訊。

### 將 VPC 連接到外部金鑰管理器
<a name="xks-vpc-to-ekm"></a>

使用 Amazon VPC 支援的任何[網路連接選項](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)，將 VPC 連接到託管外部金鑰管理器的資料中心。確保 VPC 中的 Amazon EC2 執行個體 (或外部金鑰存放區代理 (如果位於 VPC 中) 可以與資料中心和外部金鑰管理器通訊。

## 步驟 2：建立目標群組
<a name="xks-target-group"></a>

建立必要的 VPC 端點服務之前，請先建立其必要元件、網路負載平衡器 (NLB) 和目標群組。網路負載平衡器 (NLB) 會在多個狀態良好的目標之間分佈請求，其中任何一個都可以為請求提供服務。在此步驟中，您會為外部金鑰存放區代理建立至少具有兩個主機的目標群組，並向目標群組註冊 IP 地址。

遵循[設定目標群組](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html#configure-target-group)主題中的指示，使用以下所需值。對於其他欄位，請接受預設值，並按要求提供名稱。


| 欄位 | Value | 
| --- | --- | 
| Target type (目標類型) | IP 位址 | 
| 通訊協定 | TCP | 
| 站點 |  443  | 
| IP 地址類型 | IPv4 | 
| VPC | 選擇您要在其中為外部金鑰存放區建立 VPC 端點服務的 VPC。 | 
| 運作狀態檢查通訊協定和路徑 | 您的運作狀態檢查通訊協定和路徑會因外部金鑰存放區代理組態而有所不同。請參閱外部金鑰管理器或外部金鑰存放區代理的文件。如需有關針對目標群組設定運作狀態檢查的一般資訊，請參閱《Network Load Balancer 之 Elastic Load Balancing 使用者指南》中的[目標群組運作狀態檢查](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/target-group-health-checks.html)。 | 
| 網路 | 其他私有 IP 地址 | 
| IPv4 地址 | 外部金鑰存放區代理的私有地址 | 
| 連接埠 | 443 | 

## 步驟 3：建立網路負載平衡器
<a name="xks-nlb"></a>

網路負載平衡器會將網路流量 (包括從 AWS KMS 到外部金鑰存放區代理的請求) 分佈至設定的目標。

遵循[設定負載平衡器和接聽程式](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-network-load-balancer.html#configure-load-balancer)主題中的指示，設定和新增接聽程式，並使用下列必要值建立負載平衡器。對於其他欄位，請接受預設值，並按要求提供名稱。


| 欄位 | Value | 
| --- | --- | 
| Scheme | 內部 (Internal) | 
| IP 地址類型 | IPv4 | 
| 網路映射 |  選擇您要在其中為外部金鑰存放區建立 VPC 端點服務的 VPC。  | 
| 映射 | 選擇您為 VPC 子網路設定的兩個可用區域 (至少兩個)。驗證子網路名稱和私有 IP 地址。 | 
| 通訊協定 | TCP | 
| 站點 | 443 | 
| 預設動作：轉送至 | 選擇網路負載平衡器的[目標群組](#xks-target-group)。 | 

## 步驟 4：建立 VPC 端點服務
<a name="xks-vpc-svc"></a>

通常，您會建立服務的端點。不過，當您建立 VPC 端點服務時，您是提供者，並為您的服務 AWS KMS 建立端點。對於外部金鑰存放區，請使用您在上一個步驟中建立的網路負載平衡器建立 VPC 端點服務。VPC 端點服務可以 AWS 帳戶 與您的外部金鑰存放區或不同的 位於相同的 中 AWS 帳戶。

多個外部金鑰存放區可以共用 Amazon VPC，但是每個外部金鑰存放區都必須擁有自己的 VPC 端點服務和私有 DNS 名稱。

遵循[建立端點服務](https://docs.aws.amazon.com/vpc/latest/privatelink/create-endpoint-service.html#create-endpoint-service-nlb)主題中的指示，使用下列必要值建立 VPC 端點服務。對於其他欄位，請接受預設值，並按要求提供名稱。


| 欄位 | Value | 
| --- | --- | 
| 負載平衡器類型 | 網路 | 
| 可用的負載平衡器 | 選擇您在上一步驟中建立的[網路負載平衡器](#xks-nlb)。如果您的新負載平衡器未出現在清單中，請確認它處於作用中狀態。負載平衡器狀態可能需要幾分鐘才能從佈建變更為作用中。 | 
| 需要接受 | False。取消勾選核取方塊。*不需要接受*。若未手動接受， AWS KMS 則無法連線至 VPC 端點服務。如果需要接受，嘗試[建立外部金鑰存放區](create-xks-keystore.md)會失敗，並出現 `XksProxyInvalidConfigurationException` 例外狀況。 | 
| 啟用私有 DNS 名稱 | 將私有 DNS 名稱與服務建立關聯 | 
| 私有 DNS 名稱 | 輸入在其 AWS 區域中唯一的私有 DNS 名稱。私有 DNS 名稱必須是較高層級公有網域的子網域。例如，如果私有 DNS 名稱為 `myproxy-private.xks.example.com`，則其必須是公有網域的子網域，例如 `xks.example.com` 或 `example.com`。此私有 DNS 名稱必須與外部金鑰存放區代理上設定的 TLS 憑證中的主體通用名稱 (CN) 相符。例如，如果私有 DNS 名稱為 `myproxy-private.xks.example.com`，則 TLS 憑證上的 CN 必須為 `myproxy-private.xks.example.com` 或 `*.xks.example.com`。如果憑證和私有 DNS 名稱不相符，則嘗試將外部金鑰存放區連接至其外部金鑰存放區代理會失敗，並顯示 `XKS_PROXY_INVALID_TLS_CONFIGURATION` 的連接錯誤代碼。如需詳細資訊，請參閱[一般組態錯誤](xks-troubleshooting.md#fix-xks-gen-configuration)。 | 
| 支援的 IP 地址類型 | IPv4 | 

## 步驟 5：驗證您的私有 DNS 名稱網域
<a name="xks-private-dns"></a>

建立 VPC 端點服務時，其網域驗證狀態為 `pendingVerification`。在使用 VPC 端點服務建立外部金鑰存放區之前，此狀態必須為 `verified`。若要確認您擁有與私有 DNS 名稱相關聯的網域，您必須在公有 DNS 伺服器中建立 TXT 記錄。

例如，如果 VPC 端點服務的私有 DNS 名稱為 `myproxy-private.xks.example.com`，您必須在公有網域中建立 TXT 記錄，例如 `xks.example.com`或 `example.com`，以 public. AWS PrivateLink looks 為準，先在 上，`xks.example.com`再於 上建立 TXT 記錄`example.com`。

**提示**  
新增 TXT 記錄之後，**Domain verification status** (網域驗證狀態) 值可能需要幾分鐘才能從 `pendingVerification` 變更為 `verify`。

若要開始，請使用下列其中一種方法查找網域的驗證狀態。有效值為 `verified`、`pendingVerification` 和 `failed`。
+ 在 [Amazon VPC 主控台](https://console.aws.amazon.com/vpc)中，選擇 **Endpoint services** (端點服務)，然後選擇您的端點服務。在詳細資訊窗格中，請查看 **Domain verification status** (網域驗證狀態)。
+ 使用 [DescribeVpcEndpointServiceConfigurations](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeVpcEndpointServiceConfigurations.html) 操作。`State` 值位於 `ServiceConfigurations.PrivateDnsNameConfiguration.State` 欄位中。

如果驗證狀態不是 `verified`，請遵循[網域擁有權驗證](https://docs.aws.amazon.com/vpc/latest/privatelink/manage-dns-names.html#verify-domain-ownership)主題中的指示，將 TXT 記錄新增至網域的 DNS 伺服器，並確認 TXT 記錄已發佈。然後再次檢查您的驗證狀態。

您不需要為私有 DNS 網域名稱建立 A 記錄。當 為您的 VPC 端點服務 AWS KMS 建立界面端點時， AWS PrivateLink 會自動建立託管區域，其中包含 AWS KMS VPC 中私有網域名稱所需的 A 記錄。對於具有 VPC 端點服務連接的外部金鑰存放區，當您[將外部金鑰存放區連接至](xks-connect-disconnect.md)其外部金鑰存放區代理時，會發生這種情況。

## 步驟 6：授權 AWS KMS 連線至 VPC 端點服務
<a name="xks-vpc-authorize-kms"></a>

請參閱下列管理 Amazon VPC 端點服務許可的程序。每個步驟取決於外部金鑰存放區、VPC 端點服務和 之間的連線和組態 AWS 帳戶。

------
#### [ Same AWS 帳戶 ]

當您的 VPC 端點服務擁有 AWS 帳戶 與外部金鑰存放區相同的 時，您必須將 AWS KMS 新增至 VPC 端點服務的**允許委託人**清單。這可讓 AWS KMS 建立 VPC 端點服務的介面端點。如果 AWS KMS 不是允許的委託人，則嘗試建立外部金鑰存放區將會失敗，但有`XksProxyVpcEndpointServiceNotFoundException`例外。

遵循《AWS PrivateLink 指南》**中的[管理許可](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)主題。使用以下所需值。


| 欄位 | Value | 
| --- | --- | 
| AWS KMS ARN | cks.kms.<region>.amazonaws.com例如 `cks.kms.us-east-1.amazonaws.com` | 

------
#### [ Cross AWS 帳戶 ]

當您的 VPC 端點服務由其他人擁有時 AWS 帳戶 ，您必須同時將 AWS KMS 和您的帳戶新增至**允許委託人**清單。這可讓 AWS KMS 和您的外部金鑰存放區建立 VPC 端點服務的介面端點。如果 AWS KMS 不是允許的主體，嘗試建立外部金鑰存放區將會失敗，並出現 `XksProxyVpcEndpointServiceNotFoundException` 例外狀況。您需要提供外部金鑰存放區所在的 AWS 帳戶 ARN。

遵循《AWS PrivateLink 指南》**中的[管理許可](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)主題。使用以下所需值。


| 欄位 | Value | 
| --- | --- | 
| AWS KMS ARN | cks.kms.<region>.amazonaws.com例如 `cks.kms.us-east-1.amazonaws.com` | 
| AWS 帳戶 ARN | arn:aws:iam::111122223333:role/role\$1name例如 `arn:aws:iam::123456789012:role/cks_role` | 

------

**下一頁:** [建立外部金鑰存放區](create-xks-keystore.md)

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

您可以在每個 AWS 帳戶 和區域中建立一或多個外部金鑰存放區。每個外部金鑰存放區都必須與外部金鑰管理器相關聯 AWS，以及一個外部金鑰存放區代理 (XKS 代理），其會媒介 AWS KMS 和外部金鑰管理器之間的通訊。如需詳細資訊，請參閱[選擇外部金鑰存放區代理連線選項](choose-xks-connectivity.md)。開始之前，[請確認您需要外部金鑰存放區](keystore-external.md#do-i-need-xks)。大多數客戶都可以使用金鑰材料支援的 KMS AWS KMS 金鑰。

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

在您建立外部金鑰存放區之前，您需要[備妥先決條件](#xks-requirements)。在建立過程中，您可以指定外部金鑰存放區的屬性。最重要的是，您可以指出 中的外部金鑰存放區是否 AWS KMS 使用[公有端點](choose-xks-connectivity.md#xks-connectivity-public-endpoint)或 [VPC 端點服務](choose-xks-connectivity.md#xks-vpc-connectivity)連線到其外部金鑰存放區代理。您也可以指定連線詳細資訊，包括代理的 URI 端點，以及 將 API 請求 AWS KMS 傳送至代理的代理端點內路徑。

**考量事項**
+ KMS 無法透過 IPv6 與外部金鑰存放區通訊。
+  如果您使用公有端點連線，請確定 AWS KMS 可以使用 HTTPS 連線透過網際網路與您的代理通訊。這包括在外部金鑰存放區代理上設定 TLS，並確保 AWS KMS 和代理之間的任何防火牆允許往返代理上連接埠 443 的 IPv4 流量。建立具有公有端點連線的外部金鑰存放區時， 會透過將狀態請求傳送至外部金鑰存放區代理來 AWS KMS 測試連線。此測試會驗證端點是否可連接，以及您的外部金鑰存放區代理是否將接受使用[外部金鑰存放區代理身分驗證憑證](keystore-external.md#concept-xks-credential)簽署的請求。如果此測試請求失敗，則建立外部金鑰存放區的操作失敗。
+ 如果您使用 VPC 端點服務連接，則請確定網路負載平衡器、私有 DNS 名稱和 VPC 端點服務設定正確且可運作。如果外部金鑰存放區代理不在 VPC 中，您需要確保 VPC 端點服務可以與外部金鑰存放區代理通訊。（當您[將外部金鑰存放區](xks-connect-disconnect.md)連線至其外部金鑰存放區代理時AWS KMS ，測試 VPC 端點服務連線。)
+ AWS KMS 會記錄 [Amazon CloudWatch 指標和維度](monitoring-cloudwatch.md#kms-metrics)，尤其是外部金鑰存放區。根據其中一些指標監控圖形會顯示在每個外部金鑰存放區的 AWS KMS 主控台中。我們強烈建議您使用這些指標來建立監控外部金鑰存放區的警示。這些警示會在效能和操作問題的相關跡象發生之前提醒您。如需說明，請參閱[監控外部金鑰存放區](xks-monitoring.md)。
+ 外部金鑰存放區受[資源配額](resource-limits.md#cks-resource-quota)限制。在外部金鑰存放區中使用 KMS 金鑰會受到[請求配額](requests-per-second.md#rps-key-stores)的限制。在設計外部金鑰存放區實作之前，請檢閱這些配額。

**注意**  
檢閱您的組態，了解可能導致其無法運作的循環相依性。  
例如，如果您使用 AWS 資源建立外部金鑰存放區代理，請確定操作代理不需要在透過該代理存取的外部金鑰存放區中使用 KMS 金鑰。

在中斷連接的狀態下建立所有新的外部金鑰存放區。在外部金鑰存放區中建立 KMS 金鑰之前，必須先[將其連接](about-xks-connecting.md)至外部金鑰存放區代理。若要變更外部金鑰存放區的屬性，請[編輯外部金鑰存放區設定](update-xks-keystore.md)。

**Topics**
+ [備妥先決條件](#xks-requirements)
+ [建立新的外部金鑰存放區](#create-xks)

## 備妥先決條件
<a name="xks-requirements"></a>

在建立外部金鑰存放區之前，您需要組合必要的元件，包括您將用來支援外部金鑰存放區的[外部金鑰管理器](keystore-external.md#concept-ekm)，以及將 AWS KMS 請求轉譯為外部金鑰管理器可理解格式的[外部金鑰存放區代理](keystore-external.md#concept-xks-proxy)。

所有外部金鑰存放區都需要下列元件。除了這些元件之外，您還需要提供其他元件來支援您選擇的[外部金鑰存放區代理連接選項](choose-xks-connectivity.md)。

**提示**  
您的外部金鑰管理器可能包含其中一些元件，也可能會為您設定這些元件。如需詳細資訊，請參閱外部金鑰管理器文件。  
如果您要在 AWS KMS 主控台中建立外部金鑰存放區，您可以選擇上傳以 JSON 為基礎的[代理組態檔案](#proxy-configuration-file)，以指定[代理 URI 路徑](#require-path)和[代理身分驗證憑證](keystore-external.md#concept-xks-credential)。某些外部金鑰存放區代理會為您產生此檔案。如需詳細資訊，請參閱外部金鑰存放區代理或外部金鑰管理器的文件。

### 外部金鑰管理器
<a name="require-ekm"></a>

每個外部金鑰存放區至少需要一個[外部金鑰管理器](keystore-external.md#concept-ekm)執行個體。這可以是實體或虛擬硬體安全模組 (HSM)，也可以是金鑰管理軟體。

您可以使用單一金鑰管理器，但建議有至少兩個相關的金鑰管理器執行個體共用密碼編譯金鑰以進行備援。外部金鑰存放區不需要獨佔使用外部金鑰管理器。不過，外部金鑰管理器必須具有處理來自使用外部金鑰存放區中 KMS 金鑰之 AWS 服務的預期加密和解密請求頻率的容量。您的外部金鑰管理器應設定為每秒最多可處理 1800 個請求，並在每個請求的 250 毫秒逾時內回應。我們建議您將外部金鑰管理器靠近 ， AWS 區域 以便網路往返時間 (RTT) 為 35 毫秒或更短。

如果您的外部金鑰存放區代理允許，則您可以變更與外部金鑰存放區代理關聯的外部金鑰管理器，但新的外部金鑰管理器必須是具有相同金鑰材料的備份或快照。如果您與 KMS 金鑰相關聯的外部金鑰不再可供外部金鑰存放區代理使用， AWS KMS 則 無法解密使用 KMS 金鑰加密的加密文字。

外部金鑰管理器必須可供外部金鑰存放區代理存取。如果來自代理的 [GetHealthStatus](keystore-external.md#xks-concepts) 回應報告所有外部金鑰管理器執行個體都為 `Unavailable`，則建立外部金鑰存放區的所有嘗試都會失敗，並顯示 [`XksProxyUriUnreachableException`](xks-troubleshooting.md#fix-xks-proxy)。

### 外部金鑰存放區代理
<a name="require-proxy"></a>

您必須指定[外部金鑰存放區代理](keystore-external.md#concept-xks-proxy) (XKS 代理)，其符合 [AWS KMS 外部金鑰存放區代理規格](https://github.com/aws/aws-kms-xksproxy-api-spec/)中的設計需求。您可以開發或購買外部金鑰存放區代理，或使用外部金鑰存放區代理提供或內建於外部金鑰管理器中。 AWS KMS 建議將外部金鑰存放區代理設定為每秒處理最多 1800 個請求，並在每個請求的 250 毫秒逾時內回應。我們建議您將外部金鑰管理器靠近 ， AWS 區域 以便網路往返時間 (RTT) 為 35 毫秒或更短。

您可以將外部金鑰存放區代理用於多個外部金鑰存放區，但是每個外部金鑰存放區在其請求的外部金鑰存放區代理內必須具有唯一的 URI 端點和路徑。

如果您使用的是 VPC 端點服務連接，則可以在 Amazon VPC 中找到外部金鑰存放區代理，但這不是必需的。您可以在 外部找到代理 AWS，例如在私有資料中心，並僅使用 VPC 端點服務與代理通訊。

### 代理身分驗證憑證
<a name="require-credential"></a>

若要建立外部金鑰存放區，您必須指定外部金鑰存放區代理身分驗證憑證 (`XksProxyAuthenticationCredential`)。

您必須在外部金鑰存放區 proxy AWS KMS 上建立 的[身分驗證憑證](keystore-external.md#concept-xks-credential) (`XksProxyAuthenticationCredential`)。透過使用 [Signature 第 4 版 (SigV4) 程序](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)搭配外部金鑰存放區 AWS KMS 代理身分驗證憑證來簽署代理的請求，以對您的代理進行身分驗證。您可以在建立外部金鑰存放區時指定身分驗證憑證，而且您可以隨時[將其變更](update-xks-keystore.md)。如果代理輪換憑證，則請務必更新外部金鑰存放區的憑證值。

代理身分驗證憑證有兩部分。您必須為外部金鑰存放區提供這兩部分。
+ 存取金鑰 ID：識別私密存取金鑰。您可以提供純文字形式的 ID。
+ 私密存取金鑰： Credential 的私密部分。在儲存私密存取金鑰之前， 會在登入資料中 AWS KMS 加密私密存取金鑰。

 AWS KMS 用來簽署外部金鑰存放區代理請求的 SigV4 登入資料與您 AWS 帳戶中任何主體相關聯的任何 AWS Identity and Access Management SigV4 登入資料無關。請勿針對外部金鑰存放區代理重複使用任何 IAM SigV4 憑證。

### 代理連接
<a name="require-connectivity"></a>

若要建立外部金鑰存放區，您必須指定外部金鑰存放區代理連接選項 (`XksProxyConnectivity`)。

AWS KMS 可以使用[公有端點](choose-xks-connectivity.md#xks-connectivity-public-endpoint)或 [Amazon Virtual Private Cloud (Amazon VPC) 端點服務](choose-xks-connectivity.md#xks-vpc-connectivity)與您的外部金鑰存放區代理通訊。雖然公有端點的設定和維護較為簡單，但可能不符合每個安裝的安全需求。如果選擇 Amazon VPC 端點服務連接選項，則必須建立和維護所需元件，包括在兩個不同可用區域中至少具有兩個子網路的 Amazon VPC、具有網路負載平衡器和目標群組的 VPC 端點服務，以及 VPC 端點服務的私有 DNS 名稱。

您可以變更外部金鑰存放區的[代理連接選項](update-xks-keystore.md)。但是，您必須確保與外部金鑰存放區中 KMS 金鑰相關聯的金鑰材料持續可用。否則， AWS KMS 無法解密使用這些 KMS 金鑰加密的任何加密文字。

如需決定哪個代理連接選項最適合您的外部金鑰存放區的說明，請參閱 [選擇外部金鑰存放區代理連線選項](choose-xks-connectivity.md)。如需建立和設定 VPC 端點服務連接的說明，請參閱 [設定 VPC 端點服務連線](vpc-connectivity.md)。

### 代理 URI 端點
<a name="require-endpoint"></a>

若要建立外部金鑰存放區，您必須指定 AWS KMS 用來將請求傳送至外部金鑰存放區代理的端點 (`XksProxyUriEndpoint`)。

通訊協定必須是連接埠 443 上透過 IPv4 的 HTTPS. AWS KMS communicates。請勿在代理 URI 端點值中指定連接埠。
+ [公有端點連接](choose-xks-connectivity.md#xks-connectivity-public-endpoint) – 指定外部金鑰存放區代理的公開可用端點。在建立外部金鑰存放區之前，必須可連接此端點。
+ [VPC 端點服務連接](choose-xks-connectivity.md#xks-vpc-connectivity) – 指定 `https://`，後跟 VPC 端點服務的私有 DNS 名稱。

在外部金鑰存放區代理上設定的 TLS 伺服器憑證必須與外部金鑰存放區代理 URI 端點中的網域名稱相符，並由外部金鑰存放區支援的憑證授權機構發行。如需清單，請參閱[受信任的憑證授權機構](https://github.com/aws/aws-kms-xksproxy-api-spec/blob/main/TrustedCertificateAuthorities)。在發行 TLS 憑證之前，您的憑證授權機構將要求提供網域擁有權證明。

TLS 憑證上的主體通用名稱 (CN) 必須與私有 DNS 名稱相符。例如，如果私有 DNS 名稱為 `myproxy-private.xks.example.com`，則 TLS 憑證上的 CN 必須為 `myproxy-private.xks.example.com` 或 `*.xks.example.com`。

您可以[變更代理 URI 端點](update-xks-keystore.md)，但請確定外部金鑰存放區代理可存取與外部金鑰存放區中 KMS 金鑰相關聯的金鑰材料。否則， AWS KMS 無法解密使用這些 KMS 金鑰加密的任何加密文字。

**唯一性要求**
+ 組合的代理 URI 端點 (`XksProxyUriEndpoint`) 和代理 URI 路徑 (`XksProxyUriPath`) 值在 AWS 帳戶 和區域中必須唯一。
+ 具有公有端點連接的外部金鑰存放區可以共用相同的代理 URI 端點，前提是其具有不同的代理 URI 路徑值。
+ 具有公有端點連線能力的外部金鑰存放區無法使用與具有相同 VPC 端點服務連線能力的任何外部金鑰存放區相同的代理 URI 端點值 AWS 區域，即使金鑰存放區不同 AWS 帳戶。
+  具有 VPC 端點連接的每個外部金鑰存放區都必須有自己的私有 DNS 名稱。代理 URI 端點 （私有 DNS 名稱） 在 AWS 帳戶 和 區域中必須是唯一的。

### 代理 URI 路徑
<a name="require-path"></a>

若要建立外部金鑰存放區，您必須在外部金鑰存放區代理中指定[所需代理 API](keystore-external.md#concept-proxy-apis) 的基本路徑。該值必須以 `/` 開頭，且必須以 /kms/xks/v1 結尾，其中 `v1` 表示外部金鑰存放區代理的 AWS KMS API 版本。此路徑可以在必要元素之間包含選用字首，例如 `/example-prefix/kms/xks/v1`。若要尋找此值，請參閱外部金鑰存放區代理的文件。

AWS KMS 會將代理請求傳送到代理 URI 端點和代理 URI 路徑串連指定的地址。例如，如果代理 URI 端點為 `https://myproxy.xks.example.com`且代理 URI 路徑為 `/kms/xks/v1`， 會將其代理 API 請求 AWS KMS 傳送至 `https://myproxy.xks.example.com/kms/xks/v1`。

您可以[變更代理 URI 路徑](update-xks-keystore.md)，但請確定外部金鑰存放區代理可存取與外部金鑰存放區中 KMS 金鑰相關聯的金鑰材料。否則， AWS KMS 無法解密使用這些 KMS 金鑰加密的任何加密文字。

**唯一性要求**
+ 組合的代理 URI 端點 (`XksProxyUriEndpoint`) 和代理 URI 路徑 (`XksProxyUriPath`) 值在 AWS 帳戶 和區域中必須唯一。

### VPC 端點服務
<a name="require-vpc-service-name"></a>

指定用於與外部金鑰存放區代理通訊的 Amazon VPC 端點服務名稱。只有使用 VPC 端點服務連接的外部金鑰存放區才需要此元件。如需為外部金鑰存放區設定和配置 VPC 端點服務的說明，請參閱 [設定 VPC 端點服務連線](vpc-connectivity.md)。

VPC 端點服務必須具有下列屬性：
+ VPC 端點服務可以位於與 AWS 帳戶 外部金鑰存放區相同的或不同的 中。
  + VPC 端點服務必須位於與外部金鑰存放區 AWS 區域 相同的 中。
  + 如果 VPC 端點服務位於不同的 中，您將需要提供 VPC 端點服務的 AWS 帳戶 ID AWS 帳戶。
+ 其必須擁有已連接到至少兩個子網路的網路負載平衡器 (NLB)，每個位於不同的可用區域中。
+ VPC 端點服務的*允許主體清單*必須包含區域的 AWS KMS 服務主體：`cks.kms.<region>.amazonaws.com`，例如 `cks.kms.us-east-1.amazonaws.com`。
  + 如果您的 Amazon VPC 端點服務是由 AWS 帳戶 與 AWS 帳戶 擁有外部金鑰存放區 (XKS) 不同的 所擁有，您也需要允許 XKS 存取 VPC 端點服務。若要這麼做，[請允許將 XKS AWS 帳戶 ID 列為 Amazon VPC 端點服務的主體](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)。
+ 其不能要求接受連接請求。
+ 其在較高級別的公有網域中必須具有私有 DNS 名稱。例如，在公有 `xks.example.com` 網域中擁有私有 DNS 名稱 myproxy-private.xks.example.com。

  具有 VPC 端點服務連接之外部金鑰存放區的私有 DNS 名稱在其 AWS 區域中必須唯一。
+ 私有 DNS 名稱網域的[網域驗證狀態](vpc-connectivity.md#xks-private-dns)必須為 `verified`。
+ 在外部金鑰存放區代理上設定的 TLS 伺服器憑證必須指定可連接端點的私有 DNS 主機名稱。

**唯一性要求**
+ 具有 VPC 端點連接的外部金鑰存放區可以共用 `Amazon VPC`，但是每個外部金鑰存放區都必須有自己的 VPC 端點服務和私有 DNS 名稱。

### 代理組態檔案
<a name="proxy-configuration-file"></a>

*代理組態檔案*是一個可選的基於 JSON 的檔案，其中包含外部金鑰存放區的[代理 URI 路徑](#require-path)和[代理身分驗證憑證](#require-credential)屬性的值。在 AWS KMS 主控台中建立或[編輯外部金鑰存放區](update-xks-keystore.md)時，您可以上傳代理組態檔案，以提供外部金鑰存放區的組態值。使用此檔案可避免輸入和貼上錯誤，並確保外部金鑰存放區中的值與外部金鑰存放區代理中的值相符。

代理組態檔案由外部金鑰存放區代理產生。若要了解您的外部金鑰存放區代理是否提供代理組態檔案，請參閱您的外部金鑰存放區代理文件。

以下是具有虛構值的正確代理組態檔案範例。

```
{
  "XksProxyUriPath": "/example-prefix/kms/xks/v1",
  "XksProxyAuthenticationCredential": {
    "AccessKeyId": "ABCDE12345670EXAMPLE",
    "RawSecretAccessKey": "0000EXAMPLEFA5FT0mCc3DrGUe2sti527BitkQ0Zr9MO9+vE="
  }
}
```

您只能在 AWS KMS 主控台中建立或編輯外部金鑰存放區時上傳代理組態檔案。您無法將其與 [CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html) 或 [UpdateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateCustomKeyStore.html) 操作搭配使用，但您可以使用代理組態檔案中的值來確保您的參數值正確無誤。

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

組合必要的先決條件後，您可以在 AWS KMS 主控台中或使用 [CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html) 操作建立新的外部金鑰存放區。

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

在建立外部金鑰存放區之前，[請選擇您的代理連線類型](choose-xks-connectivity.md)，並確保您已建立並設定所有必要的[元件](#xks-requirements)。如果您需要尋找任何必要值的說明，請參閱外部金鑰存放區代理或金鑰管理軟體的文件。

**注意**  
在 中建立外部金鑰存放區時 AWS 管理主控台，您可以上傳 JSON 型*代理組態檔案*，其中包含[代理 URI 路徑](#require-path)和[代理身分驗證憑證](#require-credential)的值。某些代理會為您產生此檔案。這不是必要的。

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. 選擇 **Create external key store** (建立外部金鑰存放區)。

1. 輸入外部金鑰存放區的易記名稱。該名稱在帳戶的所有外部金鑰存放區中必須唯一。
**重要**  
請勿在此欄位包含機密或敏感資訊。此欄位可能以純文字顯示於 CloudTrail 日誌與其他輸出。

1. 選擇您的[代理連接](#require-connectivity)類型。

   您的代理連接選項會決定外部金鑰存放區代理[所需的元件](#xks-requirements)。如需進行此選擇的說明，請參閱 [選擇外部金鑰存放區代理連線選項](choose-xks-connectivity.md)。

   1. 如果您的 **VPC 端點服務位於不同的 中，請選取跨帳戶** VPC 端點服務 AWS 帳戶。然後在 VPC 端點服務擁有者帳戶 AWS 帳戶 ID 欄位中輸入 VPC 端點擁有者的 ID。 ****

   1. 選擇或輸入此外部金鑰存放區的 [VPC 端點服務](#require-vpc-service-name)名稱。只有在外部金鑰存放區代理連線類型為 **VPC 端點服務**時，才會顯示此步驟。

      VPC 端點服務及其 VPC 必須滿足外部金鑰存放區的要求。如需詳細資訊，請參閱[備妥先決條件](#xks-requirements)。

1. 選擇或輸入此外部金鑰存放區的 [VPC 端點服務](#require-vpc-service-name)名稱。只有當外部金鑰存放區代理連接類型為 **VPC endpoint service** (VPC 端點服務) 時，此步驟才會出現。

   VPC 端點服務及其 VPC 必須滿足外部金鑰存放區的要求。如需詳細資訊，請參閱[備妥先決條件](#xks-requirements)。

1. 輸入您的[代理 URI 端點](#require-endpoint)。通訊協定必須是連接埠 443 上透過 IPv4 的 HTTPS. AWS KMS communicates。請勿在代理 URI 端點值中指定連接埠。

   如果 AWS KMS 辨識您在上一個步驟中指定的 VPC 端點服務，它會為您完成此欄位。

   若為公有端點連接，請輸入公開可用的端點 URI。若為 VPC 端點連接，請輸入 `https://`，後跟 VPC 端點服務的私有 DNS 名稱。

1. 若要輸入[代理 URI 路徑](#require-path)字首和[代理身分驗證憑證](#require-credential)的值，請上傳代理組態檔案，或手動輸入值。
   + 如果您有可選的[代理組態檔案](#proxy-configuration-file)，其中包含[代理 URI 路徑](#require-path.title)和[代理身分驗證憑證](#require-credential)的值，則請選擇 **Upload configuration file** (上傳組態檔案)。遵循步驟上傳檔案。

     上傳檔案時，主控台會在可編輯欄位中顯示檔案中的值。您可以立即變更值，或在建立外部金鑰存放區後[編輯這些值](update-xks-keystore.md)。

     若要顯示私密存取金鑰的值，請選擇 **Show secret access key** (顯示私密存取金鑰)。
   + 如果您沒有代理組態檔案，則可以手動輸入代理 URI 路徑和代理身分驗證憑證。

     1. 如果您沒有代理組態檔案，則可以手動輸入代理 URI。主控台會提供必要的 **/kms/xks/v1** 值。

        如果您的[代理 URI 路徑](#require-path)包含可選字首，例如 `/example-prefix/kms/xks/v1` 中的 `example-prefix`，則請在 **Proxy URI path prefix** (代理 URI 路徑字首) 欄位中輸入該字首。否則，請將欄位保留空白。

     1. 如果您沒有代理組態檔案，則可以手動輸入[代理身分驗證憑證](keystore-external.md#concept-xks-credential)。存取金鑰 ID 和私密存取金鑰都是必要項目。
        + 在 **Proxy credential: Access key ID** (代理憑證：存取金鑰 ID) 中，輸入代理身分驗證憑證的存取金鑰 ID。存取金鑰 ID 可識別私密存取金鑰。
        + 在 **Proxy credential: Secret access key** (代理憑證：私密存取金鑰) 中，輸入代理身分驗證憑證的私密存取金鑰。

        若要顯示私密存取金鑰的值，請選擇 **Show secret access key** (顯示私密存取金鑰)。

        此程序不會設定或變更您在外部金鑰存放區代理上建立的身分驗證憑證。其只是將這些值與您的外部金鑰存放區相關聯。如需有關設定、變更及輪換代理身分驗證憑證的資訊，請參閱外部金鑰存放區代理或金鑰管理軟體的文件。

        如果您的代理身分驗證憑證發生變更，則請編輯外部金鑰存放區的[憑證設定](update-xks-keystore.md)。

1. 選擇 **Create external key store** (建立外部金鑰存放區)。

當程序成功時，新的外部金鑰存放區會出現在帳戶和區域的外部金鑰存放區清單中。如果不成功，則會出現錯誤訊息來描述問題，並提供如何修正的說明。如果您需要更多協助，請參閱[外部金鑰的 CreateKey 錯誤](xks-troubleshooting.md#fix-external-key-create)。

**下一步**：不會自動連接新的外部金鑰存放區。您必須先[將外部金鑰存放區](xks-connect-disconnect.md)連接到其外部金鑰存放區代理，才能 AWS KMS keys 在外部金鑰存放區中建立 。

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

您可以使用建 [CreateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html) 操作來建立新的外部金鑰存放區。如需尋找必要參數值的說明，請參閱外部金鑰存放區代理或金鑰管理軟體的文件。

**提示**  
在使用 `CreateCustomKeyStore` 操作時，您無法上傳[代理組態檔案](#proxy-configuration-file)。但是，您可以使用代理組態檔案中的值來確保參數值正確無誤。

若要建立外部金鑰存放區，`CreateCustomKeyStore` 操作需要下列參數值。
+ `CustomKeyStoreName` – 外部金鑰存放區在帳戶中唯一的易用名稱。
**重要**  
請勿在此欄位包含機密或敏感資訊。此欄位可能以純文字顯示於 CloudTrail 日誌與其他輸出。
+ `CustomKeyStoreType` – 指定 `EXTERNAL_KEY_STORE`。
+ [`XksProxyConnectivity`](#require-connectivity) – 指定 `PUBLIC_ENDPOINT` 或 `VPC_ENDPOINT_SERVICE`。
+ [`XksProxyAuthenticationCredential`](keystore-external.md#concept-xks-credential) – 指定存取金鑰 ID 和私密存取金鑰 ID。
+ [`XksProxyUriEndpoint`](#require-endpoint) – AWS KMS 用於與外部金鑰存放區代理通訊的端點。
+ [`XksProxyUriPath`](#require-path) – 連接代理 API 的代理內路徑。
+ [`XksProxyVpcEndpointServiceName`](#require-vpc-service-name) – 僅當 `XksProxyConnectivity` 值為 `VPC_ENDPOINT_SERVICE` 時才需要。

**注意**  
如果您使用 1.0 AWS CLI 版，請在指定具有 HTTP 或 HTTPS 值的參數之前執行下列命令，例如 `XksProxyUriEndpoint` 參數。  

```
aws configure set cli_follow_urlparam false
```
否則， AWS CLI 版本 1.0 會將參數值取代為在該 URI 地址找到的內容，造成下列錯誤：  

```
Error parsing parameter '--xks-proxy-uri-endpoint': Unable to retrieve 
https:// : received non 200 status code of 404
```

下列範例使用虛構值。在執行命令之前，請將其取代為外部金鑰存放區的有效值。

建立具有公有端點連接的外部金鑰存放區。

```
$ aws kms create-custom-key-store
        --custom-key-store-name ExampleExternalKeyStorePublic \
        --custom-key-store-type EXTERNAL_KEY_STORE \
        --xks-proxy-connectivity PUBLIC_ENDPOINT \
        --xks-proxy-uri-endpoint https://myproxy.xks.example.com \
        --xks-proxy-uri-path /kms/xks/v1 \
        --xks-proxy-authentication-credential AccessKeyId=<value>,RawSecretAccessKey=<value>
```

建立具有 VPC 端點服務連接的外部金鑰存放區。

```
$ aws kms create-custom-key-store
        --custom-key-store-name ExampleExternalKeyStoreVPC \
        --custom-key-store-type EXTERNAL_KEY_STORE \
        --xks-proxy-connectivity VPC_ENDPOINT_SERVICE \
        --xks-proxy-vpc-endpoint-service-name com.amazonaws.vpce.us-east-1.vpce-svc-example \
        --xks-proxy-uri-endpoint https://myproxy-private.xks.example.com \
        --xks-proxy-uri-path /kms/xks/v1 \
        --xks-proxy-authentication-credential AccessKeyId=<value>,RawSecretAccessKey=<value>
```

當操作成功時，`CreateCustomKeyStore` 會傳回自訂金鑰存放區 ID，如下回應範例所示。

```
{
    "CustomKeyStoreId": cks-1234567890abcdef0
}
```

如果操作失敗，請修正例外狀況所指出的錯誤，然後重試。如需其他說明，請參閱[外部金鑰存放區故障診斷](xks-troubleshooting.md)。

**下一步**：若要使用外部金鑰存放區，請[將其連接至其外部金鑰存放區代理](xks-connect-disconnect.md)。

# 編輯外部金鑰存放區屬性
<a name="update-xks-keystore"></a>

您可以編輯現有外部金鑰存放區的所選屬性。

您可以在連接或中斷連接外部金鑰存放區時編輯某些屬性。對於其他屬性，您必須先[中斷外部金鑰存放區](xks-connect-disconnect.md)與其外部金鑰存放區代理的連接。外部金鑰存放區的[連接狀態](xks-connect-disconnect.md#xks-connection-state)必須是 `DISCONNECTED`。當外部金鑰存放區中斷連接時，您可以管理金鑰存放區和其 KMS 金鑰，但無法在外部金鑰存放區中建立或使用 KMS 金鑰。若要尋找外部金鑰存放區的[連接狀態](xks-connect-disconnect.md#xks-connection-state)，請使用 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作，或參閱外部金鑰存放區詳細資訊頁面上的 **General configuration** (一般組態) 區段。

更新外部金鑰存放區屬性之前， AWS KMS 會使用新值將 [GetHealthStatus](keystore-external.md#concept-proxy-apis) 請求傳送至外部金鑰存放區代理。如果請求成功，表示您可以使用更新後的屬性值連接至外部金鑰存放區代理並進行身分驗證。如果請求失敗，編輯操作將失敗，並顯示識別錯誤的例外狀況。

編輯操作完成時，外部金鑰存放區的更新屬性值會顯示在 AWS KMS 主控台和`DescribeCustomKeyStores`回應中。但是，變更需要 5 分鐘才能完全生效。

如果您在 AWS KMS 主控台中編輯外部金鑰存放區，您可以選擇上傳 JSON 型[代理組態檔案](create-xks-keystore.md#proxy-configuration-file)，以指定[代理 URI 路徑](create-xks-keystore.md#require-path)和[代理身分驗證憑證](keystore-external.md#concept-xks-credential)。某些外部金鑰存放區代理會為您產生此檔案。如需詳細資訊，請參閱外部金鑰存放區代理或外部金鑰管理器的文件。

**警告**  
更新的屬性值必須將外部金鑰存放區連接至與先前值相同的外部金鑰管理器的代理，或使用相同密碼編譯金鑰之外部金鑰管理器的備份或快照。如果您的外部金鑰存放區永久無法存取與其 KMS 金鑰相關聯的外部金鑰，則使用這些外部金鑰加密的密文將無法復原。特別是，變更外部金鑰存放區的代理連線可能會 AWS KMS 阻止 存取您的外部金鑰。

**提示**  
有些外部金鑰管理器會提供更簡單的方法來編輯外部金鑰存放區屬性。如需詳細資訊，請參閱外部金鑰管理器文件。

您可以變更外部金鑰存放區的下列屬性。


| 可編輯的外部金鑰存放區屬性 | 任何連接狀態 | 需要已中斷連接狀態 | 
| --- | --- | --- | 
| 自訂金鑰存放區名稱 自訂金鑰存放區的必要易記名稱。 請勿在此欄位包含機密或敏感資訊。此欄位可能在 CloudTrail 日誌與其他輸出中以純文字顯示。  | ![\[Green checkmark icon indicating success or completion.\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/icon-successful.png) |  | 
| [代理身分驗證憑證](keystore-external.md#concept-xks-credential) (XksProxyAuthenticationCredential)(您必須同時指定存取金鑰 ID 和私密存取金鑰，即使您只變更一個元素。) | ![\[Green checkmark icon indicating success or completion.\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/icon-successful.png) |  | 
| [代理 URI 路徑](create-xks-keystore.md#require-path) (XksProxyUriPath) | ![\[Green checkmark icon indicating success or completion.\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/icon-successful.png) |  | 
| [代理連接](keystore-external.md#concept-xks-connectivity) (XksProxyConnectivity)(您也必須更新代理 URI 端點。如果您要變更為 VPC 端點服務連接，則必須指定代理 VPC 端點服務名稱。) |  | ![\[Green checkmark icon indicating success or completion.\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/icon-successful.png) | 
| [代理 URI 端點](create-xks-keystore.md#require-endpoint) (XksProxyUriEndpoint)如果變更代理端點 URI，則您可能也需要變更相關的 TLS 憑證。 |  | ![\[Green checkmark icon indicating success or completion.\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/icon-successful.png) | 
| [代理 VPC 端點服務名稱](create-xks-keystore.md#require-vpc-service-name) (XksProxyVpcEndpointServiceName)(VPC 端點服務連接需要此欄位) |  | ![\[Green checkmark icon indicating success or completion.\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/icon-successful.png) | 
| [VPC 端點服務擁有者 ](create-xks-keystore.md#require-vpc-service-name) (XksProxyVpcEndpointServiceOwner)(VPC 端點服務連接需要此欄位) |  | ![\[Green checkmark icon indicating success or completion.\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/icon-successful.png) | 

## 編輯外部金鑰存放區的屬性
<a name="edit-xks-keystore"></a>

您可以在 AWS KMS 主控台或使用 [UpdateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateCustomKeyStore.html) 操作來編輯外部金鑰存放區的屬性。

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

編輯金鑰存放區時，您可以變更任何可編輯的值。某些變更需要將外部金鑰存放區與其外部金鑰存放區代理中斷連接。

如果您正在編輯代理 URI 路徑或代理身分驗證憑證，則可以輸入新值或上傳包含新值的外部金鑰存放區[代理組態檔案](create-xks-keystore.md#proxy-configuration-file)。

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. 如果需要，將外部金鑰存放區與其外部金鑰存放區代理中斷連接。從 **Key store actions** (金鑰存放區動作) 選單中，選擇 **Disconnect** (中斷連接)。

1. 從 **Key store actions** (金鑰存放區動作) 選單中，選擇 **Edit** (編輯)。

1. 變更一個或多個可編輯的外部金鑰存放區屬性。您也可以上傳外部金鑰存放區[代理組態檔案](create-xks-keystore.md#proxy-configuration-file)，其中包含代理 URI 路徑和代理身分驗證憑證的值。即使檔案中指定的某些值尚未變更，您仍可使用代理組態檔案。

1. 選擇 **Update external key store** (更新外部金鑰存放區)。

1. 檢閱警告，如果您決定繼續，請確認警告，然後選擇 **Update external key store** (更新外部金鑰存放區)。

   當程序成功時，會出現訊息描述您編輯的屬性。當操作失敗時，會出現錯誤訊息，其中描述問題並提供如何修正的協助。

1. 如有必要，請重新連接外部金鑰存放區。從 **Key store actions** (金鑰存放區動作) 選單中，選擇 **Connect** (連接)。

   您可以將外部金鑰存放區保持中斷連接。中斷連接時，您無法在外部金鑰存放區中建立 KMS 金鑰，並且無法在[密碼編譯操作](manage-cmk-keystore.md#use-cmk-keystore)中使用外部金鑰存放區中的 KMS 金鑰。

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

若要變更外部金鑰存放區的屬性，請使用 [UpdateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateCustomKeyStore.html) 操作。您可以在相同操作中變更外部金鑰存放區的多個屬性。如果操作成功， 會 AWS KMS 傳回 HTTP 200 回應和沒有屬性的 JSON 物件。

使用 `CustomKeyStoreId` 參數可識別外部金鑰存放區。使用其他參數來變更屬性。您無法將[代理組態檔案](create-xks-keystore.md#proxy-configuration-file)用於 `UpdateCustomKeyStore` 操作。代理組態檔案僅主控台支援 AWS KMS 。不過，您可以使用代理組態檔案來協助您判斷外部金鑰存放區代理的正確參數值。

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

在開始之前，[如果需要](#update-xks-keystore)，將[外部金鑰存放區](xks-connect-disconnect.md)與其外部金鑰存放區代理中斷連接。更新之後，如果需要，您可以將[外部金鑰存放區重新連接](xks-connect-disconnect.md)至其外部金鑰存放區代理。您可以將外部金鑰存放區保持在中斷連接狀態，但必須先重新將其連接，才能在金鑰存放區中建立新的 KMS 金鑰或使用金鑰存放區中的現有 KMS 金鑰進行密碼編譯操作。

**注意**  
如果您使用 1.0 AWS CLI 版，請在指定具有 HTTP 或 HTTPS 值的參數之前執行下列命令，例如 `XksProxyUriEndpoint` 參數。  

```
aws configure set cli_follow_urlparam false
```
否則， AWS CLI 版本 1.0 會將參數值取代為在該 URI 地址找到的內容，造成下列錯誤：  

```
Error parsing parameter '--xks-proxy-uri-endpoint': Unable to retrieve 
https:// : received non 200 status code of 404
```

#### 變更外部金鑰存放區的名稱
<a name="xks-edit-name"></a>

第一個範例使用 [UpdateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateCustomKeyStore.html) 操作，將外部金鑰存放區的易記名稱變更為 `XksKeyStore`。此命令使用 `CustomKeyStoreId` 參數來識別自訂金鑰存放區和 `CustomKeyStoreName` 來指定自訂金鑰存放區的新名稱。將所有範例值取代為外部金鑰存放區的實際值。

```
$ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 --new-custom-key-store-name XksKeyStore
```

#### 變更代理身分驗證憑證
<a name="xks-edit-credential"></a>

下列範例會更新 AWS KMS 用來驗證外部金鑰存放區代理的代理身分驗證憑證。如果在代理上輪換憑證，則可以使用類似這樣的命令來更新憑證。

請先更新外部金鑰存放區代理上的憑證。然後使用此功能將變更報告給 AWS KMS。（您的代理會短暫支援舊憑證和新憑證，讓您可以有時間在其中更新憑證 AWS KMS。)

您必須在憑證中同時指定存取金鑰 ID 和私密存取金鑰，即使只變更一個值。

前兩個命令設定變數來保留憑證值。`UpdateCustomKeyStore` 操作使用 `CustomKeyStoreId` 參數識別外部金鑰存放區。其會使用 `XksProxyAuthenticationCredential` 參數及其 `AccessKeyId` 和 `RawSecretAccessKey` 欄位來指定新的憑證。將所有範例值取代為外部金鑰存放區的實際值。

```
$ accessKeyID=access key id
$ secretAccessKey=secret access key

$ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 \
        --xks-proxy-authentication-credential \ 
            AccessKeyId=$accessKeyId,RawSecretAccessKey=$secretAccessKey
```

#### 變更代理 URI 路徑
<a name="xks-edit-path"></a>

下列範例會更新代理 URI 路徑 (`XksProxyUriPath`)。代理 URI 端點和代理 URI 路徑的組合在 AWS 帳戶 和 區域中必須是唯一的。將所有範例值取代為外部金鑰存放區的實際值。

```
$ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 \
            --xks-proxy-uri-path /kms/xks/v1
```

#### 變更為 VPC 端點服務連接
<a name="xks-edit-connectivity-vpc"></a>

下列範例使用 [UpdateCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_UpdateCustomKeyStore.html) 操作，將外部金鑰存放區代理連接類型變更為 `VPC_ENDPOINT_SERVICE`。若要進行此變更，您必須指定 VPC 端點服務連接的必要值，包括 VPC 端點服務名稱 (`XksProxyVpcEndpointServiceName`) 和包含 VPC 端點服務之私有 DNS 名稱的代理 URI 端點 (`XksProxyUriEndpoint`) 值。將所有範例值取代為外部金鑰存放區的實際值。

```
$ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 \
            --xks-proxy-connectivity "VPC_ENDPOINT_SERVICE" \
            --xks-proxy-uri-endpoint https://myproxy-private.xks.example.com \
            --xks-proxy-vpc-endpoint-service-name com.amazonaws.vpce.us-east-1.vpce-svc-example
```

#### 變更為公有端點連接
<a name="xks-edit-connectivity-public"></a>

下列範例會將外部金鑰存放區代理連接類型變更為 `PUBLIC_ENDPOINT`。當您進行此變更時，必須更新代理 URI 端點 (`XksProxyUriEndpoint`) 值。將所有範例值取代為外部金鑰存放區的實際值。

**注意**  
與公有端點連接相比，VPC 端點連接可提供更高的安全性。在變更為公有端點連接之前，請考慮其他選項，包括在內部部署中尋找外部金鑰存放區代理，以及僅將 VPC 用於通訊。

```
$ aws kms update-custom-key-store --custom-key-store-id cks-1234567890abcdef0 \
            --xks-proxy-connectivity "PUBLIC_ENDPOINT" \
            --xks-proxy-uri-endpoint https://myproxy.xks.example.com
```

# 檢視外部金鑰存放區
<a name="view-xks-keystore"></a>

您可以使用 AWS KMS 主控台或使用 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作來檢視每個帳戶和區域中的外部金鑰存放區。

檢視外部金鑰存放區時，您可以查看下列項目：
+ 有關金鑰存放區的基本資訊，包括其易記名稱、ID、金鑰存放區類型和建立日期。
+ [外部金鑰存放區代理](keystore-external.md#concept-xks-proxy)的組態資訊，包括[連接類型](keystore-external.md#concept-xks-connectivity)、[代理 URI 端點](create-xks-keystore.md#require-endpoint)和[路徑](create-xks-keystore.md#require-path)，以及當前[代理身分驗證憑證](keystore-external.md#concept-xks-credential)的[存取金鑰 ID](keystore-external.md#concept-xks-credential)。
+ 如果外部金鑰存放區代理使用 [VPC 端點服務連接](choose-xks-connectivity.md#xks-vpc-connectivity)，則主控台會顯示 VPC 端點服務的名稱。
+ 當前的[連接狀態](xks-connect-disconnect.md#xks-connection-state)。
**注意**  
連接狀態值 **Disconnected** (已中斷連接) 指示外部金鑰存放區從未連接，或它是特意從其外部金鑰存放區代理中斷連接。不過，如果嘗試在已連接的外部金鑰存放區中使用 KMS 金鑰失敗，可能表示外部金鑰存放區或其代理發生問題。如需協助，請參閱 [外部金鑰存放區連接錯誤](xks-troubleshooting.md#fix-xks-connection)。
+ 具有 [Amazon CloudWatch 指標](monitoring-cloudwatch.md#kms-metrics)圖形的 [Monitoring](xks-monitoring.md) (監控) 區段旨在協助您偵測並解決外部金鑰存放區的問題。如需解譯圖形、在規劃和疑難排解中使用圖形、以及根據圖形中的指標建立 CloudWatch 警示的說明，請參閱 [監控外部金鑰存放區](xks-monitoring.md)。

## 外部金鑰存放區屬性
<a name="view-xks-properties"></a>

 AWS KMS 主控台和 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 回應中會顯示外部金鑰存放區的下列屬性。

### 自訂金鑰存放區屬性
<a name="view-xks-custom-key-store"></a>

下列值會出現在每個自訂金鑰存放區詳細資訊頁面**的一般組態**區段中。這些屬性適用於所有自訂金鑰存放區，包括 AWS CloudHSM 金鑰存放區和外部金鑰存放區。

**自訂金鑰存放區 ID**  
 AWS KMS 指派給自訂金鑰存放區的唯一 ID。

**自訂金鑰存放區名稱**  
您在建立自訂金鑰存放區時指派給它的易記名稱。您可隨時變更此值。

**自訂金鑰存放區類型**  
自訂金鑰存放區的類型。有效值為 AWS CloudHSM (`AWS_CLOUDHSM`) 或外部金鑰存放區 (`EXTERNAL_KEY_STORE`)。您無法在建立自訂金鑰存放區之後變更類型。

**Creation (建立) 日期**  
建立自訂金鑰存放區的日期。此日期顯示為 AWS 區域的本地時間。

**連線狀態**  
指示自訂金鑰存放區是否已連接至其備份金鑰存放區。只有當自訂金鑰存放區從未連接至其備份金鑰存放區，或已故意中斷連接時，連接狀態才為 `DISCONNECTED`。如需詳細資訊，請參閱[連線狀態](xks-connect-disconnect.md#xks-connection-state)。

### 外部金鑰存放區組態屬性
<a name="view-xks-configuration"></a>

下列值會顯示在每個外部金鑰存放區之詳細資訊頁面的 **External key store proxy configuration** (外部金鑰存放區代理組態) 區段以及 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 回應的 `XksProxyConfiguration` 元素中。如需每個欄位的詳細說明，包括唯一性要求以及決定每個欄位正確值的說明，請參閱「建立外部金鑰存放區」**主題中的 [備妥先決條件](create-xks-keystore.md#xks-requirements)。

**代理連接**  
指示外部金鑰存放區是使用[公有端點連接](choose-xks-connectivity.md#xks-connectivity-public-endpoint)還是 [VPC 端點服務連接](choose-xks-connectivity.md#xks-vpc-connectivity)。

**代理 URI 端點**  
 AWS KMS 用來連線至[外部金鑰存放區代理](keystore-external.md#concept-xks-proxy)的端點。

**代理 URI 路徑**  
 AWS KMS 傳送代理 [API 請求的代理](keystore-external.md#concept-proxy-apis) URI 端點路徑。

**代理憑證：存取金鑰 ID**  
您在外部金鑰存放區代理上建立的[代理身分驗證憑證](keystore-external.md#concept-xks-credential)的一部分。存取金鑰 ID 可識別憑證中的私密存取金鑰。  
AWS KMS 使用 SigV4 簽署程序和代理身分驗證憑證來簽署其對外部金鑰存放區代理的請求。簽章中的登入資料可讓外部金鑰存放區代理代表您從中驗證請求 AWS KMS。

**VPC 端點服務名稱**  
支援外部金鑰存放區的 Amazon VPC 端點服務名稱。只有當外部金鑰存放區使用 [VPC 端點服務連接](choose-xks-connectivity.md#xks-vpc-connectivity)時，才會顯示此值。您可以在 VPC 中找到外部金鑰存放區代理，或使用 VPC 端點服務與外部金鑰存放區代理進行安全通訊。

**VPC 端點服務擁有者 ID**  
支援外部金鑰存放區的 Amazon VPC 端點服務的 ID。只有當外部金鑰存放區使用 [VPC 端點服務連接](choose-xks-connectivity.md#xks-vpc-connectivity)時，才會顯示此值。您可以在 VPC 中找到外部金鑰存放區代理，或使用 VPC 端點服務與外部金鑰存放區代理進行安全通訊。

## 檢視外部金鑰存放區屬性
<a name="view-xks"></a>

您可以在 AWS KMS 主控台或使用 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作來檢視外部金鑰存放區及其相關聯的屬性。

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

若要檢視指定帳戶和區域中的外部金鑰存放區，請使用下列程序。

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. 若要檢視有關外部金鑰存放區的詳細資訊，請選擇金鑰存放區名稱。

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

若要檢視您的外部金鑰存放區，請使用 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作。在預設情況下，此操作會傳回帳戶和區域中的所有自訂金鑰存放區。但是，您可以使用 `CustomKeyStoreId` 或 `CustomKeyStoreName` 參數 (但不能同時使用) 來限制對特定自訂金鑰存放區的輸出。

若為自訂金鑰存放區，則輸出包含自訂金鑰存放區 ID、名稱和類型以及金鑰存放區的[連接狀態](xks-connect-disconnect.md#xks-connection-state)。如果連接狀態為 `FAILED`，則輸出也會包含描述錯誤原因的 `ConnectionErrorCode`。如需解譯外部金鑰存放區的 `ConnectionErrorCode` 說明，請參閱 [外部金鑰存放區的連接錯誤代碼](xks-troubleshooting.md#xks-connection-error-codes)。

若為外部金鑰存放區，輸出還包括 `XksProxyConfiguration` 元素。此元素包括[連接類型](create-xks-keystore.md#require-connectivity)、[代理 URI 端點](create-xks-keystore.md#require-endpoint)、[代理 URI 路徑](create-xks-keystore.md#require-path)以及[代理身分驗證憑證](keystore-external.md#concept-xks-credential)的存取金鑰 ID。

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

例如，以下命令會傳回帳戶和區域中的所有自訂金鑰存放區。您可以使用 `Limit` 和 `Marker` 參數來切換輸出中的自訂金鑰存放區頁面。

```
$ aws kms describe-custom-key-stores
```

以下命令使用 `CustomKeyStoreName` 參數來取得僅具有 `ExampleXksPublic` 易記名稱的範例外部金鑰存放區。此範例金鑰存放區使用公有端點連接。它連接到其外部金鑰存放區代理。

```
$ aws kms describe-custom-key-stores --custom-key-store-name ExampleXksPublic
{
    "CustomKeyStores": [
    {
      "CustomKeyStoreId": "cks-1234567890abcdef0",
      "CustomKeyStoreName": "ExampleXksPublic",
      "ConnectionState": "CONNECTED",    
      "CreationDate": "2022-12-14T20:17:36.419000+00:00",
      "CustomKeyStoreType": "EXTERNAL_KEY_STORE",
      "XksProxyConfiguration": { 
        "AccessKeyId": "ABCDE12345670EXAMPLE",
        "Connectivity": "PUBLIC_ENDPOINT",
        "UriEndpoint": "https://xks.example.com:6443",
        "UriPath": "/example/prefix/kms/xks/v1"
      }
    }
  ]
}
```

下列命令取得具有 VPC 端點服務連接的範例外部金鑰存放區。在此範例中，外部金鑰存放區會連接至其外部金鑰存放區代理。

```
$ aws kms describe-custom-key-stores --custom-key-store-name ExampleXksVpc
{
    "CustomKeyStores": [
    {
      "CustomKeyStoreId": "cks-9876543210fedcba9",
      "CustomKeyStoreName": "ExampleXksVpc",
      "ConnectionState": "CONNECTED",
      "CreationDate": "2022-12-13T18:34:10.675000+00:00",
      "CustomKeyStoreType": "EXTERNAL_KEY_STORE",
      "XksProxyConfiguration": { 
        "AccessKeyId": "ABCDE98765432EXAMPLE",
        "Connectivity": "VPC_ENDPOINT_SERVICE",
        "UriEndpoint": "https://example-proxy-uri-endpoint-vpc",
        "UriPath": "/example/prefix/kms/xks/v1",
        "VpcEndpointServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-example"
      }
    }
  ]
}
```

[`ConnectionState`](xks-connect-disconnect.md#xks-connection-state) 的 `Disconnected` 值指示外部金鑰存放區從未連接，或它是特意從其外部金鑰存放區代理中斷連接。不過，如果嘗試在已連接的外部金鑰存放區中使用 KMS 金鑰失敗，可能表示外部金鑰存放區代理或其他外部元件發生問題。

如果外部金鑰存放區的 `ConnectionState` 為 `FAILED`，則 `DescribeCustomKeyStores` 回應會包含一個 `ConnectionErrorCode` 元素，解釋錯誤的原因。

例如，在以下輸出中， `XKS_PROXY_TIMED_OUT`值指出 AWS KMS 可以連線至外部金鑰存放區代理，但連線失敗，因為外部金鑰存放區代理未在分配 AWS KMS 的時間內回應 。如果您重複看到此連接錯誤代碼，則請通知您的外部金鑰存放區代理廠商。如需此錯誤和其他連接錯誤失敗的協助，請參閱[外部金鑰存放區故障診斷](xks-troubleshooting.md)。

```
$ aws kms describe-custom-key-stores --custom-key-store-name ExampleXksVpc
{
    "CustomKeyStores": [
    {
      "CustomKeyStoreId": "cks-9876543210fedcba9",
      "CustomKeyStoreName": "ExampleXksVpc",
      "ConnectionState": "FAILED",
      "ConnectionErrorCode": "XKS_PROXY_TIMED_OUT",
      "CreationDate": "2022-12-13T18:34:10.675000+00:00",
      "CustomKeyStoreType": "EXTERNAL_KEY_STORE",
      "XksProxyConfiguration": { 
        "AccessKeyId": "ABCDE98765432EXAMPLE",
        "Connectivity": "VPC_ENDPOINT_SERVICE",
        "UriEndpoint": "https://example-proxy-uri-endpoint-vpc",
        "UriPath": "/example/prefix/kms/xks/v1",
        "VpcEndpointServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-example"
      }
    }
  ]
}
```

# 監控外部金鑰存放區
<a name="xks-monitoring"></a>

AWS KMS 會收集與外部金鑰存放區每次互動的指標，並將其發佈到您的 CloudWatch 帳戶中。這些指標用於在每個外部金鑰存放區之詳細資訊頁面的監控區段中產生圖表。下列主題詳細說明如何使用圖表來識別會影響外部金鑰存放區的操作和組態問題，並進行疑難排解。建議您使用 CloudWatch 指標來設定警示，以便在外部金鑰存放區未按預期執行時通知您。如需詳細資訊，請參閱[透過 Amazon CloudWatch 進行監控](monitoring-cloudwatch.md)。

**Topics**
+ [檢視圖表](#xks-monitoring-navigate)
+ [解釋圖表](#interpreting-graphs)

## 檢視圖表
<a name="xks-monitoring-navigate"></a>

您可以用不同的詳細資料層級檢視圖表。依預設，每個圖表使用三小時的時間範圍和五分鐘的彙總[期間](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#CloudWatchPeriods)。您可以在主控台內調整圖表檢視，但是當外部金鑰存放區詳細資訊頁面關閉或瀏覽器重新整理時，您的變更將還原為預設設定。如需有關 Amazon CloudWatch 術語的說明，請參閱 [Amazon CloudWatch 概念](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html)。

### 檢視資料點詳細資訊
<a name="graph-data-point"></a>

每個圖表中的資料是依 [AWS KMS 指標](https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-cloudwatch.html#kms-metrics)收集的。若要檢視有關特定資料點的詳細資訊，請將滑鼠暫停在折線圖上的資料點上。這會顯示一個彈出式視窗，其中包含有關衍生出該圖表之指標的詳細資訊。每個清單項目都會顯示在該資料點記錄的[維度](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#Dimension)值。如果該資料點的維度值沒有可用的指標資料，彈出式視窗會顯示空值 (**–**)。有些圖表會記錄單一資料點的多個維度和值。其他圖表 (例如[可靠性圖表](#reliability-graph)) 會使用指標收集的資料來計算唯一值。每個清單項目都與不同的折線圖顏色相關聯。

### 修改時間範圍
<a name="graph-time-range"></a>

若要修改[時間範圍](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/modify_graph_date_time.html)，請選取監控區段右上角其中一種預先定義的時間範圍。預先定義的時間範圍為 1 小時到 1 週 (**1h** (1 小時)、**3h** (3 小時)、**12h** (12 小時)、**1d** (1 天)、**3d** (3 天) 或 **1w** (1 週))。這會調整所有圖表的時間範圍。如果您想要檢視不同時間範圍內的特定圖表，或想要設定自訂時間範圍，請放大圖表或在 Amazon CloudWatch 主控台中檢視它。

### 放大圖表
<a name="graph-zoom"></a>

您可以使用[迷你地圖縮放功能](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/zoom-graph.html)，將焦點放在折線圖的某個區段以及圖表的某些部分上，而無需在放大和縮小檢視之間進行變更。例如，您可以使用迷你地圖縮放功能，將焦點放在圖表中的峰值上，以便在同一時間軸中將尖峰與監控區段中的其他圖表進行比較。

1. 選擇並拖曳要聚焦的圖表區域，然後放開拖曳。

1. 若要重設縮放，請選擇 **Reset zoom** (重設縮放) 圖示，這看起來像一個帶有減號 (-) 符號的放大鏡。

### 放大圖表
<a name="graph-enlarge"></a>

若要放大圖表，請選取單個圖表右上角的選單圖示，然後選擇 **Enlarge** (放大)。您也可以選取當您將游標停留在圖表上時顯示在選單圖示旁邊的放大圖示。

放大圖表可讓您透過指定不同的時段、自訂時間範圍或重新整理間隔來進一步修改圖表檢視。當您關閉放大的檢視時，這些變更將恢復為預設設定。

修改期間  

1. 選擇 **Period options** (期間選項) 功能表。依預設，此選單會顯示值：**5 分鐘**。

1. 選擇一個期間，預先定義的期間從 1 秒到 30 天不等。

   例如，您可以選擇一分鐘檢視，這在疑難排解時非常有用。或者，選擇較不精細的一小時檢視。當檢視更廣泛的時間範圍 (例如 3 天) 時，您可以看到隨時間變化的趨勢。如需詳細資訊，請參閱和《Amazon CloudWatch 使用者指南》**中的[期間](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html#CloudWatchPeriods)。

修改時間範圍或時區  

1. 選取其中一個預先定義的時間範圍，範圍從 1 小時到 1 週不等 (**1h** (1 小時)、**3h** (3 小時)、**12h** (12 小時)、**1d** (1 天)、**3d** (3 天) **1w** (1 週))。或者，您也可以選擇 **Custom** (自訂) 來設定您自己的時間範圍。

1. 選擇 **Custom** (自訂)。

   1. *Time range:* (時間範圍：) 選取方塊左上角的 **Absolute** (絕對值) 索引標籤。使用行事曆選擇器或文字欄位方塊來指定時間範圍。

   1. *Time zone:* (時區：) 選擇方塊右上角的下拉式選單。您可以將時區變更為 **UTC** 或者 **Local time zone** (本機時區)。

1. 指定時間範圍後，選擇 **Apply** (套用)。

修改圖表中資料重新整理的頻率  

1. 選擇右上角的 **Refresh options** (重新整理選項) 選單。

1. 選擇重新整理間隔 (**Off** (關閉)、**10 Seconds** (10 秒)、**1 Minute** (1 分鐘)、**2 Minutes** (2 分鐘)、**5 Minutes** (5 分鐘) 或 **15 Minutes** (15 分鐘))。

### 在 Amazon CloudWatch 主控台中檢視圖表
<a name="graph-in-cloudwatch"></a>

監控區段中的圖表衍生自 AWS KMS 發佈到 Amazon CloudWatch 的預先定義指標。您可以在 CloudWatch 主控台中開啟它們，並將它們儲存到 CloudWatch 儀表板。如果您有多個外部金鑰存放區，則可以在 CloudWatch 中開啟各自的圖表，並將其儲存到單一儀表板，以比較其運作狀態和使用量。

**新增至 CloudWatch 儀表板**  
選取右上角的 **Add to dashboard** (新增至儀表板)，將所有圖表新增至 Amazon CloudWatch 儀表板。您可以選取現有的儀表板或建立新的儀表板。如需使用此儀表板建立圖表和警示之自訂檢視的相關資訊，請參閱《Amazon CloudWatch 使用者指南》**中的[使用 Amazon CloudWatch 儀表板](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html)。

**在 CloudWatch 指標中檢視**  
選取單個圖表右上角的選單圖示，然後選擇 **View in metrics** (在指標中檢視) 以在 Amazon CloudWatch 主控台中檢視此圖表。在 CloudWatch 主控台中，您可以將此單個圖表新增至儀表板，並修改時間範圍、期間和重新整理間隔。如需詳細資訊，請參閱《Amazon CloudWatch 使用者指南》**中的[圖表指標](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/graph_metrics.html)。

## 解釋圖表
<a name="interpreting-graphs"></a>

AWS KMS 提供數個圖形來監控 AWS KMS 主控台內外部金鑰存放區的運作狀態。這些圖表會自動設定並衍生自 [AWS KMS 指標](https://docs.aws.amazon.com/kms/latest/developerguide/monitoring-cloudwatch.html#kms-metrics)。

作為您對外部金鑰存放區和外部金鑰進行呼叫的一部分來收集圖表資料。您可能會在未進行任何呼叫的時間範圍內看到資料填入圖表，此資料來自代表您 AWS KMS 進行的定期`GetHealthStatus`呼叫，以檢查外部金鑰存放區代理和外部金鑰管理器的狀態。如果您的圖表顯示 **No data available** (沒有資料可用) 訊息，則在該時間範圍內沒有記錄任何呼叫，或者您的外部金鑰存放區處於 [`DISCONNECTED`](xks-connect-disconnect.md#xks-connection-state) 狀態。透過將[檢視調整](#graph-time-range)為更寬的時間範圍，可確定外部金鑰存放區中斷連接的時間。

**Topics**
+ [請求總數](#total-requests-graph)
+ [可靠性](#reliability-graph)
+ [延遲](#latency-graph)
+ [前 5 個例外狀況](#top-5-exceptions-graph)
+ [憑證到期天數](#cert-expire-graph)

### 請求總數
<a name="total-requests-graph"></a>

在指定時間範圍內，針對特定外部金鑰存放區收到的 AWS KMS 請求總數。使用此圖表來確定是否有限流風險。

AWS KMS 建議您的外部金鑰管理器每秒最多能夠處理 1800 個密碼編譯操作請求。如果五分鐘內的呼叫達到 540,000 個，則有限流風險。

您可以在使用 指標 AWS KMS 調節的外部金鑰存放區中，監控 KMS [ExternalKeyStoreThrottle](monitoring-cloudwatch.md#metric-throttling) 金鑰上密碼編譯操作的請求數量。

如果您經常收到 `KMSInvalidStateException` 錯誤，並且訊息說明「因為請求率非常高」而拒絕請求，則可能表示您的外部金鑰管理器或外部金鑰存放區代理無法跟上目前的請求率。如果可能，請降低您的請求率。您也可以考慮請求減少自訂金鑰存放區請求配額值。減少此配額值可能會增加限流，但表示在將多餘的請求傳送到外部金鑰存放區代理或外部金鑰管理器之前 AWS KMS ， 會快速拒絕這些請求。若要請求減少配額，請造訪 [AWS 支援 中心](https://console.aws.amazon.com/support/home)並建立案例。

總請求圖表衍生自 [XksProxyErrors](monitoring-cloudwatch.md#metric-xks-proxy-errors) 指標，其會收集 AWS KMS 從外部金鑰存放區代理接收的成功與失敗回應的相關資料。當您[檢視特定資料點](#graph-data-point)時，快顯視窗會顯示`CustomKeyStoreId`維度的值，以及在該資料點記錄的 AWS KMS 請求總數。`CustomKeyStoreId` 將永遠是相同的。

### 可靠性
<a name="reliability-graph"></a>

外部金鑰存放區代理傳回成功回應或不可重試錯誤的 AWS KMS 請求百分比。使用此圖表來評估外部金鑰存放區代理的操作運作狀態。

當圖表顯示的值小於 100% 時，表示代理未回應或回應時出現可重試錯誤。這可能表示網路出現問題、外部金鑰存放區代理或外部金鑰管理器運行緩慢或實作錯誤。

如果請求包含錯誤的憑證並且您的代理回應時出現 `AuthenticationFailedException`，則圖表仍會顯示 100% 的可靠性，因為代理在[外部金鑰存放區代理請求](keystore-external.md#concept-proxy-apis)中發現錯誤值，因此預期會發生失敗。如果可靠性圖表的百分比為 100%，則外部金鑰存放區代理會按預期回應。如果圖表顯示的值小於 100%，則代理回應時會出現可重試錯誤或逾時。例如，如果由於請求率非常高，代理回應時出現 `ThrottlingException`，則會顯示較低的可靠性百分比，因為代理無法識別導致它失敗的請求中的特定問題。這是因為可重試的錯誤很可能是暫時性的問題，可以透過重試請求來解決。

下列錯誤回應會降低可靠性百分比。您可以使用 [前 5 個例外狀況](#top-5-exceptions-graph) 圖表和 [XksProxyErrors](monitoring-cloudwatch.md#metric-xks-proxy-errors) 指標進一步監控代理傳回每個可重試錯誤的頻率。
+ `InternalException`
+ `DependencyTimeoutException`
+ `ThrottlingException`
+ `XksProxyUnreachableException`

可靠性圖表衍生自 [XksProxyErrors](monitoring-cloudwatch.md#metric-xks-proxy-errors) 指標，該指標會收集從外部金鑰存放區代理 AWS KMS 接收的成功和失敗回應資料。只有當回應的 `ErrorType` 值為 `Retryable` 時，才會降低可靠性百分比。當您[檢視特定資料點](#graph-data-point)時，快顯視窗會顯示維`CustomKeyStoreId`度的值，以及在該資料點記錄之 AWS KMS 請求的可靠性百分比。`CustomKeyStoreId` 將永遠是相同的。

我們建議您使用 [XksProxyErrors](monitoring-cloudwatch.md#metric-xks-proxy-errors) 指標來建立 CloudWatch 警示，以便在一分鐘內記錄超過五個可重試的錯誤時提醒您，從而通知您存在潛在的網路問題。如需詳細資訊，請參閱[建立可重試錯誤的警示](xks-alarms.md#retryable-errors-alarm)。

### 延遲
<a name="latency-graph"></a>

外部金鑰存放區代理回應 AWS KMS 請求所需的毫秒數。使用此圖表可評估外部金鑰存放區代理和外部金鑰管理器的效能。

AWS KMS 預期外部金鑰存放區代理會在 250 毫秒內回應每個請求。在網路逾時的情況下， AWS KMS 會重試一次請求。如果代理第二次失敗，則記錄的延遲是兩次請求嘗試的合併逾時限制，圖表將顯示約 500 毫秒。在代理未在 250 毫秒逾時限制內進行回應的所有其他情況下，記錄的延遲為 250 毫秒。如果代理在加密和解密操作中經常逾時，請咨詢您的外部代理管理員。如需解決延遲問題的說明，請參閱 [延遲和逾時錯誤](xks-troubleshooting.md#fix-xks-latency)。

回應緩慢也可能表示您的外部金鑰管理器無法處理目前的請求流量。 AWS KMS 建議外部金鑰管理器每秒最多可處理 1800 個密碼編譯操作的請求。如果您的外部金鑰管理器無法處理每秒 1800 個請求，請考慮請求減少[自訂金鑰存放區中 KMS 金鑰的請求配額](requests-per-second.md#rps-key-stores)。使用外部金鑰存放區中的 KMS 金鑰進行密碼編譯操作的請求會快速檢錯，並發生[限流例外狀況](throttling.md)，而不是被外部金鑰存放區代理或外部金鑰管理器處理並拒絕。

延遲圖表衍生自 [XksProxyLatency](monitoring-cloudwatch.md#metric-xks-proxy-latency) 指標。當您[檢視特定資料點](#graph-data-point)時，彈出式視窗會顯示相應的 `KmsOperation` 和 `XksOperation` 維度值，以及在該資料點記錄的平均操作延遲。清單項目會從最高延遲到最低延遲排序。

建議您使用 [XksProxyLatency](monitoring-cloudwatch.md#metric-xks-proxy-latency) 指標來建立 CloudWatch 警示，在您的延遲臨近逾時限制時通知您。如需詳細資訊，請參閱[建立回應逾時的警示](xks-alarms.md#latency-alarm)。

### 前 5 個例外狀況
<a name="top-5-exceptions-graph"></a>

指定時間範圍內失敗的密碼編譯和管理操作的前五個例外狀況。使用此圖表可追蹤最常見的錯誤，因此您可以優先考慮工程工作。

此計數包含從外部金鑰存放區代理 AWS KMS 收到的例外`XksProxyUnreachableException`狀況，以及當無法與外部金鑰存放區代理建立通訊時，在內部 AWS KMS 傳回的例外狀況。

高比率的可重試錯誤可能表示存在網路錯誤，而高比率的不可重試錯誤可能表示外部金鑰存放區的組態有問題。例如， 中的峰值`AuthenticationFailedExceptions`表示在 中設定的身分驗證憑證 AWS KMS 與外部金鑰存放區代理之間的差異。若要檢視外部金鑰存放區組態，請參閱 [檢視外部金鑰存放區](view-xks-keystore.md)。若要編輯外部金鑰存放區設定，請參閱 [編輯外部金鑰存放區屬性](update-xks-keystore.md)。

從外部金鑰存放區代理 AWS KMS 接收的例外狀況與 操作失敗時 AWS KMS 傳回的例外狀況不同。 AWS KMS 加密操作`KMSInvalidStateException`會針對與外部金鑰存放區之外部組態或連線狀態相關的所有失敗傳回 。若要識別問題，請使用隨附的錯誤訊息文字。

下表顯示會出現在前 5 個例外狀況圖表中的例外狀況，以及 AWS KMS 傳回給您的對應例外狀況。


| 錯誤類型 | 圖表中顯示的例外狀況 |  AWS KMS 傳回給您的例外狀況 | 
| --- | --- | --- | 
| 不可重試 | AccessDeniedException   如需故障診斷協助，請參閱[代理授權問題](xks-troubleshooting.md#fix-xks-authorization)。 | **`CustomKeyStoreInvalidStateException`** 回應 `CreateKey` 操作。 **`KMSInvalidStateException`** 回應密碼編譯操作。 | 
| 不可重試 | AuthenticationFailedException   如需故障診斷協助，請參閱[身分驗證憑證錯誤](xks-troubleshooting.md#fix-xks-credentials)。 | **`XksProxyIncorrectAuthenticationCredentialException`** 回應 `CreateCustomKeyStore` 和 `UpdateCustomKeyStore` 操作。**`CustomKeyStoreInvalidStateException`** 回應 `CreateKey` 操作。 **`KMSInvalidStateException`** 回應密碼編譯操作。 | 
| 可重試 | **`DependencyTimeoutException`** 如需故障診斷協助，請參閱[延遲和逾時錯誤](xks-troubleshooting.md#fix-xks-latency)。 | **`XksProxyUriUnreachableException`** 回應 `CreateCustomKeyStore` 和 `UpdateCustomKeyStore` 操作。 **`CustomKeyStoreInvalidStateException`** 回應 `CreateKey` 操作。 **`KMSInvalidStateException`** 回應密碼編譯操作。 | 
| 可重試 | **`InternalException`** 外部金鑰存放區代理拒絕了請求，因為其無法與外部金鑰管理器通訊。確認外部金鑰存放區代理組態正確，以及外部金鑰管理器可使用。 | **`XksProxyInvalidResponseException`** 回應 `CreateCustomKeyStore` 和 `UpdateCustomKeyStore` 操作。 **`CustomKeyStoreInvalidStateException`** 回應 `CreateKey` 操作。 **`KMSInvalidStateException`** 回應密碼編譯操作。 | 
| 不可重試 | **`InvalidCiphertextException`** 如需故障診斷協助，請參閱[解密錯誤](xks-troubleshooting.md#fix-xks-decrypt)。 | **`KMSInvalidStateException`** 回應密碼編譯操作。 | 
| 不可重試 | **`InvalidKeyUsageException`** 如需故障診斷協助，請參閱[外部金鑰的密碼編譯操作錯誤](xks-troubleshooting.md#fix-external-key-crypto)。 | **`XksKeyInvalidConfigurationException`** 回應 `CreateKey` 操作。 **`KMSInvalidStateException`** 回應密碼編譯操作。 | 
| 不可重試 | **`InvalidStateException`** 如需故障診斷協助，請參閱[外部金鑰的密碼編譯操作錯誤](xks-troubleshooting.md#fix-external-key-crypto)。 | **`XksKeyInvalidConfigurationException`** 回應 `CreateKey` 操作。 **`KMSInvalidStateException`** 回應密碼編譯操作。 | 
| 不可重試 | **`InvalidUriPathException`** 如需故障診斷協助，請參閱[一般組態錯誤](xks-troubleshooting.md#fix-xks-gen-configuration)。 | **`XksProxyInvalidConfigurationException`** 回應 `CreateCustomKeyStore` 和 `UpdateCustomKeyStore` 操作。 **`CustomKeyStoreInvalidStateException`** 回應 `CreateKey` 操作。 **`KMSInvalidStateException`** 回應密碼編譯操作。 | 
| 不可重試 | **`KeyNotFoundException`** 如需故障診斷協助，請參閱[外部金鑰錯誤](xks-troubleshooting.md#fix-external-key)。 | **`XksKeyNotFoundException`** 回應 `CreateKey` 操作。 **`KMSInvalidStateException`** 回應密碼編譯操作。 | 
| 可重試 | **`ThrottlingException`** 由於請求率非常高，所以外部金鑰存放區代理拒絕了請求。減少使用此外部金鑰存放區中的 KMS 金鑰進行呼叫的頻率。 | **`XksProxyUriUnreachableException`** 回應 `CreateCustomKeyStore` 和 `UpdateCustomKeyStore` 操作。 **`CustomKeyStoreInvalidStateException`** 回應 `CreateKey` 操作。 **`KMSInvalidStateException`** 回應密碼編譯操作。 | 
| 不可重試 | **`UnsupportedOperationException`** 如需故障診斷協助，請參閱[外部金鑰的密碼編譯操作錯誤](xks-troubleshooting.md#fix-external-key-crypto)。 | **`XksKeyInvalidResponseException`** 回應 `CreateKey` 操作。 **`KMSInvalidStateException`** 回應密碼編譯操作。 | 
| 不可重試 | **`ValidationException`** 如需故障診斷協助，請參閱[代理問題](xks-troubleshooting.md#fix-xks-proxy)。 | **`XksProxyInvalidResponseException`** 回應 `CreateCustomKeyStore` 和 `UpdateCustomKeyStore` 操作。 **`CustomKeyStoreInvalidStateException`** 回應 `CreateKey` 操作。 **`KMSInvalidStateException`** 回應密碼編譯操作。 | 
| 可重試 | **`XksProxyUnreachableException`** 如果您重複看到此錯誤，則請確認外部金鑰存放區代理處於作用中狀態且已連接至網路，以及外部金鑰存放區中的 URI 路徑和端點 URI 或 VPC 服務名稱正確無誤。 | **`XksProxyUriUnreachableException`** 回應 `CreateCustomKeyStore` 和 `UpdateCustomKeyStore` 操作。 **`CustomKeyStoreInvalidStateException`** 回應 `CreateKey` 操作。 **`KMSInvalidStateException`** 回應密碼編譯操作。 | 

前 5 個例外狀況圖衍生自 [XksProxyErrors](monitoring-cloudwatch.md#metric-xks-proxy-errors) 指標。當您[檢視特定資料點](#graph-data-point)時，彈出式視窗會顯示 `ExceptionName` 維度值，以及在該資料點記錄的例外狀況次數。這五個清單項目從最常見的例外狀況到最不常見的例外狀況排序。

建議您使用 [XksProxyErrors](monitoring-cloudwatch.md#metric-xks-proxy-errors) 指標來建立 CloudWatch 警示，以便在一分鐘內記錄超過五個不可重試的錯誤時提醒您，從而通知您存在潛在的組態問題。如需詳細資訊，請參閱[針對不可重試的錯誤建立警示](xks-alarms.md#nonretryable-errors-alarm)。

### 憑證到期天數
<a name="cert-expire-graph"></a>

外部金鑰存放區代理端點 (`XksProxyUriEndpoint`) 的 TLS 憑證到期前的天數。使用此圖表來監控 TLS 憑證即將到期。

當憑證過期時， AWS KMS 無法與外部金鑰存放區代理通訊。在您續約憑證之前，外部金鑰存放區中受 KMS 金鑰保護的所有資料都無法存取。

憑證到期天數圖表衍生自 [XksProxyCertificateDaysToExpire](monitoring-cloudwatch.md#metric-xks-proxy-certificate-days-to-expire) 指標。強烈建議使用此指標來建立 CloudWatch 警示，通知您即將到期。憑證到期可能會阻礙您存取加密資源。設定警示可讓組織有時間在憑證過期之前續約憑證。如需詳細資訊，請參閱[建立憑證過期的警示](xks-alarms.md#cert-expire-alarm)。

# 連接和中斷連接外部金鑰存放區
<a name="xks-connect-disconnect"></a>

新的外部金鑰存放區未連接。若要在外部金鑰存放區 AWS KMS keys 中建立和使用 ，您需要將外部金鑰存放區連接到其[外部金鑰存放區代理](keystore-external.md#concept-xks-proxy)。您可以隨時連接和中斷連接您的外部金鑰存放區，並且[檢視其連接狀態](view-xks-keystore.md)。

當您的外部金鑰存放區中斷連線時， AWS KMS 無法與您的外部金鑰存放區代理通訊。因此，您可以檢視和管理外部金鑰存放區和其現有 KMS 金鑰。但是，您無法在外部金鑰存放區中建立 KMS 金鑰，或在密碼編譯操作中使用其 KMS 金鑰。您可能需要在某些時候中斷連接外部金鑰存放區，例如在編輯其屬性時，但需要進行相應的規劃。中斷連接金鑰存放區可能會中斷使用其 KMS 金鑰之 AWS 服務的操作。

您不需要連接您的外部金鑰存放區。您可以將外部金鑰存放區無限期保留在中斷連接狀態，並只在您需要使用它時連接它。不過，您可能希望定期測試連接，以驗證設定正確並且可連接。

當您中斷連接自訂金鑰存放區時，該金鑰存放區中的 KMS 金鑰會立即變成無法使用 (視最終一致性而定)。不過，使用受 KMS 金鑰保護之[資料金鑰](data-keys.md)所加密的資源不會受影響，除非再次使用 KMS 金鑰 (例如解密資料金鑰)。此問題會影響 AWS 服務，其中許多服務會使用資料金鑰來保護您的資源。如需詳細資訊，請參閱[無法使用的 KMS 金鑰如何影響資料金鑰](unusable-kms-keys.md)。

**注意**  
僅當金鑰存放區從未連接或明確中斷連接時，外部金鑰存放區才會處於 `DISCONNECTED` 狀態。`CONNECTED` 狀態並不表示外部金鑰存放區或其支援元件正在高效運作。如需外部金鑰存放區元件效能的相關資訊，請參閱每個外部金鑰存放區詳細資訊頁面之 **Monitoring** (監控) 區段中的圖表。如需詳細資訊，請參閱[監控外部金鑰存放區](xks-monitoring.md)。  
您的外部金鑰管理器可能會提供其他方法來停止和重新啟動 AWS KMS 外部金鑰存放區與外部金鑰存放區代理之間的通訊，或外部金鑰存放區代理與外部金鑰管理器之間的通訊。如需詳細資訊，請參閱外部金鑰管理器文件。

**Topics**
+ [連線狀態](#xks-connection-state)
+ [連接外部金鑰存放區](about-xks-connecting.md)
+ [中斷連接外部金鑰存放區](about-xks-disconnecting.md)

## 連線狀態
<a name="xks-connection-state"></a>

連接和中斷連接會變更自訂金鑰存放區的*連接狀態*。 AWS CloudHSM 金鑰存放區和外部金鑰存放區的連線狀態值相同。

若要檢視自訂金鑰存放區的連線狀態，請使用 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/DescribeCustomKeyStores.html) 操作或 AWS KMS 主控台。**Connection state** (連接狀態) 會顯示在每個自訂金鑰存放區資料表、每個自訂金鑰存放區詳細資料頁面的 **General configuration** (一般組態) 區段以及自訂金鑰存放區中 KMS 金鑰的 **Cryptographic configuration** (密碼編譯組態) 索引標籤中。如需詳細資訊，請參閱 [檢視 AWS CloudHSM 金鑰存放區](view-keystore.md) 和 [檢視外部金鑰存放區](view-xks-keystore.md)。

自訂金鑰存放區可以有下列其中一個連接狀態：
+ `CONNECTED`：自訂金鑰存放區已連接至其備份金鑰存放區。您可在自訂金鑰存放區中建立和使用 KMS 金鑰。

  *金鑰存放區的後端* AWS CloudHSM 金鑰存放區是其相關聯的 AWS CloudHSM 叢集。外部金鑰存放區的*備份金鑰存放區*是外部金鑰存放區代理及其支援的外部金鑰管理器。

  CONNECTED 狀態表示連接成功，且自訂金鑰存放區尚未有意中斷連接。這並不表示連接運作正常。如需有關與 AWS CloudHSM 金鑰存放區相關聯之 AWS CloudHSM 叢集狀態的資訊，請參閱 AWS CloudHSM 《 使用者指南》中的[取得 的 CloudWatch 指標 AWS CloudHSM](https://docs.aws.amazon.com/cloudhsm/latest/userguide/hsm-metrics-cw.html)。如需有關外部金鑰存放區狀態和操作的相關資訊，請參閱每個外部金鑰存放區詳細資訊頁面的**監控**區段中的圖表。如需詳細資訊，請參閱[監控外部金鑰存放區](xks-monitoring.md)。
+ `CONNECTING`：連接自訂金鑰存放區的程序正在進行中。這是暫時的狀態。
+ `DISCONNECTED`：自訂金鑰存放區從未連接到其備份，或使用 AWS KMS 主控台或 [DisconnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/DisconnectCustomKeyStores.html) 操作刻意中斷連線。
+ `DISCONNECTING`：中斷連接自訂金鑰存放區的程序正在進行中。這是暫時的狀態。
+ `FAILED`：嘗試連接自訂金鑰存放區失敗。[DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/DescribeCustomKeyStores.html) 回應中的 `ConnectionErrorCode` 指出該問題。

若要連接自訂金鑰存放區，其連接狀態必須為 `DISCONNECTED`。如果連接狀態為 `FAILED`，則請使用 `ConnectionErrorCode` 來識別並解決問題。請先中斷連接自訂金鑰存放區，然後再重試連接。如需連線失敗的協助，請參閱 [外部金鑰存放區連接錯誤](xks-troubleshooting.md#fix-xks-connection)。如需有關回應連接錯誤代碼的說明，請參閱 [外部金鑰存放區的連接錯誤代碼](xks-troubleshooting.md#xks-connection-error-codes)。

若要檢視連接錯誤代碼：
+ 在 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 回應中，檢視 `ConnectionErrorCode` 元素的值。只有當 `ConnectionState` 為 `FAILED` 時，此元素才會出現在 `DescribeCustomKeyStores` 回應中。
+ 若要在 AWS KMS 主控台中檢視連線錯誤代碼，請在外部金鑰存放區的詳細資訊頁面上，並將滑鼠游標暫留在**失敗**值上。  
![\[自訂金鑰存放區詳細資訊頁面上的連接錯誤代碼\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/connection-error-code.png)

# 連接外部金鑰存放區
<a name="about-xks-connecting"></a>

外部金鑰存放區連接到其外部金鑰存放區代理時，您可以[在外部金鑰存放區中建立 KMS 金鑰](create-cmk-keystore.md)，並在[密碼編譯操作](manage-cmk-keystore.md#use-cmk-keystore)中使用其現有的 KMS 金鑰。

將外部金鑰存放區連接至其外部金鑰存放區代理的程序會有所不同，這取決於外部金鑰存放區的連接。
+ 使用[公有端點連接](keystore-external.md#concept-xks-connectivity)來連接外部金鑰存放區時， AWS KMS 會將 [GetHealthStatus 請求](keystore-external.md#concept-proxy-apis)傳送至外部金鑰存放區代理，以驗證[代理 URI 端點](create-xks-keystore.md#require-endpoint)、[代理 URI 路徑](create-xks-keystore.md#require-path)和[代理身分驗證憑證](keystore-external.md#concept-xks-credential)。來自代理的成功回應可確認[代理 URI 端點](create-xks-keystore.md#require-endpoint)和[代理 URI 路徑](create-xks-keystore.md#require-path)是正確且可存取的，而且代理驗證了使用外部金鑰存放區之[代理身分驗證憑證](keystore-external.md#concept-xks-credential)所簽署的請求。
+ 當您將具有 [VPC 端點服務的外部金鑰存放區](choose-xks-connectivity.md#xks-vpc-connectivity)連線至其外部金鑰存放區代理時， 會 AWS KMS 執行下列動作：
  + 確認在[代理 URI 端點](create-xks-keystore.md#require-endpoint)中指定之私有 DNS 名稱的網域[已經過驗證](vpc-connectivity.md#xks-private-dns)。
  + 建立從 AWS KMS VPC 到 VPC 端點服務的介面端點。
  + 為代理 URI 端點中指定的私有 DNS 名稱建立私有託管區域
  + 將 [GetHealthStatus 請求](keystore-external.md#concept-proxy-apis)傳送至外部金鑰存放區代理。來自代理的成功回應可確認[代理 URI 端點](create-xks-keystore.md#require-endpoint)和[代理 URI 路徑](create-xks-keystore.md#require-path)是正確且可存取的，而且代理驗證了使用外部金鑰存放區之[代理身分驗證憑證](keystore-external.md#concept-xks-credential)所簽署的請求。

連接操作開始了連接自訂金鑰存放區的過程，但將外部金鑰存放區連接到其外部代理大約需要五分鐘。來自連接操作的成功回應並不表示外部金鑰存放區已連接。若要確認連線成功，請使用 AWS KMS 主控台或 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/DescribeCustomKeyStores.html) 操作來檢視金鑰存放區外部的[連線狀態](xks-connect-disconnect.md#xks-connection-state)。

當連線狀態為 時`FAILED`，連線錯誤代碼會顯示在 AWS KMS 主控台中，並新增至`DescribeCustomKeyStore`回應。如需有關解譯連接錯誤代碼的說明，請參閱 [外部金鑰存放區的連接錯誤代碼](xks-troubleshooting.md#xks-connection-error-codes)。

## 連接並重新連線至您的外部金鑰存放區
<a name="connect-xks"></a>

您可以在 AWS KMS 主控台或使用 [ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html) 操作來連接或重新連接外部金鑰存放區。

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

您可以使用 AWS 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. 選擇您想要連接的外部金鑰存放區資料列。

   如果外部金鑰存放區的[連接狀態](xks-connect-disconnect.md#xks-connection-state)為 **FAILED** (失敗)，則在連接之前，必須[中斷連接外部金鑰存放區](disconnect-keystore.md#disconnect-keystore-console)。

1. 從 **Key store actions** (金鑰存放區動作) 選單中，選擇 **Connect** (連接)。

連接程序通常需要大約五分鐘才能完成。操作完成時，[連接狀態](xks-connect-disconnect.md#xks-connection-state)會變更為 **CONNECTED** (已連接)。

如果連接狀態為 **Failed** (失敗)，則請將滑鼠游標移至連接狀態上，以查看*連接錯誤代碼*，其中會說明錯誤原因。如需有關回應連接錯誤代碼的說明，請參閱 [外部金鑰存放區的連接錯誤代碼](xks-troubleshooting.md#xks-connection-error-codes)。若要連接具有 **Failed** (失敗) 連接狀態的外部金鑰存放區，您必須先[中斷連接自訂金鑰存放區](disconnect-keystore.md#disconnect-keystore-console)。

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

若要連接已中斷連接的外部金鑰存放區，請使用 [ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html) 操作。

在連接之前，外部金鑰存放區的[連接狀態](xks-connect-disconnect.md#xks-connection-state)必須為 `DISCONNECTED`。如果當前連接狀態為 `FAILED`，則請[中斷連接外部金鑰存放區](about-xks-disconnecting.md#disconnect-xks-api)，然後將其連接。

連接程序需要大約五分鐘才能完成。除非它快速失敗，否則 `ConnectCustomKeyStore` 會傳回 HTTP 200 回應和不帶屬性的 JSON 物件。不過，這個初始回應並不表示連接已成功。若要判斷外部金鑰存放區是否已連接，請參閱 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 回應中的連接狀態。

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

若要識別外部金鑰存放區，請使用其自訂金鑰存放區 ID。您可以在主控台的**Custom key stores (自訂金鑰存放區)** 頁面或使用 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作來找到 ID。執行此範例之前，請將範例 ID 以有效的 ID 取代。

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

`ConnectCustomKeyStore` 操作不會傳回其回應中的 `ConnectionState`。若要驗證已連接外部金鑰存放區，請使用 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作。在預設情況下，此操作會傳回您帳戶和區域中的所有自訂金鑰存放區。但是，您可以使用 `CustomKeyStoreId` 或 `CustomKeyStoreName` 參數 (但不能同時使用) 來限制對特定自訂金鑰存放區的回應。`CONNECTED` 的 `ConnectionState` 值表示外部金鑰存放區已連接至其外部金鑰存放區代理。

```
$ aws kms describe-custom-key-stores --custom-key-store-name ExampleXksVpc
{
    "CustomKeyStores": [
    {
      "CustomKeyStoreId": "cks-9876543210fedcba9",
      "CustomKeyStoreName": "ExampleXksVpc",
      "ConnectionState": "CONNECTED",
      "CreationDate": "2022-12-13T18:34:10.675000+00:00",
      "CustomKeyStoreType": "EXTERNAL_KEY_STORE",
      "XksProxyConfiguration": { 
        "AccessKeyId": "ABCDE98765432EXAMPLE",
        "Connectivity": "VPC_ENDPOINT_SERVICE",
        "UriEndpoint": "https://example-proxy-uri-endpoint-vpc",
        "UriPath": "/example/prefix/kms/xks/v1",
        "VpcEndpointServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-example"
      }
    }
  ]
}
```

如果 `DescribeCustomKeyStores` 回應中的 `ConnectionState` 值為 `FAILED`，則 `ConnectionErrorCode` 元素會指出失敗的原因。

在下列範例中， `XKS_VPC_ENDPOINT_SERVICE_NOT_FOUND`的值`ConnectionErrorCode`表示 AWS KMS 找不到用於與外部金鑰存放區代理通訊的 VPC 端點服務。確認 `XksProxyVpcEndpointServiceName` 正確、 AWS KMS 服務主體是 Amazon VPC 端點服務上允許的主體，而且 VPC 端點服務不需要接受連線請求。如需回應連接錯誤代碼的說明，請參閱 [外部金鑰存放區的連接錯誤代碼](xks-troubleshooting.md#xks-connection-error-codes)。

```
$ aws kms describe-custom-key-stores --custom-key-store-name ExampleXksVpc
{
    "CustomKeyStores": [
    {
      "CustomKeyStoreId": "cks-9876543210fedcba9",
      "CustomKeyStoreName": "ExampleXksVpc",
      "ConnectionState": "FAILED",
      "ConnectionErrorCode": "XKS_VPC_ENDPOINT_SERVICE_NOT_FOUND",
      "CreationDate": "2022-12-13T18:34:10.675000+00:00",
      "CustomKeyStoreType": "EXTERNAL_KEY_STORE",
      "XksProxyConfiguration": { 
        "AccessKeyId": "ABCDE98765432EXAMPLE",
        "Connectivity": "VPC_ENDPOINT_SERVICE",
        "UriEndpoint": "https://example-proxy-uri-endpoint-vpc",
        "UriPath": "/example/prefix/kms/xks/v1",
        "VpcEndpointServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-example"
      }
    }
  ]
}
```

# 中斷連接外部金鑰存放區
<a name="about-xks-disconnecting"></a>

當您中斷具有 [VPC 端點服務連接](choose-xks-connectivity.md#xks-vpc-connectivity)的外部金鑰存放區與其外部金鑰存放區代理的連接時， AWS KMS 會刪除其與 VPC 端點服務的介面端點，並移除其為支援連接而建立的網路基礎設施。具有公有端點連接的外部金鑰存放區不需要同等程序。此動作不會影響 VPC 端點服務或其任何支援元件，也不會影響外部金鑰存放區代理或任何外部元件。

當外部金鑰存放區中斷連線時， AWS KMS 不會將任何請求傳送至外部金鑰存放區代理。外部金鑰存放區的連接狀態為 `DISCONNECTED`。中斷連接的外部金鑰存放區中的 KMS 金鑰處於 [`UNAVAILABLE` 金鑰狀態](key-state.md) (除非其為[待刪除](deleting-keys.md))，這表示其無法用於密碼編譯操作。但是，您仍可以檢視和管理外部金鑰存放區和其現有 KMS 金鑰。

中斷連接狀態被設計為暫時且可還原的。您可以隨時重新連接外部金鑰存放區。通常，不需要重新設定。但是，如果相關聯的外部金鑰存放區代理的任何屬性在中斷連接時發生變更，例如其[代理身分驗證憑證](keystore-external.md#concept-xks-credential)的輪換，則必須先[編輯外部金鑰存放區設定](update-xks-keystore.md)，才能重新連接。

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

若要更好地預估中斷連接您的外部金鑰存放區的效果，請在外部金鑰存放區中識別 KMS 金鑰，並判斷[其過去的使用情形](deleting-keys-determining-usage.md)。

您可能中斷連接外部金鑰存放區的原因如下所示：
+ **編輯其屬性。**在連接外部金鑰存放區時，您可以編輯自訂金鑰存放區名稱、代理 URI 路徑和代理身分驗證憑證。但是，若要編輯代理連接類型、代理 URI 端點或 VPC 端點服務名稱，您必須先中斷連接外部金鑰存放區。如需詳細資訊，請參閱[編輯外部金鑰存放區屬性](update-xks-keystore.md)。
+ **停止 與外部金鑰存放區代理之間的所有通訊**。 AWS KMS 您也可以停用端點或 VPC 端點服務，停止 AWS KMS 與代理之間的通訊。此外，您的外部金鑰存放區代理或金鑰管理軟體可能會提供額外的機制， AWS KMS 以防止 與代理通訊，或防止代理存取您的外部金鑰管理器。
+ 停用外部金鑰存放區中的**所有 KMS 金鑰**。您可以使用 AWS KMS 主控台或 [DisableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKey.html) 操作，在外部金鑰存放區中[停用和重新啟用 KMS](enabling-keys.md) 金鑰。這些操作會快速完成 (視最終一致性而定)，但一次只能對一個 KMS 金鑰進行。中斷連接外部金鑰存放區會將外部金鑰存放區中所有 KMS 金鑰的金鑰狀態變更為 `Unavailable`，這會防止在任何密碼編譯操作中對其進行使用。
+ **為了修復失敗的連接嘗試**。如果嘗試連接外部金鑰存放區失敗 (自訂金鑰存放區的連接狀態為 `FAILED`)，您必須先中斷連接外部金鑰存放區，之後再嘗試重新連接。

## 中斷連接外部金鑰存放區
<a name="disconnect-xks"></a>

您可以在 AWS KMS 主控台或使用 [DisconnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisconnectCustomKeyStore.html) 操作中斷連接外部金鑰存放區。

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

您可以使用 AWS KMS 主控台將外部金鑰存放區連接到其外部金鑰存放區代理。此程序約需 5 分鐘才能完成。

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. 從 **Key store actions** (金鑰存放區動作) 選單中，選擇 **Disconnect** (中斷連接)。

操作完成時，連接狀態會從 **DISCONNECTING (中斷連接中)** 變更為 **DISCONNECTED (已中斷連接)**。如果操作失敗，會出現錯誤訊息，其中描述問題並提供如何修正的協助。如果您需要更多協助，請參閱[外部金鑰存放區連接錯誤](xks-troubleshooting.md#fix-xks-connection)。

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

若要中斷連接已連接的外部金鑰存放區，請使用 [DisconnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisconnectCustomKeyStore.html) 操作。如果操作成功， 會 AWS KMS 傳回 HTTP 200 回應和沒有屬性的 JSON 物件。該程序需要大約五分鐘才能完成。若要查找外部金鑰存放區的連接狀態，請使用 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作。

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

此範例中斷連接具有 VPC 端點服務連接的外部金鑰存放區。執行此範例之前，請將範例自訂金鑰存放區 ID 取代為有效的 ID。

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

若要驗證已中斷連接外部金鑰存放區，請使用 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作。在預設情況下，此操作會傳回您帳戶和區域中的所有自訂金鑰存放區。但是，您可以使用 `CustomKeyStoreId` 和 `CustomKeyStoreName` 參數 (但不能同時使用) 來限制對特定自訂金鑰存放區的回應。`DISCONNECTED` 的 `ConnectionState` 值表示此範例外部金鑰存放區不再連接至其外部金鑰存放區代理。

```
$ aws kms describe-custom-key-stores --custom-key-store-name ExampleXksVpc
{
    "CustomKeyStores": [
    {
      "CustomKeyStoreId": "cks-9876543210fedcba9",
      "CustomKeyStoreName": "ExampleXksVpc",
      "ConnectionState": "DISCONNECTED",
      "CreationDate": "2022-12-13T18:34:10.675000+00:00",
      "CustomKeyStoreType": "EXTERNAL_KEY_STORE",
      "XksProxyConfiguration": { 
        "AccessKeyId": "ABCDE98765432EXAMPLE",
        "Connectivity": "VPC_ENDPOINT_SERVICE",
        "UriEndpoint": "https://example-proxy-uri-endpoint-vpc",
        "UriPath": "/example/prefix/kms/xks/v1",
        "VpcEndpointServiceName": "com.amazonaws.vpce.us-east-1.vpce-svc-example"
      }
    }
  ]
}
```

# 刪除外部金鑰存放區
<a name="delete-xks"></a>

當您刪除外部金鑰存放區時， 會從 AWS KMS 中刪除有關外部金鑰存放區的所有中繼資料 AWS KMS，包括有關其外部金鑰存放區代理的資訊。此操作不會影響[外部金鑰存放區代理](keystore-external.md#concept-xks-proxy)、[外部金鑰管理器](keystore-external.md#concept-ekm)、[外部金鑰](keystore-external.md#concept-external-key)或您建立以支援外部金鑰存放區的任何 AWS 資源，例如 Amazon VPC 或 VPC 端點服務。

刪除外部金鑰存放區之前，您必須[刪除金鑰存放區中的所有 KMS 金鑰](deleting-keys.md)，並從其外部金鑰存放區代理中[中斷連接金鑰存放區](xks-connect-disconnect.md)。否則，嘗試刪除金鑰存放區會失敗。

刪除外部金鑰存放區是不可復原的，但您可以建立新的外部金鑰存放區，並將其與相同的外部金鑰存放區代理和外部金鑰管理器產生關聯。不過，您無法在外部金鑰存放區中重新建立對稱加密 KMS 金鑰，即使您可存取相同的外部金鑰材料。 在每個 KMS 金鑰特有的對稱加密文字中 AWS KMS 包含中繼資料。此安全功能可以確保僅已加密資料的 KMS 金鑰可以解密。

請考慮將其中斷連接，而不是刪除外部金鑰存放區。當外部金鑰存放區中斷連線時，您可以管理外部金鑰存放區及其 ， AWS KMS keys 但無法在外部金鑰存放區中建立或使用 KMS 金鑰。您可以隨時重新連接外部金鑰存放區，並繼續使用其 KMS 金鑰來加密和解密資料。中斷連接的外部金鑰存放區代理或其無法使用的 KMS 金鑰無需支付任何費用。

您可以在 AWS KMS 主控台或使用 [DeleteCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteCustomKeyStore.html) 操作來刪除外部金鑰存放區。

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

您可以使用 AWS 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. 尋找代表您要刪除之外部金鑰存放區的資料列。如果外部金鑰存放區的**連接狀態**不是 **DISCONNECTED** (已中斷連接)，則在刪除之前，必須[中斷連接外部金鑰存放區](about-xks-disconnecting.md#disconnect-xks-console)。

1. 從 **Key store actions** (金鑰存放區動作) 選單中，選擇 **Delete** (刪除)。

當操作完成時，就會出現成功訊息，並且外部金鑰存放區將不再顯示在金鑰存放區清單中。如果操作失敗，就會出現錯誤訊息，其中描述問題並提供如何修正的協助。如果您需要更多協助，請參閱[外部金鑰存放區故障診斷](xks-troubleshooting.md)。

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

若要刪除外部金鑰存放區，請使用 [DeleteCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteCustomKeyStore.html) 操作。如果操作成功， 會 AWS KMS 傳回 HTTP 200 回應和沒有屬性的 JSON 物件。

若要開始，請中斷連接外部金鑰存放區。執行此命令之前，請將範例自訂金鑰存放區 ID 以有效的 ID 取代。

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

外部金鑰存放區中斷連接之後，您就可以使用 [DeleteCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_DeleteCustomKeyStore.html) 操作將其刪除。

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

若要確認已刪除外部金鑰存放區，請使用 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作。

```
$ aws kms describe-custom-key-stores
            
{
    "CustomKeyStores": []
}
```

如果您指定不再存在的自訂金鑰存放區名稱或 ID， 會 AWS KMS 傳回`CustomKeyStoreNotFoundException`例外狀況。

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

An error occurred (CustomKeyStoreNotFoundException) when calling the DescribeCustomKeyStore operation:
```

# 外部金鑰存放區故障診斷
<a name="xks-troubleshooting"></a>

大多數外部金鑰存放區問題的解決方法，是以每次例外狀況時 AWS KMS 顯示的錯誤訊息表示，或是透過嘗試[將外部金鑰存放區連線至](xks-connect-disconnect.md)其外部金鑰存放區代理失敗時 AWS KMS 傳回的[連線錯誤代碼](#fix-xks-connection)表示。但是，有些問題有點複雜。

診斷外部金鑰存放區的問題時，請先找出原因。這將縮小補救措施的範圍，並使您更有效地進行故障排除。
+ AWS KMS — 問題可能位於其中 AWS KMS，例如[外部金鑰存放區組態](create-xks-keystore.md#xks-requirements)中的值不正確。
+ 外部 — 問題可能源自外部 AWS KMS，包括外部金鑰存放區代理、外部金鑰管理器、外部金鑰或 VPC 端點服務的組態或操作問題。
+ 聯網 — 這可能是連線或聯網的問題，例如代理端點、連接埠、IP 堆疊或私有 DNS 名稱或網域的問題。

**注意**  
當外部金鑰存放區上的管理操作失敗時，其會產生數個不同的例外狀況。但是 AWS KMS ，密碼編譯操作`KMSInvalidStateException`會傳回與外部金鑰存放區外部組態或連線狀態相關的所有失敗。若要識別問題，請使用隨附的錯誤訊息文字。  
連接程序完成之前，[ConnectCustomKeyStore](xks-connect-disconnect.md) 操作會迅速成功。若要確定連接程序是否成功，請檢視外部金鑰存放區的[連接狀態](xks-connect-disconnect.md#xks-connection-state)。如果連接程序失敗，則 AWS KMS 會傳回[連接錯誤代碼](#xks-connection-error-codes)，說明原因並建議解決方法。

**Topics**
+ [外部金鑰存放區的故障診斷工具](#xks-troubleshooting-tools)
+ [組態錯誤](#fix-xks-configuration)
+ [外部金鑰存放區連接錯誤](#fix-xks-connection)
+ [延遲和逾時錯誤](#fix-xks-latency)
+ [身分驗證憑證錯誤](#fix-xks-credentials)
+ [金鑰狀態錯誤](#fix-unavailable-xks-keys)
+ [解密錯誤](#fix-xks-decrypt)
+ [外部金鑰錯誤](#fix-external-key)
+ [代理問題](#fix-xks-proxy)
+ [代理授權問題](#fix-xks-authorization)

## 外部金鑰存放區的故障診斷工具
<a name="xks-troubleshooting-tools"></a>

AWS KMS 提供數種工具，協助您識別和解決外部金鑰存放區及其金鑰的問題。將這些工具與外部金鑰存放區代理和外部金鑰管理器隨附的工具搭配使用。

**注意**  
您的外部金鑰存放區代理和外部金鑰管理器可能會提供更簡單的方法來建立和維護外部金鑰存放區及其 KMS 金鑰。如需詳細資訊，請參閱外部工具的文件。

**AWS KMS 例外狀況和錯誤訊息**  
AWS KMS 提供有關其遇到的任何問題的詳細錯誤訊息。您可以在 [https://docs.aws.amazon.com/kms/latest/APIReference/](https://docs.aws.amazon.com/kms/latest/APIReference/)和 AWS SDKs中找到有關 AWS KMS 例外狀況的其他資訊。即使您使用 AWS KMS 主控台，也可能會發現這些參考很有幫助。例如，請參閱 `CreateCustomKeyStores` 操作的[錯誤](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateCustomKeyStore.html#API_CreateCustomKeyStore_Errors)清單。  
為了最佳化外部金鑰存放區代理的效能， AWS KMS 會根據代理的可靠性，在 5 分鐘的指定彙總期間內傳回例外狀況。如果發生 500 內部伺服器錯誤、503 服務無法使用或連線逾時，具有高可靠性的代理會傳回`KMSInternalException`並觸發自動重試，以確保請求最終成功。不過，可靠性低的代理會傳回 `KMSInvalidStateException`。如需詳細資訊，請參閱[監控外部金鑰存放區](https://docs.aws.amazon.com/kms/latest/developerguide/xks-monitoring.html)。  
如果問題出現在不同的 AWS 服務中，例如當您使用外部金鑰存放區中的 KMS 金鑰來保護其他服務中的資源時 AWS ，該 AWS 服務可能會提供其他資訊，以協助您識別問題。如果 AWS 服務不提供訊息，您可以在記錄 KMS 金鑰使用的 [CloudTrail 日誌](logging-using-cloudtrail.md)中檢視錯誤訊息。

**[CloudTrail日誌](logging-using-cloudtrail.md)**  
每個 AWS KMS API 操作，包括 AWS KMS 主控台中的動作，都會記錄在 AWS CloudTrail log 中。 會 AWS KMS 記錄日誌項目，以取得成功和失敗的操作。對於失敗的操作，日誌項目會包含 AWS KMS 例外狀況名稱 (`errorCode`) 和錯誤訊息 (`errorMessage`)。您可以使用此資訊來協助您識別和解決錯誤。如需範例，請參閱 [使用外部金鑰存放區中的 KMS 金鑰進行解密失敗](ct-decrypt.md#ct-decrypt-xks-fail)。  
日誌項目也包含請求 ID。如果請求到達外部金鑰存放區代理，則您可以使用日誌項目中的請求 ID，在代理日誌中尋找相應的請求 (如果代理提供的話)。

**[CloudWatch 指標](monitoring-cloudwatch.md#kms-metrics)**  
AWS KMS 會記錄有關外部金鑰存放區操作和效能的詳細 Amazon CloudWatch 指標，包括延遲、調節、代理錯誤、外部金鑰管理器狀態、TLS 憑證過期前的天數，以及代理身分驗證憑證的回報存留期。您可以使用這些指標為外部金鑰存放區和 CloudWatch 警示的操作開發資料模型，在即將發生的問題出現之前提醒您。  
AWS KMS 建議您建立 CloudWatch 警示來監控外部金鑰存放區指標。這些警報會在問題發生之前提醒您早期跡象。

**[監控圖表](xks-monitoring.md)**  
AWS KMS 會在 AWS KMS 主控台中每個外部金鑰存放區的詳細資訊頁面上顯示外部金鑰存放區 CloudWatch 指標的圖形。您可以使用圖表中的資料來協助尋找錯誤來源、偵測即將發生的問題、建立基準以及強化 CloudWatch 警示閾值。如需有關解釋監控圖表及使用其資料的詳細資訊，請參閱 [監控外部金鑰存放區](xks-monitoring.md)。

**顯示外部金鑰存放區和 KMS 金鑰**  
AWS KMS 會在 AWS KMS 主控台的外部金鑰存放區中，以及回應 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 和 [DescribeKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeKey.html) 操作時，顯示外部金鑰存放區和 KMS 金鑰的詳細資訊。這些顯示包括外部金鑰存放區和 KMS 金鑰的特殊欄位，以及可用於進行故障診斷的資訊，例如外部金鑰存放區的[連接狀態](xks-connect-disconnect.md#xks-connection-state)，以及與 KMS 金鑰相關聯的外部金鑰 ID。如需詳細資訊，請參閱[檢視外部金鑰存放區](view-xks-keystore.md)。

**[XKS 代理測試用戶端](https://github.com/aws-samples/aws-kms-xksproxy-test-client)**  
AWS KMS 提供開放原始碼測試用戶端，可驗證外部金鑰存放區代理是否符合[AWS KMS 外部金鑰存放區代理 API 規格](https://github.com/aws/aws-kms-xksproxy-api-spec/)。您可以使用此測試用戶端來識別並解決外部金鑰存放區代理的問題。

## 組態錯誤
<a name="fix-xks-configuration"></a>

建立外部金鑰存放區時，您可以指定組成外部金鑰存放區*組態*的屬性值，例如[代理身分驗證憑證](create-xks-keystore.md#require-credential)、[代理 URI 端點](create-xks-keystore.md#require-endpoint)、[代理 URI 路徑](create-xks-keystore.md#require-path)以及 [VPC 端點服務名稱](create-xks-keystore.md#require-vpc-service-name)。當 AWS KMS 偵測到屬性值中的錯誤時，操作會失敗，並傳回指出錯誤值的錯誤。

許多組態問題可以透過修正不正確的值來解決。您可以修正無效的代理 URI 路徑或代理身分驗證憑證，而無需中斷連接外部金鑰存放區。如需這些值的定義，包括唯一性要求，請參閱 [備妥先決條件](create-xks-keystore.md#xks-requirements)。如需有關更新這些值的指示，請參閱 [編輯外部金鑰存放區屬性](update-xks-keystore.md)。

若要避免代理 URI 路徑和代理身分驗證憑證值發生錯誤，在建立或更新外部金鑰存放區時，請將[代理組態檔案](create-xks-keystore.md#proxy-configuration-file)上傳至 AWS KMS 主控台。這是一個基於 JSON 的檔案，其中包含代理 URI 路徑和代理身分驗證憑證值，由外部金鑰存放區代理或外部金鑰管理器提供。您無法將代理組態檔案與 AWS KMS API 操作搭配使用，但您可以使用檔案中的值來協助您為 API 請求提供符合代理中值的參數值。

### 一般組態錯誤
<a name="fix-xks-gen-configuration"></a>

**例外狀況**：`CustomKeyStoreInvalidStateException` (`CreateKey`)、`KMSInvalidStateException` (密碼編譯操作)、`XksProxyInvalidConfigurationException` (管理操作，`CreateKey` 除外)

[**連接錯誤代碼**](#xks-connection-error-codes)：`XKS_PROXY_INVALID_CONFIGURATION`、`XKS_PROXY_INVALID_TLS_CONFIGURATION`

對於具有[公有端點連線](choose-xks-connectivity.md#xks-connectivity-public-endpoint)的外部金鑰存放區， 會在您建立和更新外部金鑰存放區時 AWS KMS 測試屬性值。對於具有 [VPC 端點服務連接](choose-xks-connectivity.md#xks-vpc-connectivity)的外部金鑰存放區， AWS KMS 會在連接和更新外部金鑰存放區時測試屬性值。

**注意**  
即使嘗試將外部金鑰存放區連接至其外部金鑰存放區代理失敗，非同步的 `ConnectCustomKeyStore` 操作仍可能成功。在這種情況下，沒有例外狀況，但是外部金鑰存放區的連接狀態為 Failed (失敗)，連接錯誤代碼會說明錯誤訊息。如需詳細資訊，請參閱[外部金鑰存放區連接錯誤](#fix-xks-connection)。

如果 AWS KMS 偵測到屬性值中的錯誤，操作會失敗，並`XksProxyInvalidConfigurationException`傳回下列其中一個錯誤訊息。


|  | 
| --- |
| 由於 URI 路徑無效，外部金鑰存放區代理拒絕請求。驗證外部金鑰存放區的 URI 路徑，並在必要時更新。 | 
+ [代理 URI 路徑](create-xks-keystore.md#require-path)是 AWS KMS 請求代理 APIs的基本路徑。如果此路徑不正確，則對代理的所有請求都會失敗。若要檢視外部金鑰存放區的[當前代理 URI 路徑](view-xks-keystore.md)，請使用 AWS KMS 主控台或 `DescribeCustomKeyStores` 操作。若要尋找正確的代理 URI 路徑，請參閱您的外部金鑰存放區代理文件。如需有關修正代理 URI 路徑值的說明，請參閱 [編輯外部金鑰存放區屬性](update-xks-keystore.md)。
+ 外部金鑰存放區代理的代理 URI 路徑可能會隨著外部金鑰存放區代理或外部金鑰管理器的更新而變更。如需有關這些變更的資訊，請參閱外部金鑰存放區代理或外部金鑰管理器的文件。


|  | 
| --- |
| `XKS_PROXY_INVALID_TLS_CONFIGURATION`AWS KMS 無法建立與外部金鑰存放區代理的 TLS 連接。驗證 TLS 組態，包括其憑證。 | 
+ 所有外部金鑰存放區代理都需要 TLS 憑證。TLS 憑證必須由外部金鑰存放區支援的公有憑證授權機構核發。如需支援的 CA 清單，請參閱「 AWS KMS 外部金鑰存放區代理 API 規格」中的[受信任憑證授權機構](https://github.com/aws/aws-kms-xksproxy-api-spec/blob/main/TrustedCertificateAuthorities)。
+ 若為公有端點連接，TLS 憑證上的主體通用名稱 (CN) 必須與外部金鑰存放區代理之[代理 URI 端點](create-xks-keystore.md#require-endpoint)中的網域名稱相符。例如，如果公有端點為 https://myproxy.xks.example.com，則 TLS 憑證上的通用名稱必須為 `myproxy.xks.example.com` 或 `*.xks.example.com`。
+ 若為 VPC 端點服務連接，TLS 憑證上的主體通用名稱 (CN) 必須與 [VPC 端點服務](create-xks-keystore.md#require-vpc-service-name)的私有 DNS 名稱相符。例如，如果私有 DNS 名稱為 myproxy-private.xks.example.com，則 TLS 憑證上的通用名稱必須為 `myproxy-private.xks.example.com` 或 `*.xks.example.com`。
+ TLS 憑證不能過期。若要取得 TLS 憑證的到期日，請使用 SSL 工具，例如 [OpenSSL](https://www.openssl.org/)。若要監控與外部金鑰存放區關聯的 TLS 憑證的到期日，請使用 [XksProxyCertificateDaysToExpire](monitoring-cloudwatch.md#metric-xks-proxy-certificate-days-to-expire) CloudWatch 指標。TLS 憑證過期日期的天數也會顯示在 AWS KMS 主控台的[**監控**區段](xks-monitoring.md)中。
+ 如果您使用的是[公有端點連接](choose-xks-connectivity.md#xks-connectivity-public-endpoint)，則請使用 SSL 測試工具來測試您的 SSL 組態。TLS 連接錯誤可能是因為不正確的憑證鏈結所導致。

### VPC 端點服務連接組態錯誤
<a name="fix-xks-vpc-configuration"></a>

**例外狀況**：`XksProxyVpcEndpointServiceNotFoundException`、`XksProxyVpcEndpointServiceInvalidConfigurationException`

除了一般連線問題之外，使用 VPC 端點服務連線建立、連線或更新外部金鑰存放區時，您可能會遇到下列問題。在[建立](create-xks-keystore.md)、[連線](xks-connect-disconnect.md)和[更新](update-xks-keystore.md)外部金鑰存放區時，使用 VPC 端點服務連線 AWS KMS 測試外部金鑰存放區的屬性值。當管理操作因組態錯誤而失敗時，會產生下列例外狀況：


|  | 
| --- |
| XksProxyVpcEndpointServiceNotFoundException | 

原因可能為下列之一：
+ 不正確的 VPC 端點服務名稱。請確認外部金鑰存放區的 VPC 端點服務名稱正確且符合外部金鑰存放區的代理 URI 端點值。若要查找 VPC 端點服務名稱，請使用 [Amazon VPC 主控台](https://console.aws.amazon.com/vpc)或 [DescribeVpcEndpointServices](https://docs.aws.amazon.com/AmazonVPC/latest/APIReference/DescribeVpcEndpointServices.html) 操作。若要尋找現有外部金鑰存放區的 VPC 端點服務名稱和代理 URI 端點，請使用 AWS KMS 主控台或 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作。如需詳細資訊，請參閱[檢視外部金鑰存放區](view-xks-keystore.md)。
+ VPC 端點服務可能位於與外部金鑰存放區 AWS 區域 不同的 中。請確認 VPC 端點服務與外部金鑰存放區處於相同區域中。(區域名稱的外部名稱 (例如 `us-east-1`) 是 VPC 端點服務名稱的一部分，例如 com.amazonaws.vpce.us-east-1.vpce-svc-example)。如需外部金鑰存放區之 VPC 端點服務的要求清單，請參閱 [VPC 端點服務](create-xks-keystore.md#require-vpc-service-name)。您無法將 VPC 端點服務或外部金鑰存放區移至不同區域。不過，您可以在與 VPC 端點服務相同的區域中建立新的外部金鑰存放區。如需詳細資訊，請參閱 [設定 VPC 端點服務連線](vpc-connectivity.md) 和 [建立外部金鑰存放區](create-xks-keystore.md)。
+ AWS KMS 不是 VPC 端點服務的允許主體。VPC 端點服務的 **Allow principals** (允許主體) 清單必須包含 `cks.kms.<region>.amazonaws.com` 值，例如 `cks.kms.eu-west-3.amazonaws.com`。如需有關新增此值的指示，請參閱《AWS PrivateLink 指南》**中的[管理許可](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#add-remove-permissions)。


|  | 
| --- |
| XksProxyVpcEndpointServiceInvalidConfigurationException | 

當 VPC 端點服務無法滿足下列其中一項要求時，就會發生此錯誤：
+ VPC 需要至少兩個私有子網路，每個處於不同的可用區域。如需有關將子網路新增至 VPC 的說明，請參閱《Amazon VPC 使用者指南》**中的[在 VPC 中建立子網路](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-subnets.html#create-subnets)。
+ 您的 [VPC 端點服務類型](https://docs.aws.amazon.com/vpc/latest/privatelink/create-endpoint-service.html)必須使用網路負載平衡器，而非閘道負載平衡器。
+ VPC 端點服務不要求接受 (**Acceptance required** (要求接受) 必須為 False)。如果需要手動接受每個連線請求， AWS KMS 則 無法使用 VPC 端點服務連線到外部金鑰存放區代理。如需詳細資訊，請參閱《AWS PrivateLink 指南》**中的[接受或拒絕連接請求](https://docs.aws.amazon.com/vpc/latest/privatelink/configure-endpoint-service.html#accept-reject-connection-requests)。
+ VPC 端點服務必須具有私有 DNS 名稱，它是公有網域的子網域。例如，如果私有 DNS 名稱為 `https://myproxy-private.xks.example.com`，則 `xks.example.com` 或 `example.com` 網域必須具有公有 DNS 伺服器。若要檢視或變更 VPC 端點服務的私有 DNS 名稱，請參閱《AWS PrivateLink 指南》**中的[管理 VPC 端點服務的 DNS 名稱](https://docs.aws.amazon.com/vpc/latest/privatelink/manage-dns-names.html)。
+ 私有 DNS 名稱網域的 **Domain verification status** (網域驗證狀態) 必須為 `verified`。若要檢視和更新私有 DNS 名稱網域的驗證狀態，請參閱 [步驟 5：驗證您的私有 DNS 名稱網域](vpc-connectivity.md#xks-private-dns)。新增必要的文字記錄後，可能需要幾分鐘的時間才會顯示更新的驗證狀態。
**注意**  
只有當私有 DNS 網域是公有網域的子網域時，才能驗證它。否則，即使新增所需的 TXT 記錄後，私有 DNS 網域的驗證狀態也不會變更。
+ 確保 AWS KMS 和外部金鑰存放區代理之間的任何防火牆允許進出 Proxy 上連接埠 443 的流量。透過 IPv4 在連接埠 443 上 AWS KMS 通訊。此值不可設定。
+ VPC 端點服務的私有 DNS 名稱必須與外部金鑰存放區的[代理 URI 端點](create-xks-keystore.md#require-endpoint)值相符。對於具有 VPC 端點服務連接的外部金鑰存放區，代理 URI 端點必須為 `https://`，後面為 VPC 端點服務的私有 DNS 名稱。若要檢視代理 URI 端點值，請參閱 [檢視外部金鑰存放區](view-xks-keystore.md)。若要變更代理 URI 端點值，請參閱 [編輯外部金鑰存放區屬性](update-xks-keystore.md)。

## 外部金鑰存放區連接錯誤
<a name="fix-xks-connection"></a>

[將外部金鑰存放區連接至](about-xks-connecting.md)其外部金鑰存放區代理的程序大約需要五分鐘才能完成。除非其快速失敗，否則 `ConnectCustomKeyStore` 操作會傳回 HTTP 200 回應和不帶屬性的 JSON 物件。不過，這個初始回應並不表示連接已成功。若要判斷外部金鑰存放區是否已連接，請參閱其[連接狀態](xks-connect-disconnect.md#xks-connection-state)。如果連線失敗，外部金鑰存放區的連線狀態會變更為 ，`FAILED`並 AWS KMS 傳回[連線錯誤代碼](#xks-connection-error-codes)，說明失敗的原因。

**注意**  
如果自訂金鑰存放區的狀態為 `FAILED`，在嘗試重新連接之前，您必須中斷連接自訂金鑰存放區。您無法連接具有 `FAILED` 連接狀態的自訂金鑰存放區。

若要檢視外部金鑰存放區的連接狀態：
+ 在 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 回應中，檢視 `ConnectionState` 元素的值。
+ 在 AWS KMS 主控台中，**連線狀態**會出現在外部金鑰存放區資料表中。此外，在每個外部金鑰存放區的詳細資訊頁面上，**Connection state** (連接狀態) 會顯示在 **General configuration** (一般組態) 區段中。

當連接狀態為 `FAILED` 時，連接錯誤代碼有助於解釋錯誤。

若要檢視連接錯誤代碼：
+ 在 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 回應中，檢視 `ConnectionErrorCode` 元素的值。只有當 `ConnectionState` 為 `FAILED` 時，此元素才會出現在 `DescribeCustomKeyStores` 回應中。
+ 若要在 AWS KMS 主控台中檢視連線錯誤代碼，請在外部金鑰存放區的詳細資訊頁面上，並將滑鼠游標暫留在**失敗**值上。  
![\[自訂金鑰存放區詳細資訊頁面上的連接錯誤代碼\]](http://docs.aws.amazon.com/zh_tw/kms/latest/developerguide/images/connection-error-code.png)

### 外部金鑰存放區的連接錯誤代碼
<a name="xks-connection-error-codes"></a>

下列連接錯誤代碼適用於外部金鑰存放區

`INTERNAL_ERROR`  
AWS KMS 由於內部錯誤， 無法完成請求。重試 請求。若為 `ConnectCustomKeyStore` 請求，請先中斷連接自訂金鑰存放區，再重試連接。

`INVALID_CREDENTIALS`  
在指定的外部金鑰存放區代理上，一個或兩個 `XksProxyAuthenticationCredential` 值無效。

`NETWORK_ERRORS`  
網路錯誤 AWS KMS 導致無法將自訂金鑰存放區連接至其後端金鑰存放區。

`XKS_PROXY_ACCESS_DENIED`  
AWS KMS 請求會被拒絕存取外部金鑰存放區代理。如果外部金鑰存放區代理有授權規則，請確認其允許 AWS KMS 代表您與代理通訊。

`XKS_PROXY_INVALID_CONFIGURATION`  
組態錯誤導致外部金鑰存放區無法連接到其代理。驗證 `XksProxyUriPath` 的值。

`XKS_PROXY_INVALID_RESPONSE`  
AWS KMS 無法解譯來自外部金鑰存放區代理的回應。如果您重複看到此連接錯誤代碼，則請通知您的外部金鑰存放區代理廠商。

`XKS_PROXY_INVALID_TLS_CONFIGURATION`  
AWS KMS 無法連線至外部金鑰存放區代理，因為 TLS 組態無效。確認外部金鑰存放區代理支援 TLS 1.2 或 1.3。此外，請確認 TLS 憑證尚未過期，與 `XksProxyUriEndpoint` 值中的主機名稱相符，並且由[受信任憑證授權機構](https://github.com/aws/aws-kms-xksproxy-api-spec/blob/main/TrustedCertificateAuthorities)清單中所包含的受信任憑證授權機構簽署。

`XKS_PROXY_NOT_REACHABLE`  
AWS KMS 無法與您的外部金鑰存放區代理通訊。確認 `XksProxyUriEndpoint` 和 `XksProxyUriPath` 正確無誤。使用外部金鑰存放區代理的工具來驗證代理處於作用中狀態且可在其網路上使用。此外，請確認您的外部金鑰管理器執行個體運作正常。如果代理報告所有外部金鑰管理器執行個體都無法使用，則連接嘗試失敗，並顯示此連接錯誤代碼。

`XKS_PROXY_TIMED_OUT`  
AWS KMS 可以連線至外部金鑰存放區代理，但代理在分配 AWS KMS 的時間內不會回應 。如果您重複看到此連接錯誤代碼，則請通知您的外部金鑰存放區代理廠商。

`XKS_VPC_ENDPOINT_SERVICE_INVALID_CONFIGURATION`  
Amazon VPC 端點服務組態不符合 AWS KMS 外部金鑰存放區的要求。  
+ VPC 端點服務必須是呼叫者 AWS 帳戶中的介面端點的端點服務。
+ 其必須擁有已連接到至少兩個子網路的網路負載平衡器 (NLB)，每個位於不同的可用區域中。
+ `Allow principals` 清單必須包含 區域的 AWS KMS 服務主體，`cks.kms.<region>.amazonaws.com`例如 `cks.kms.us-east-1.amazonaws.com`。
+ 其*不得*要求[接受](https://docs.aws.amazon.com/vpc/latest/privatelink/create-endpoint-service.html)連接請求。
+ 其必須擁有私有 DNS 名稱。具有 `VPC_ENDPOINT_SERVICE` 連接的外部金鑰存放區的私有 DNS 名稱在其 AWS 區域中必須唯一。
+ 私有 DNS 名稱網域的[驗證狀態](https://docs.aws.amazon.com/vpc/latest/privatelink/verify-domains.html)必須為 `verified`。
+ [TLS 憑證](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/create-tls-listener.html)會指定可連接端點的私有 DNS 主機名稱。

`XKS_VPC_ENDPOINT_SERVICE_NOT_FOUND`  
AWS KMS 找不到用於與外部金鑰存放區代理通訊的 VPC 端點服務。確認 `XksProxyVpcEndpointServiceName` 正確無誤，且 AWS KMS 服務主體在 Amazon VPC 端點服務上具有服務消費者許可。

## 延遲和逾時錯誤
<a name="fix-xks-latency"></a>

**例外狀況**：`CustomKeyStoreInvalidStateException` (`CreateKey`)、`KMSInvalidStateException` (密碼編譯操作)、`XksProxyUriUnreachableException` (管理操作)

[**連接錯誤代碼**](#xks-connection-error-codes)：`XKS_PROXY_NOT_REACHABLE`、`XKS_PROXY_TIMED_OUT`

當 AWS KMS 無法在 250 毫秒的逾時間隔內聯絡代理時，它會傳回例外狀況。 `CreateCustomKeyStore`並`UpdateCustomKeyStore`傳回 `XksProxyUriUnreachableException`。密碼編譯操作會傳回 標準，`KMSInvalidStateException`並顯示描述問題的錯誤訊息。如果`ConnectCustomKeyStore`失敗， 會 AWS KMS 傳回描述問題的[連線錯誤代碼](#fix-xks-connection)。

逾時錯誤可能是暫時性的問題，可透過重試請求來解決。如果問題依然存在，請確認外部金鑰存放區代理處於作用中狀態且已連接至網路，並且其代理 URI 端點、代理 URI 路徑以及 VPC 端點服務名稱 (如果有的話) 在外部金鑰存放區中正確無誤。此外，確認您的外部金鑰管理器靠近 AWS 區域 外部金鑰存放區的 。如果需要更新任何這些值，請參閱 [編輯外部金鑰存放區屬性](update-xks-keystore.md)。

若要追蹤延遲模式，請使用 AWS KMS 主控台之 [**Monitoring** (監控) 區段](xks-monitoring.md)中的 [`XksProxyLatency`](monitoring-cloudwatch.md#metric-xks-proxy-latency) CloudWatch 指標和 **Average latency** (平均延遲) 圖表 (基於該指標)。您的外部金鑰存放區代理也可能會產生追蹤延遲和逾時的日誌和指標。


|  | 
| --- |
| `XksProxyUriUnreachableException`AWS KMS 無法與外部金鑰存放區代理通訊。這可能是暫時性的網路問題。如果您重複看到此錯誤，請確認外部金鑰存放區代理處於作用中狀態且已連接至網路，並且其端點 URI 在外部金鑰存放區中正確無誤。 | 
+ 外部金鑰存放區代理未在 250 毫秒逾時間隔內回應 AWS KMS 代理 API 請求。這可能表示代理發生暫時性的網路問題或者操作或效能問題。如果重試無法解決問題，請通知您的外部金鑰存放區代理管理員。

延遲和逾時錯誤通常顯示為連接失敗。當 [ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html) 操作失敗時，外部金鑰存放區的*連線狀態*會變更為 ，`FAILED`並 AWS KMS 傳回說明錯誤的*連線錯誤代碼*。如需連接錯誤代碼和解決錯誤的建議清單，請參閱 [外部金鑰存放區的連接錯誤代碼](#xks-connection-error-codes)。**All custom key stores** (所有自訂金鑰存放區) 和 **External key stores** (外部金鑰存放區) 的連接代碼清單適用於外部金鑰存放區。下列連接錯誤與延遲和逾時有關。


|  | 
| --- |
| `XKS_PROXY_NOT_REACHABLE`-或-`CustomKeyStoreInvalidStateException`, `KMSInvalidStateException`, `XksProxyUriUnreachableException`AWS KMS 無法與外部金鑰存放區代理通訊。請確認外部金鑰存放區代理處於作用中狀態且已連接至網路，以及外部金鑰存放區中的 URI 路徑和端點 URI 或 VPC 服務名稱正確無誤。 | 

此錯誤可能發生的原因如下：
+ 外部金鑰存放區代理處於非作用中狀態，或未連接至網路。
+ 外部金鑰存放區組態中的[代理 URI 端點](create-xks-keystore.md#require-endpoint)、[代理 URI 路徑](create-xks-keystore.md#require-path)或 [VPC 端點服務名稱](create-xks-keystore.md#require-vpc-service-name) (如果適用) 值中有錯誤。若要檢視外部金鑰存放區組態，請使用 [DescribeCustomKeyStores](https://docs.aws.amazon.com/kms/latest/APIReference/API_DescribeCustomKeyStores.html) 操作，或在 [主控台中檢視外部金鑰存放區的詳細資訊頁面](view-xks-keystore.md)。 AWS KMS 
+  AWS KMS 與外部金鑰存放區 proxy 之間的網路路徑上可能發生網路組態錯誤，例如連接埠錯誤。透過 IPv4 與連接埠 443 上的外部金鑰存放區代理 AWS KMS 通訊。此值不可設定。
+ 當外部金鑰存放區代理報告 (在 [GetHealthStatus](keystore-external.md#concept-proxy-apis) 回應中) 所有外部金鑰管理器執行個體都為 `UNAVAILABLE` 時，[ConnectCustomKeyStore](https://docs.aws.amazon.com/kms/latest/APIReference/API_ConnectCustomKeyStore.html) 操作會失敗，並顯示值為 `XKS_PROXY_NOT_REACHABLE` 的 `ConnectionErrorCode`。如需說明，請參閱外部金鑰管理器文件。
+ 此錯誤可能是因為外部金鑰管理器與 AWS 區域 具有外部金鑰存放區的 之間有很長的實體距離。 AWS 區域 與外部金鑰管理器之間的 ping 延遲 （網路往返時間 (RTT)) 不應超過 35 毫秒。您可能必須在 AWS 區域 更接近外部金鑰管理器的 中建立外部金鑰存放區，或將外部金鑰管理器移至更接近 的資料中心 AWS 區域。


|  | 
| --- |
| `XKS_PROXY_TIMED_OUT`-或-`CustomKeyStoreInvalidStateException`, `KMSInvalidStateException`, `XksProxyUriUnreachableException`AWS KMS 拒絕請求，因為外部金鑰存放區代理沒有及時回應。重試 請求。如果您重複看到此錯誤，請向外部金鑰存放區代理管理員報告。 | 

此錯誤可能發生的原因如下：
+ 此錯誤可能是由於外部金鑰管理器與外部金鑰存放區代理之間有很長的實際距離。如果可能，請將外部金鑰存放區代理移至更接近外部金鑰管理器的位置。
+ 當代理無法處理來自 的請求量和頻率時，可能會發生逾時錯誤 AWS KMS。如果 CloudWatch 指標指示持續存在問題，則請通知您的外部金鑰存放區代理管理員。
+ 當外部金鑰管理器與外部金鑰存放區的 Amazon VPC 之間的連接未正常運作時，可能會發生逾時錯誤。如果您使用的是 AWS Direct Connect，請確認您的 VPC 和外部金鑰管理器可以有效通訊。如需解決任何問題的協助，請參閱 Direct Connect 《 使用者指南》中的[故障診斷 AWS Direct Connect](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Troubleshooting.html)。


|  | 
| --- |
| `XKS_PROXY_TIMED_OUT`-或-`CustomKeyStoreInvalidStateException`, `KMSInvalidStateException`, `XksProxyUriUnreachableException` 外部金鑰存放區代理沒有在規定時間內回應請求。重試 請求。如果您重複看到此錯誤，請向外部金鑰存放區代理管理員報告。 | 
+ 此錯誤可能是由於外部金鑰管理器與外部金鑰存放區代理之間有很長的實際距離。如果可能，請將外部金鑰存放區代理移至更接近外部金鑰管理器的位置。

## 身分驗證憑證錯誤
<a name="fix-xks-credentials"></a>

**例外狀況**：`CustomKeyStoreInvalidStateException` (`CreateKey`)、`KMSInvalidStateException` (密碼編譯操作)、`XksProxyIncorrectAuthenticationCredentialException` (`CreateKey` 以外的管理操作)

您可以在外部金鑰存放區代理 AWS KMS 上建立和維護 的身分驗證憑證。然後在建立外部金鑰存放區時 AWS KMS 告知登入資料值。若要變更身分驗證憑證，請在外部金鑰存放區代理上進行變更。然後，更新外部金鑰存放區的[憑證](update-xks-keystore.md#xks-edit-name)。如果代理輪換憑證，則必須更新外部金鑰存放區的[憑證](update-xks-keystore.md#xks-edit-name)。

如果外部金鑰存放區代理無法驗證使用外部金鑰存放區的[代理身分驗證憑證](keystore-external.md#concept-xks-credential)簽署的請求，則效果取決於請求：
+ `CreateCustomKeyStore` 和 `UpdateCustomKeyStore` 因 `XksProxyIncorrectAuthenticationCredentialException` 失敗。
+ `ConnectCustomKeyStore` 成功，但連接失敗。連接狀態為 `FAILED`，連接錯誤代碼為 `INVALID_CREDENTIALS`。如需詳細資訊，請參閱[外部金鑰存放區連接錯誤](#fix-xks-connection)。
+ 密碼編譯操作`KMSInvalidStateException`會傳回外部金鑰存放區中的所有外部組態錯誤和連線狀態錯誤。隨附的錯誤訊息描述了問題。


|  | 
| --- |
| 外部金鑰存放區代理拒絕了請求，因為它無法對 AWS KMS進行身分驗證。驗證外部金鑰存放區的憑證，並在必要時更新。 | 

此錯誤可能發生的原因如下：
+ 外部金鑰存放區的存取金鑰 ID 或私密存取金鑰與外部金鑰存放區代理上建立的值不符。

  若要修正此錯誤，請更新外部金鑰存放區的[代理身分驗證憑證](update-xks-keystore.md#xks-edit-name)。您可以在不中斷外部金鑰存放區連接的情況下進行此變更。
+  AWS KMS 與外部金鑰存放區代理之間的反向代理可能會以使 SigV4 簽章失效的方式操作 HTTP 標頭。若要修正此錯誤，請通知代理管理員。

## 金鑰狀態錯誤
<a name="fix-unavailable-xks-keys"></a>

**例外狀況**：`KMSInvalidStateException`

`KMSInvalidStateException` 用於自訂金鑰存放區中 KMS 金鑰的兩種不同用途。
+ 當管理操作 (例如 `CancelKeyDeletion`) 失敗並傳回此例外狀況時，表示 KMS 金鑰的[金鑰狀態](key-state.md)與操作不相容。
+ 當自訂金鑰存放區中 KMS 金鑰的[密碼編譯操作](kms-cryptography.md#cryptographic-operations)因 `KMSInvalidStateException` 失敗時，可能表示 KMS 金鑰的金鑰狀態有問題。但是 AWS KMS ，密碼編譯操作`KMSInvalidStateException`會傳回外部金鑰存放區中的所有外部組態錯誤和連線狀態錯誤。若要識別問題，請使用例外狀況隨附的錯誤訊息。

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

**注意**  
外部金鑰存放區中 KMS 金鑰的金鑰狀態不會指示與其關聯的[外部金鑰](keystore-external.md#concept-external-key)的任何狀態資訊。如需有關外部金鑰狀態的資訊，請使用外部金鑰管理器和外部金鑰存放區代理工具。  
`CustomKeyStoreInvalidStateException` 指的是外部金鑰存放區的[連接狀態](xks-connect-disconnect.md#xks-connection-state)，而不是 KMS 金鑰的[金鑰狀態](key-state.md)。

自訂存放區中 KMS 金鑰的密碼編譯操作可能會失敗，因為 KMS 金鑰的金鑰狀態為 `Unavailable` 或 `PendingDeletion`。(已停用的金鑰會傳回 `DisabledException`。)
+ 只有當您刻意在 AWS KMS 主控台中停用 KMS 金鑰或使用 [DisableKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_DisableKey.html) 操作時，KMS 金鑰才會有金鑰`Disabled`狀態。當 KMS 金鑰被停用時，您可以檢視和管理金鑰，但無法在密碼編譯操作中使用它。若要修正此問題，請啟用金鑰。如需詳細資訊，請參閱[啟用和停用金鑰](enabling-keys.md)。
+ 當外部金鑰存放區與其外部金鑰存放區代理中斷連接時，KMS 金鑰的金鑰狀態為 `Unavailable`。若要修正無法使用的 KMS 金鑰，請[重新連接外部金鑰存放區](xks-connect-disconnect.md)。外部金鑰存放區重新連接之後，外部金鑰存放區中 KMS 金鑰的金鑰狀態會自動還原到其先前的狀態，例如 `Enabled` 或 `Disabled`。

  當 KMS 金鑰已排程刪除且處於等待期間時，KMS 金鑰的金鑰狀態為 `PendingDeletion`。正在等待刪除的 KMS 金鑰的金鑰狀態錯誤表示不應該刪除該金鑰，因為它正用於加密，或者需要它進行解密。若要重新啟用 KMS 金鑰，請取消已排程的刪除，然後[啟用金鑰](enabling-keys.md)。如需詳細資訊，請參閱[排程金鑰刪除](deleting-keys-scheduling-key-deletion.md)。

## 解密錯誤
<a name="fix-xks-decrypt"></a>

**例外狀況**：`KMSInvalidStateException`

當外部金鑰存放區中使用 KMS 金鑰的[解密](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html)操作失敗時， 會 AWS KMS 傳回`KMSInvalidStateException`密碼編譯操作用於外部金鑰存放區上所有外部組態錯誤和連線狀態錯誤的標準。指出問題的錯誤訊息。

若要解密使用[雙重加密](keystore-external.md#concept-double-encryption)來加密的密文，外部金鑰管理器會首先使用外部金鑰來解密密文外層。然後使用 AWS KMS KMS AWS KMS 金鑰中的金鑰材料來解密加密文字的內層。外部金鑰管理器或 AWS KMS可拒絕無效或損毀的密文。

解密失敗時，`KMSInvalidStateException` 會伴隨下列錯誤訊息。它指出請求中的密文或選用的加密內容有問題。


|  | 
| --- |
| 外部金鑰存放區代理拒絕請求，因為指定的密文或其他已驗證的資料已損毀、遺失或無效。 | 
+ 當外部金鑰存放區代理或外部金鑰管理器報告加密文字或其加密內容無效時，通常表示傳送`Decrypt`請求中的加密文字或加密內容有問題 AWS KMS。對於 `Decrypt`操作， AWS KMS 會傳送與`Decrypt`請求中接收到的相同加密文字和加密內容給代理。

  此錯誤可能是由傳輸過程中的網路問題所引起，例如翻轉位。重試 `Decrypt` 請求。如果問題仍然存在，請確認密文沒有被更改或損壞。此外，請確認`Decrypt`請求中的加密內容與加密資料的請求中的加密內容 AWS KMS 相符。


|  | 
| --- |
| 外部金鑰存放區代理提交用於解密的密文或加密內容已損毀、遺失或無效。 | 
+ 當 AWS KMS 拒絕從代理收到的加密文字時，表示外部金鑰管理器或代理傳回無效或損毀的加密文字 AWS KMS。

  此錯誤可能是由傳輸過程中的網路問題所引起，例如翻轉位。重試 `Decrypt` 請求。如果問題仍然存在，請確認外部金鑰管理器是否正常運作，而且外部金鑰存放區代理不會在傳回給外部金鑰管理器之前變更從外部金鑰管理器收到的加密文字 AWS KMS。

## 外部金鑰錯誤
<a name="fix-external-key"></a>

[外部金鑰](keystore-external.md#concept-external-key)是外部金鑰管理器中的密碼編譯金鑰，可作為 KMS 金鑰的外部金鑰材料。 AWS KMS 無法直接存取外部金鑰。它必須要求外部金鑰管理器 (透過外部金鑰存放區代理) 使用外部金鑰來加密資料或解密密文。

在外部金鑰存放區中建立 KMS 金鑰時，您可以在其外部金鑰管理器中指定外部金鑰的 ID。您無法在建立 KMS 金鑰之後變更外部金鑰 ID。為了避免 KMS 金鑰發生問題，`CreateKey` 操作會要求外部金鑰存放區代理驗證外部金鑰的 ID 和組態。如果外部金鑰[不滿足](create-xks-keys.md#xks-key-requirements)與 KMS 金鑰搭配使用的要求，則 `CreateKey` 操作會失敗，並顯示可識別問題的例外狀況和錯誤訊息。

不過，建立 KMS 金鑰之後可能會發生問題。如果密碼編譯操作由於外部金鑰問題而失敗，則操作會失敗並傳回 `KMSInvalidStateException` 和指出問題的錯誤訊息。

### 外部金鑰的 CreateKey 錯誤
<a name="fix-external-key-create"></a>

**例外狀況**：`XksKeyAlreadyInUseException`、`XksKeyNotFoundException`、`XksKeyInvalidConfigurationException`

[CreateKey](https://docs.aws.amazon.com/kms/latest/APIReference/API_CreateKey.html) 操作會嘗試驗證您在 **External key ID** (外部金鑰 ID) (主控台) 或 `XksKeyId` (API) 參數中提供的外部金鑰的 ID 和屬性。此做法的設計目的在於在您嘗試搭配使用外部金鑰和 KMS 金鑰之前，提前偵測錯誤。

**使用中的外部金鑰** 

外部金鑰存放區中的每個 KMS 金鑰都必須使用不同的外部金鑰。當 `CreateKey` 識別出 KMS 金鑰的外部金鑰 ID (xKSKeyID) 在外部金鑰存放區中不唯一時，就會失敗並顯示 `XksKeyAlreadyInUseException`。

如果您為相同外部金鑰使用多個 ID，`CreateKey` 將無法識別重複內容。不過，具有相同外部金鑰的 KMS 金鑰無法互通，因為它們具有不同的 AWS KMS 金鑰材料和中繼資料。

**找不到外部金鑰** 

當外部金鑰存放區代理報告它無法使用 KMS 金鑰的外部金鑰 ID (xKSKeyID) 找到外部金鑰時，`CreateKey` 操作會失敗，並傳回 `XksKeyNotFoundException` 及下列錯誤訊息。


|  | 
| --- |
| 外部金鑰存放區代理拒絕了請求，因為它找不到外部金鑰。 | 

此錯誤可能發生的原因如下：
+ KMS 金鑰的外部金鑰 ID (`XksKeyId`) 可能無效。若要查找外部金鑰代理用來識別外部金鑰的 ID，請參閱外部金鑰存放區代理或外部金鑰管理器文件。
+ 可能已從外部金鑰管理器刪除外部金鑰。若要進行調查，請使用外部金鑰管理器工具。如果外部金鑰已永久刪除，請搭配 KMS 金鑰使用其他外部金鑰。如需外部金鑰的清單或要求，請參閱 [外部金鑰存放區中 KMS 金鑰的要求](create-xks-keys.md#xks-key-requirements)。

**未滿足外部金鑰要求**

當外部金鑰存放區代理報告外部金鑰[不符合](create-xks-keys.md#xks-key-requirements)與 KMS 金鑰搭配使用的要求時，`CreateKey` 操作會失敗，並傳回 `XksKeyInvalidConfigurationException` 及下列其中一個錯誤訊息。


|  | 
| --- |
| 外部金鑰的金鑰規格必須為 AES\$1256。指定外部金鑰的金鑰規格為 <key-spec>。 | 
+ 外部金鑰必須是 256 位元對稱加密金鑰，金鑰規格為 AES\$1256。如果指定的外部金鑰是不同的類型，請指定符合此要求的外部金鑰 ID。


|  | 
| --- |
| 外部金鑰的狀態必須為 ENABLED。指定外部金鑰的狀態為 <status>。 | 
+ 必須在外部金鑰管理器中啟用外部金鑰。如果指定的外部金鑰未啟用，請使用外部金鑰管理器工具來啟用它，或指定已啟用的外部金鑰。


|  | 
| --- |
| 外部金鑰的金鑰用途必須包括 ENCRYPT 和 DECRYPT。指定外部金鑰的金鑰用途是 <key-usage>。 | 
+ 外部金鑰必須設定為在外部金鑰管理器中進行加密和解密。如果指定的外部金鑰不包含這些操作，請使用外部金鑰管理器工具變更操作，或指定其他外部金鑰。

### 外部金鑰的密碼編譯操作錯誤
<a name="fix-external-key-crypto"></a>

**例外狀況**：`KMSInvalidStateException`

當外部金鑰存放區代理找不到與 KMS 金鑰相關聯的外部金鑰時，或外部金鑰[不滿足](create-xks-keys.md#xks-key-requirements)與 KMS 金鑰搭配使用的要求時，密碼編譯操作會失敗。

與建立 KMS 金鑰之前偵測到的外部金鑰問題相比，在密碼編譯操作期間偵測到的外部金鑰問題更難解決。您無法在建立 KMS 金鑰之後變更外部金鑰 ID。如果 KMS 金鑰尚未加密任何資料，您可以刪除 KMS 金鑰，然後使用不同的外部金鑰 ID 建立新金鑰。不過，任何其他 KMS 金鑰都無法解密使用 KMS 金鑰產生的加密文字，即使是具有相同外部金鑰的金鑰，因為金鑰會有不同的金鑰中繼資料和不同的 AWS KMS 金鑰材料。相反，盡可能使用外部金鑰管理器工具來解決外部金鑰問題。

當外部金鑰存放區代理報告外部金鑰問題時，密碼編譯操作會傳回 `KMSInvalidStateException` 以及可識別問題的錯誤訊息。

**找不到外部金鑰**

當外部金鑰存放區代理報告其無法使用 KMS 金鑰的外部金鑰 ID (xKSKeyID) 找到外部金鑰時，密碼編譯操作會傳回 `KMSInvalidStateException` 以及下列錯誤訊息。


|  | 
| --- |
| 外部金鑰存放區代理拒絕了請求，因為它找不到外部金鑰。 | 

此錯誤可能發生的原因如下：
+ KMS 金鑰的外部金鑰 ID (`XksKeyId`) 已不再有效。

  若要查找與 KMS 金鑰相關聯的外部金鑰 ID，[請檢視 KMS 金鑰的詳細資訊](identify-key-types.md#view-xks-key)。若要查找外部金鑰代理用來識別外部金鑰的 ID，請參閱外部金鑰存放區代理或外部金鑰管理器文件。

  AWS KMS 在外部金鑰存放區中建立 KMS 金鑰時， 會驗證外部金鑰 ID。不過，ID 可能會變得無效，特別是如果外部金鑰 ID 值是別名或可變名稱。您不能變更與現有 KMS 金鑰相關聯的外部金鑰 ID。若要解密使用 KMS 金鑰加密的任何密文，您必須將外部金鑰與現有的外部金鑰 ID 重新關聯。

  如果您尚未使用 KMS 金鑰加密資料，您可以使用有效的外部金鑰 ID 建立新的 KMS 金鑰。但是，如果您已使用 KMS 金鑰產生密文，即使使用相同的外部金鑰，也無法使用任何其他 KMS 金鑰來解密密文。
+ 可能已從外部金鑰管理器刪除外部金鑰。若要進行調查，請使用外部金鑰管理器工具。如果可能，請嘗試從外部金鑰管理器的複本或備份中[復原金鑰材料](fix-keystore.md#fix-keystore-recover-backing-key)。如果永久刪除外部金鑰，則使用關聯的 KMS 金鑰加密的任何密文都無法復原。

**外部金鑰組態錯誤**

當外部金鑰存放區代理報告外部金鑰[不符合](create-xks-keys.md#xks-key-requirements)與 KMS 金鑰搭配使用的要求時，密碼編譯操作會傳回 `KMSInvalidStateException` 及下列其中一個錯誤訊息。


|  | 
| --- |
| 外部金鑰存放區代理拒絕了請求，因為外部金鑰不支持請求的操作。 | 
+ 外部金鑰必須同時支援加密和解密。如果金鑰用途不包含加密和解密，請使用外部金鑰管理器工具來變更金鑰用途。


|  | 
| --- |
| 外部金鑰存放區代理拒絕了請求，因為外部金鑰管理器中未啟用外部金鑰。 | 
+ 外部金鑰必須已啟用並且可用於外部金鑰管理器。如果外部金鑰的狀態不是 `Enabled`，請使用外部金鑰管理器工具來啟用它。

## 代理問題
<a name="fix-xks-proxy"></a>

**例外狀況：**

 `CustomKeyStoreInvalidStateException` (`CreateKey`)、`KMSInvalidStateException` (密碼編譯操作)、`UnsupportedOperationException`、`XksProxyUriUnreachableException`、`XksProxyInvalidResponseException` (`CreateKey` 以外的管理操作))

外部金鑰存放區代理會媒介 AWS KMS 和外部金鑰管理器之間的所有通訊。它會將一般 AWS KMS 請求轉譯為外部金鑰管理器可以了解的格式。如果外部金鑰存放區代理不符合[AWS KMS 外部金鑰存放區代理 API 規格](https://github.com/aws/aws-kms-xksproxy-api-spec/)，或 無法正常運作或無法與 通訊 AWS KMS，您將無法在外部金鑰存放區中建立或使用 KMS 金鑰。

雖然許多錯誤提到外部金鑰存放區代理，因為它在外部金鑰存放區架構中起著關鍵作用，但這些問題可能源於外部金鑰管理器或外部金鑰。

本節中的問題與外部金鑰存放區代理的設計或操作問題有關。解決這些問題可能需要變更代理軟體。請諮詢您的代理管理員。為了協助診斷代理問題， AWS KMS 會提供 [XKS Proxy Text Client](https://github.com/aws-samples/aws-kms-xksproxy-test-client)，它是一個開放原始碼測試用戶端，可驗證您的外部金鑰存放區代理是否符合 [AWS KMS 外部金鑰存放區代理 API 規格](https://github.com/aws/aws-kms-xksproxy-api-spec/)。


|  | 
| --- |
| `CustomKeyStoreInvalidStateException`、`KMSInvalidStateException` 或 `XksProxyUriUnreachableException`外部金鑰存放區代理處於運作不佳狀態。如果您重複看到此訊息，請通知外部金鑰存放區代理管理員。 | 
+ 此錯誤表示外部金鑰存放區代理中存在操作問題或軟體錯誤。您可以找到產生每個錯誤的 AWS KMS API 操作的 CloudTrail 日誌項目。重試操作可能會解決此錯誤。但是，如果問題仍然存在，請通知您的外部金鑰存放區代理管理員。
+ 當外部金鑰存放區代理報告 (在 [GetHealthStatus](keystore-external.md#concept-proxy-apis) 回應中) 所有外部金鑰管理器執行個體為 `UNAVAILABLE` 時，嘗試建立或更新外部金鑰存放區會失敗，並顯示此例外狀況。如果此錯誤仍然存在，請參閱外部金鑰管理器文件。


|  | 
| --- |
| `CustomKeyStoreInvalidStateException`、`KMSInvalidStateException` 或 `XksProxyInvalidResponseException`AWS KMS 無法解譯來自外部金鑰存放區代理的回應。如果您重複看到此錯誤，請咨詢您的外部金鑰存放區代理管理員。 | 
+ AWS KMS 當代理傳回 AWS KMS 無法剖析或解譯的未定義回應時， 操作會產生此例外狀況。由於暫時的外部問題或偶發的網絡錯誤，偶爾會發生此錯誤。但是，如果它仍然存在，則可能表示外部金鑰存放區代理不符合 [AWS KMS 外部金鑰存放區代理 API 規格](https://github.com/aws/aws-kms-xksproxy-api-spec/)。通知您的外部金鑰存放區管理員或廠商。


|  | 
| --- |
|  `CustomKeyStoreInvalidStateException`、`KMSInvalidStateException` 或 `UnsupportedOperationException` 外部金鑰存放區代理拒絕了請求，因為其不支援請求的密碼編譯操作。 | 
+ 外部金鑰存放區代理應支援 [AWS KMS 外部金鑰存放區代理 API 規格](https://github.com/aws/aws-kms-xksproxy-api-spec/)中定義的所有[代理 API](keystore-external.md#concept-proxy-apis)。此錯誤表示代理不支援與請求相關的操作。通知您的外部金鑰存放區管理員或廠商。

## 代理授權問題
<a name="fix-xks-authorization"></a>

**例外狀況**：`CustomKeyStoreInvalidStateException`、`KMSInvalidStateException`

某些外部金鑰存放區代理會實作使用其外部金鑰的授權需求。允許外部金鑰存放區代理 (但不是必需的) 來設計和實作授權方案，該方案允許特定使用者在特定條件下請求特定操作。例如，代理可能允許使用者使用特定的外部金鑰進行加密，但無法使用它進行解密。如需詳細資訊，請參閱[外部金鑰存放區代理授權 (選用)](authorize-xks-key-store.md#xks-proxy-authorization)。

Proxy 授權是以中繼資料為基礎，這些中繼資料 AWS KMS 包含在對 Proxy 的請求中。只有當請求來自 VPC 端點且呼叫者與 KMS 金鑰位於相同帳戶時，`awsSourceVpc` 和 `awsSourceVpce` 欄位才會包含在中繼資料中。

```
"requestMetadata": {
    "awsPrincipalArn": string,
    "awsSourceVpc": string, // optional
    "awsSourceVpce": string, // optional
    "kmsKeyArn": string,
    "kmsOperation": string,
    "kmsRequestId": string,
    "kmsViaService": string // optional
}
```

當代理因授權失敗而拒絕請求時，相關 AWS KMS 操作會失敗。 `CreateKey`會傳回 `CustomKeyStoreInvalidStateException`. AWS KMS cryptographic 操作會傳回 `KMSInvalidStateException`。兩者都使用下列錯誤訊息：


|  | 
| --- |
| 外部金鑰存放區代理拒絕存取該操作。確認使用者和外部金鑰都已獲得針對此操作的授權，然後再試一次請求。 | 
+ 若要解決錯誤，請使用外部金鑰管理器或外部金鑰存放區代理工具來確定授權失敗的原因。然後，更新導致未授權請求的程序，或使用外部金鑰存放區代理工具來更新授權政策。您無法在 AWS KMS中解決此錯誤。