建立外部金鑰存放區 - AWS Key Management Service

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

建立外部金鑰存放區

您可以在每個 AWS 帳戶 和區域中建立一個或許多外部金鑰存放區。每個外部金鑰存放區必須與 AWS 之外的外部金鑰管理器以及協調 AWS KMS 與外部金鑰管理器之間通訊的外部金鑰存放區代理 (XKS 代理) 相關聯。如需詳細資訊,請參閱 規劃外部金鑰存放區。開始之前,請確認您需要外部金鑰存放區。大多數客戶都可以使用由 AWS KMS 金鑰材料支援的 KMS 金鑰。

提示

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

在您建立外部金鑰存放區之前,您需要備妥先決條件。在建立過程中,您可以指定外部金鑰存放區的屬性。最重要的是,您可以指出 AWS KMS 中的外部金鑰存放區是否使用公有端點VPC 端點服務來連接到其外部金鑰存放區代理。您也可以指定連接詳細資料,包括代理的 URI 端點,以及 AWS KMS 將 API 請求傳送至代理的代理端點內的路徑。

  • 如果您使用公有端點連接,則請確定 AWS KMS 可以使用 HTTPS 連接透過網際網路與代理通訊。這包括在外部金鑰存放區代理上設定 TLS,並確保 AWS KMS 和代理之間的任何防火牆在代理上都允許連接埠 443 的進出流量。建立具有公有端點連接的外部金鑰存放區時,AWS KMS 透過將狀態請求傳送至外部金鑰存放區代理來測試連接。此測試會驗證端點是否可連接,以及您的外部金鑰存放區代理是否將接受使用外部金鑰存放區代理身分驗證憑證簽署的請求。如果此測試請求失敗,則建立外部金鑰存放區的操作失敗。

  • 如果您使用 VPC 端點服務連接,則請確定網路負載平衡器、私有 DNS 名稱和 VPC 端點服務設定正確且可運作。如果外部金鑰存放區代理不在 VPC 中,您需要確保 VPC 端點服務可以與外部金鑰存放區代理通訊。(當您將外部金鑰存放區連接至其外部金鑰存放區代理時,AWS KMS 會測試 VPC 端點服務連接。)

其他考量:

  • AWS KMS記錄 Amazon CloudWatch 指標和維度,特別是對於外部金鑰存放區。以這些指標為依據的監控圖表會顯示在每個外部金鑰存放區的 AWS KMS 主控台中。強烈建議您使用這些指標來建立警示,以監控您的金鑰存放區。這些警示會在效能和操作問題的相關跡象發生之前提醒您。如需說明,請參閱監控外部金鑰存放區

  • 外部金鑰存放區受資源配額限制。在外部金鑰存放區中使用 KMS 金鑰會受到請求配額的限制。在設計外部金鑰存放區實作之前,請檢閱這些配額。

注意

檢閱您的組態,了解可能導致其無法運作的循環相依性。

例如,如您利用 AWS 資源建立外部金鑰存放區代理,請確定在透過該代理存取的外部金鑰存放區操作代理不需可用的 KMS 金鑰。

在中斷連接的狀態下建立所有新的外部金鑰存放區。在外部金鑰存放區中建立 KMS 金鑰之前,必須先將其連接至外部金鑰存放區代理。若要變更外部金鑰存放區的屬性,請編輯外部金鑰存放區設定

備妥先決條件

在建立外部金鑰存放區之前,您需要組合必要的元件,包括您將用來支援外部金鑰存放區的外部金鑰管理器,以及將 AWS KMS 請求轉換為外部金鑰管理器可以理解之格式的外部金鑰存放區代理

所有外部金鑰存放區都需要下列元件。除了這些元件之外,您還需要提供其他元件來支援您選擇的外部金鑰存放區代理連接選項

提示

您的外部金鑰管理器可能包含其中一些元件,也可能會為您設定這些元件。如需詳細資訊,請參閱外部金鑰管理器文件。

