相互TLS身分驗證 - AWS 應用程式網格

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

相互TLS身分驗證

重要

支援終止通知:2026 年 9 月 30 日 AWS 將停止對 的支援 AWS App Mesh。2026 年 9 月 30 日後,您將無法再存取 AWS App Mesh 主控台或 AWS App Mesh 資源。如需詳細資訊,請造訪此部落格文章,從 遷移 AWS App Mesh 至 Amazon ECS Service Connect

相互 TLS(傳輸層安全) 身分驗證是 的選用元件TLS,可提供雙向對等身分驗證。相互TLS身分驗證會在 上新增一層安全性,TLS並允許您的服務驗證正在建立連線的用戶端。

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

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

注意

使用 App Mesh,您可以為來自 服務的 Envoy 代理之間的通訊設定相互TLS身分驗證。不過,您的應用程式與 Envoy 代理之間的通訊不會加密。

相互TLS身分驗證憑證

AWS App Mesh 支援兩個可能的憑證來源進行相互TLS身分驗證。用戶端政策中的TLS用戶端憑證和接聽程式TLS組態中的伺服器驗證可從下列來源取得:

  • 檔案系統 – 來自正在執行之 Envoy 代理的本機檔案系統的憑證。若要將憑證分發給 Envoy,您需要提供憑證鏈的檔案路徑和 App Mesh 的私有金鑰API。

  • Envoy 的秘密探索服務 (SDS) – Bring-your-own 實作SDS並允許憑證傳送至 Envoy 的邊車。其中包括SPIFFE執行期環境 (SPIRE)。

重要

App Mesh 不會儲存用於相互TLS身分驗證的憑證或私有金鑰。相反地,Envoy 會將它們存放在記憶體中。

設定網格端點

為您的網格端點設定相互TLS身分驗證,例如虛擬節點或閘道。這些端點提供憑證並指定信任的機構。

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

網格內部的信任

伺服器端憑證是在 Virtual Node 接聽程式 (TLS 終止) 中設定,而用戶端憑證是在 Virtual Nodes 服務後端 (TLS 原始伺服器) 中設定。作為此組態的替代方案,您可以為虛擬節點的所有服務後端定義預設用戶端政策,然後,如有需要,您可以針對特定後端覆寫此政策。Virtual Gateways 只能使用套用至其所有後端的預設用戶端政策進行設定。

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

在網格外信任

在 Virtual Gateway 接聽程式中指定伺服器端憑證以進行TLS終止。設定與虛擬閘道通訊的外部服務,以呈現用戶端憑證。憑證應衍生自伺服器端憑證在 Virtual Gateway 接聽程式上使用的相同憑證授權機構之一 (CAs),以進行TLS起始。

將服務遷移至相互TLS身分驗證

在 App Mesh 中將現有服務遷移至相互TLS身分驗證時,請遵循這些準則以維持連線。

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

  2. 在伺服器上設定相互TLS身分驗證,指定伺服器憑證、信任鏈,以及選用的信任 SANs。

  3. 確認通訊是透過TLS連線進行。

  4. 在用戶端上設定相互TLS身分驗證,指定用戶端憑證、信任鏈,以及選用的受信任 SANs。

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

透過 遷移通訊的服務 TLS
  1. 在用戶端上設定相互TLS設定,指定用戶端憑證和選用的信任 SANs。在後端伺服器請求用戶端憑證之前,用戶端憑證不會傳送至其後端。

  2. 在您的伺服器上設定相互TLS設定,指定信任鏈和選用的信任 SANs。因此,您的伺服器會請求用戶端憑證。

驗證相互TLS身分驗證

您可以參考 Transport Layer Security:驗證加密文件,查看 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) 不符合用戶端SANs信任的任何 。

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

App Mesh 相互TLS身分驗證演練