

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

# 外部金鑰存放區
<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 服務 無法解密加密的物件。