如果您在 AWS KMS 主控台中建立外部金鑰存放區,則可以選擇上傳基於 JSON 的代理組態文件,該文件指定代理 URI 路徑代理身分驗證憑證。某些外部金鑰存放區代理會為您產生此檔案。如需詳細資訊,請參閱外部金鑰存放區代理或外部金鑰管理器的文件。

外部金鑰管理器

每個外部金鑰存放區至少需要一個外部金鑰管理器執行個體。這可以是實體或虛擬硬體安全模組 (HSM),也可以是金鑰管理軟體。

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

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

外部金鑰管理器必須可供外部金鑰存放區代理存取。如果代理伺服器的GetHealthStatus回應報告所有外部金鑰管理員執行個體都是Unavailable,則建立外部金鑰存放區的所有嘗試都會失敗,並顯示 XksProxyUriUnreachableException.

外部金鑰存放區代理

您必須指定外部金鑰存放區代理 (XKS 代理),其符合 AWS KMS 外部金鑰存放區代理規格中的設計需求。您可以開發或購買外部金鑰存放區代理,或使用外部金鑰管理器所提供或內建的外部金鑰存放區代理。AWS KMS 建議您將外部金鑰存放區代理設定為每秒最多可處理 1800 個請求,並在每個請求的 250 毫秒逾時內回應。建議您將外部金鑰管理器定位在靠近 AWS 區域 的位置,以便網路封包來回時間 (RTT) 為 35 毫秒或更短。

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

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

代理身分驗證憑證

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

您必須在外部金鑰存放區代理上為 AWS KMS 建立身分驗證憑證 (XksProxyAuthenticationCredential)。AWS KMS 透過搭配使用第 4 版簽署程序 (SigV4) 與外部金鑰存放區代理身分驗證憑證來簽署其請求,從而對代理進行身分驗證。您可以在建立外部金鑰存放區時指定身分驗證憑證,而且您可以隨時將其變更。如果代理輪換憑證,則請務必更新外部金鑰存放區的憑證值。

代理身分驗證憑證有兩部分。您必須為外部金鑰存放區提供這兩部分。

  • 存取金鑰 ID:識別私密存取金鑰。您可以提供純文字形式的 ID。

  • 私密存取金鑰:憑證的秘密部分。AWS KMS 在儲存憑證之前,先加密其中的私密存取金鑰。

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

代理連接

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

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

您可以變更外部金鑰存放區的代理連接選項。但是,您必須確保與外部金鑰存放區中 KMS 金鑰相關聯的金鑰材料持續可用。否則,AWS KMS 無法解密使用這些 KMS 金鑰加密的任何密文。

如需決定哪個代理連接選項最適合您的外部金鑰存放區的說明,請參閱 選擇代理連接選項。如需建立和設定 VPC 端點服務連接的說明,請參閱 設定 VPC 端點服務連接

代理 URI 端點

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

通訊協定必須為 HTTPS。AWS KMS 在連接埠 443 上進行通訊。請勿在代理 URI 端點值中指定連接埠。

  • 公有端點連接 – 指定外部金鑰存放區代理的公開可用端點。在建立外部金鑰存放區之前,必須可連接此端點。

  • VPC 端點服務連接 – 指定 https://,後跟 VPC 端點服務的私有 DNS 名稱。

在外部金鑰存放區代理上設定的 TLS 伺服器憑證必須與外部金鑰存放區代理 URI 端點中的網域名稱相符,並由外部金鑰存放區支援的憑證授權機構發行。如需清單,請參閱受信任的憑證授權機構。在發行 TLS 憑證之前,您的憑證授權機構將要求提供網域擁有權證明。

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

您可以變更代理 URI 端點,但請確定外部金鑰存放區代理可存取與外部金鑰存放區中 KMS 金鑰相關聯的金鑰材料。否則,AWS KMS 無法解密使用這些 KMS 金鑰加密的任何密文。

