交互 TLS 驗證 - AWS App Mesh

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

交互 TLS 驗證

相互 TLS (傳輸層安全性) 驗證是 TLS 的選用元件,可提供雙向對等驗證。相互 TLS 驗證會透過 TLS 增加一層安全性,並允許您的服務驗證正在進行連線的用戶端。

用戶端與伺服器關係中的用戶端也會在工作階段交涉程序期間提供 X.509 憑證。伺服器會使用此憑證來識別和驗證用戶端。此程序有助於驗證憑證是否由受信任的憑證授權單位 (CA) 發行,以及憑證是否為有效的憑證。它也會使用憑證上的主體別名 (SAN) 來識別用戶端。

您可以為支援的所有通訊協定啟用相互 TLS 驗證 AWS App Mesh。它們是 TCP,HTTP /1.1,HTTP/2,gRPC。

注意

使用應用程式網格,您可以為來自您服務的 Envoy 代理伺服器之間的通訊設定相互 TLS 驗證。不過,您的應用程式和 Envoy 代理伺服器之間的通訊是未加密的。

相互 TLS 驗證憑證

AWS App Mesh 支援兩個可能的憑證來源進行相互 TLS 驗證。TLS 用戶端原則中的用戶端憑證和監聽器 TLS 組態中的伺服器驗證可以來自:

  • 檔案系統:來自正在執行之 Envoy Proxy 本機檔案系統的憑證。要將證書分發給 Envoy,您需要提供證書鏈的文件路徑和 App Mesh API 的私鑰。

  • 特使的秘密發現服務(SDS)- 實施 SDS 並允許將證書發送給特使的 B ring-your-own 側車。它們包括 SPEFFE 運行時環境(SPIRE)。

重要

App Mesh 不會儲存用於相互 TLS 驗證的憑證或私密金鑰。相反,特使將它們存儲在內存中。

設定網面端點

為您的網狀端點 (例如虛擬節點或閘道) 設定相互 TLS 驗證。這些端點提供憑證並指定信任的授權單位。

若要這麼做,您需要為用戶端和伺服器佈建 X.509 憑證,並在 TLS 終止和 TLS 起始的驗證內容中明確定義受信任的授權單位憑證。

網格內部的信任

伺服器端憑證在虛擬節點接聽程式 (TLS 終止) 中設定,而用戶端憑證則在虛擬節點服務後端 (TLS 起始) 中設定。作為此組態的替代方案,您可以為虛擬節點的所有服務後端定義預設用戶端原則,然後視需要為特定後端覆寫此原則。虛擬閘道只能使用套用至其所有後端的預設用戶端策略來設定。

您可以針對兩個網格的虛擬閘道上的輸入流量啟用相互 TLS 驗證,在不同網格之間設定信任。

網格之外的信任

在虛擬閘道接聽程式中指定用於 TLS 終止的伺服器端憑證。設定與虛擬閘道通訊的外部服務,以顯示用戶端憑證。憑證應衍生自伺服器端憑證在 TLS 產生的虛擬閘道接聽程式上使用的相同憑證授權單位 (CA) 之一。

將服務遷移至相互 TLS 驗證

將 App Mesh 中的現有服務移轉至相互 TLS 驗證時,請遵循這些準則來維持連線。

移轉透過純文字通訊的服務
  1. 在伺服器端點上啟用 TLS 組態的PERMISSIVE模式。此模式允許純文字流量連線到端點。

  2. 在您的伺服器上設定相互 TLS 驗證,指定伺服器憑證、信任鏈,以及選擇性地指定受信任的 SAN。

  3. 確認通信正在通過 TLS 連接進行。

  4. 在用戶端上設定相互 TLS 驗證,指定用戶端憑證、信任鏈,以及選擇性地指定受信任的 SAN。

  5. STRICT啟用伺服器上 TLS 組態的模式。

移轉透過 TLS 通訊的服務
  1. 在用戶端上設定相互 TLS 設定,指定用戶端憑證,並選擇性地指定受信任的 SAN。在後端伺服器要求之前,用戶端憑證不會傳送至後端。

  2. 在伺服器上設定相互 TLS 設定,指定信任鏈,以及選擇性地指定受信任的 SAN。為此,您的服務器請求客戶端證書。

驗證相互 TLS 驗證

您可以參考傳輸層安全性:驗證加密文件,以瞭解 Envoy 如何確切發出 TLS 相關統計資料。對於相互 TLS 驗證,您應該檢查以下統計資料:

  • ssl.handshake

  • ssl.no_certificate

  • ssl.fail_verify_no_cert

  • ssl.fail_verify_san

下列兩個統計資料範例共同顯示終止至虛擬節點的 TLS 連線成功,全部來自提供憑證的用戶端。

listener.0.0.0.0_15000.ssl.handshake: 3
listener.0.0.0.0_15000.ssl.no_certificate: 0

下一個統計資料範例顯示從虛擬用戶端節點 (或閘道) 到後端虛擬節點的連線失敗。伺服器憑證中顯示的主體別名 (SAN) 不符合用戶端信任的任何 SAN。

cluster.cds_egress_my-mesh_my-backend-node_http_9080.ssl.fail_verify_san: 5

App Mesh 相互 TLS 驗證逐步解說