唯一性要求

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

  • 具有公有端點連接的外部金鑰存放區可以共用相同的代理 URI 端點,前提是其具有不同的代理 URI 路徑值。

  • 具有公有端點連接的外部金鑰存放區不能使用與同一 AWS 區域 中具有 VPC 端點服務連接之任何外部金鑰存放區相同的代理 URI 端點值,即使金鑰存放區位於不同的 AWS 帳戶 中。

  • 具有 VPC 端點連接的每個外部金鑰存放區都必須有自己的私有 DNS 名稱。代理 URI 端點 (私有 DNS 名稱) 在 AWS 帳戶 和區域中必須唯一。

代理 URI 路徑

若要建立外部金鑰存放區,您必須在外部金鑰存放區代理中指定所需代理 API 的基本路徑。該值必須以 / 開頭,且必須以 /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,則 AWS KMS 會將其代理 API 請求傳送到 https://myproxy.xks.example.com/kms/xks/v1

您可以變更代理 URI 路徑,但請確定外部金鑰存放區代理可存取與外部金鑰存放區中 KMS 金鑰相關聯的金鑰材料。否則,AWS KMS 無法解密使用這些 KMS 金鑰加密的任何密文。

唯一性要求

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

VPC 端點服務

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

VPC 端點服務必須具有下列屬性:

  • VPC 端點服務必須與外部金鑰存放區處於相同的 AWS 帳戶 和區域中。

  • 其必須擁有已連接到至少兩個子網路的網路負載平衡器 (NLB),每個位於不同的可用區域中。

  • VPC 端點服務的允許主體清單必須包含該區域的 AWS KMS 服務主體:cks.kms.<region>.amazonaws.com,例如 cks.kms.us-east-1.amazonaws.com

  • 其不能要求接受連接請求。

  • 其在較高級別的公有網域中必須具有私有 DNS 名稱。例如,在公有 xks.example.com 網域中擁有私有 DNS 名稱 myproxy-private.xks.example.com。

    具有 VPC 端點服務連接之外部金鑰存放區的私有 DNS 名稱在其 AWS 區域 中必須唯一。

  • 私有 DNS 名稱網域的網域驗證狀態必須為 verified

  • 在外部金鑰存放區代理上設定的 TLS 伺服器憑證必須指定可連接端點的私有 DNS 主機名稱。

唯一性要求

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

代理組態檔案

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

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

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

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

只有在 AWS KMS 主控台中建立或編輯外部金鑰存放區時,您才能上傳代理組態檔案。您無法將其與CreateCustomKeyStoreUpdateCustomKeyStore作業搭配使用,但可以使用 Proxy 組態檔案中的值來確保參數值正確無誤。

建立外部金鑰存放區 (主控台)

在建立外部金鑰存放區之前,請檢閱 規劃外部金鑰存放區,選擇代理連接類型,並確保您已建立並設定所有必要元件。如果您需要尋找任何必要值的說明,請參閱外部金鑰存放區代理或金鑰管理軟體的文件。

注意

當您在 AWS Management Console 中建立外部金鑰存放區時,您可以上傳以 JSON 為基礎的代理組態檔案,其中包含代理 URI 路徑代理身分驗證憑證的值。某些代理會為您產生此檔案。這不是必要的。

  1. 請登入 AWS Management Console,並開啟 AWS Key Management Service (AWS KMS) 主控台 (網站:https://console.aws.amazon.com/kms)。

  2. 若要變更 AWS 區域,請使用頁面右上角的區域選取器。

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

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

  5. 輸入外部金鑰存放區的易記名稱。該名稱在帳戶的所有外部金鑰存放區中必須唯一。

    重要

    請勿在此欄位包含機密或敏感資訊。在 CloudTrail 記錄檔和其他輸出中,此欄位可能會以純文字顯示。

  6. 選擇您的代理連接類型。

    您的代理連接選項會決定外部金鑰存放區代理所需的元件。如需進行此選擇的說明,請參閱 選擇代理連接選項

  7. 選擇或輸入此外部金鑰存放區的 VPC 端點服務名稱。只有當外部金鑰存放區代理連接類型為 VPC endpoint service (VPC 端點服務) 時,此步驟才會出現。

    VPC 端點服務及其 VPC 必須滿足外部金鑰存放區的要求。如需詳細資訊,請參閱 備妥先決條件

  8. 輸入您的代理 URI 端點。通訊協定必須為 HTTPS。AWS KMS 在連接埠 443 上進行通訊。請勿在代理 URI 端點值中指定連接埠。

    如果 AWS KMS 識別出您在上一個步驟中指定的 VPC 端點服務,則其會為您完成此欄位。

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

  9. 若要輸入代理 URI 路徑字首和代理身分驗證憑證的值,請上傳代理組態檔案,或手動輸入值。

    • 如果您有可選的代理組態檔案,其中包含代理 URI 路徑代理身分驗證憑證的值,則請選擇 Upload configuration file (上傳組態檔案)。遵循步驟上傳檔案。

      上傳檔案時,主控台會在可編輯欄位中顯示檔案中的值。您可以立即變更值,或在建立外部金鑰存放區後編輯這些值

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

    • 如果您沒有代理組態檔案,則可以手動輸入代理 URI 路徑和代理身分驗證憑證。

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

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

      2. 如果您沒有代理組態檔案,則可以手動輸入代理身分驗證憑證。存取金鑰 ID 和私密存取金鑰都是必要項目。

        • Proxy credential: Access key ID (代理憑證:存取金鑰 ID) 中,輸入代理身分驗證憑證的存取金鑰 ID。存取金鑰 ID 可識別私密存取金鑰。

        • Proxy credential: Secret access key (代理憑證:私密存取金鑰) 中,輸入代理身分驗證憑證的私密存取金鑰。

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

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

        如果您的代理身分驗證憑證發生變更,則請編輯外部金鑰存放區的憑證設定

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

當程序成功時,新的外部金鑰存放區會出現在帳戶和區域的外部金鑰存放區清單中。如果不成功,則會出現錯誤訊息來描述問題,並提供如何修正的說明。如果您需要更多協助,請參閱CreateKey 外部鍵錯誤

下一步:不會自動連接新的外部金鑰存放區。在外部金鑰存放區中建立 AWS KMS keys 之前,必須將外部金鑰存放區連接至外部金鑰存放區代理。

建立外部金鑰存放區 (API)

您可以使用此CreateCustomKeyStore作業建立新的外部金鑰存放區。如需尋找必要參數值的說明,請參閱外部金鑰存放區代理或金鑰管理軟體的文件。

提示

在使用 CreateCustomKeyStore 操作時,您無法上傳代理組態檔案。但是,您可以使用代理組態檔案中的值來確保參數值正確無誤。

若要建立外部金鑰存放區,CreateCustomKeyStore 操作需要下列參數值。

  • CustomKeyStoreName – 外部金鑰存放區在帳戶中唯一的易用名稱。

    重要

    請勿在此欄位包含機密或敏感資訊。在 CloudTrail 記錄檔和其他輸出中,此欄位可能會以純文字顯示。

  • CustomKeyStoreType – 指定 EXTERNAL_KEY_STORE

  • XksProxyConnectivity – 指定 PUBLIC_ENDPOINTVPC_ENDPOINT_SERVICE

  • XksProxyAuthenticationCredential – 指定存取金鑰 ID 和私密存取金鑰 ID。

  • XksProxyUriEndpoint – AWS KMS 用於與外部金鑰存放區代理通訊的端點。

  • XksProxyUriPath – 連接代理 API 的代理內路徑。

  • XksProxyVpcEndpointServiceName – 僅當 XksProxyConnectivity 值為 VPC_ENDPOINT_SERVICE 時才需要。

注意

如果您使用 AWS CLI 1.0 版,則請先執行下列命令,然後再指定具有 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 }

如果操作失敗,請修正例外狀況所指出的錯誤,然後重試。如需其他說明,請參閱外部金鑰存放區故障診斷

下一步:若要使用外部金鑰存放區,請將其連接至其外部金鑰存放區代理