本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
交互 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 (Transport Layer Security) 身分驗證是 TLS 的選用元件,可提供雙向對等身分驗證。相互 TLS 身分驗證透過 TLS 新增一層安全性,讓您的服務可以驗證進行連線的用戶端。
在工作階段交涉過程中,用戶端與伺服器關係中的用戶端也會提供 X.509 憑證。伺服器使用此憑證來識別和驗證用戶端。此程序有助於驗證憑證是否由信任的憑證授權機構 (CA) 發行,以及憑證是否為有效的憑證。它也會使用憑證上的主體別名 (SAN) 來識別用戶端。
您可以為 支援的所有通訊協定啟用交互 TLS 身分驗證 AWS App Mesh。它們是 TCP、HTTP/1.1、HTTP/2、gRPC。
注意
使用 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 起始的驗證內容中明確定義信任的授權憑證。
- 網格內部的信任
-
伺服器端憑證是在虛擬節點接聽程式 (TLS 終止) 中設定,而用戶端憑證是在虛擬節點服務後端 (TLS 起始) 中設定。作為此組態的替代方案,您可以為虛擬節點的所有服務後端定義預設用戶端政策,然後,如有需要,您可以針對特定後端覆寫此政策。虛擬閘道只能使用套用到其所有後端的預設用戶端政策進行設定。
您可以為兩個網格的虛擬閘道上的傳入流量啟用交互 TLS 身分驗證,藉此設定跨不同網格的信任。
- 在網格外部的信任
-
在虛擬閘道接聽程式中指定伺服器端憑證以進行 TLS 終止。設定與虛擬閘道通訊的外部服務,以呈現用戶端憑證。憑證應衍生自伺服器端憑證在 Virtual Gateway 接聽程式上用於 TLS 起始的相同憑證授權單位 (CAs) 之一。
將服務遷移至交互 TLS 身分驗證
將 App Mesh 中的現有服務遷移至交互 TLS 身分驗證時,請遵循這些準則來維持連線。
遷移透過純文字通訊的服務
-
在伺服器端點上啟用 TLS 組態的
PERMISSIVE模式。此模式允許純文字流量連線到端點。 -
在伺服器上設定交互 TLS 身分驗證,指定伺服器憑證、信任鏈,以及選擇性的信任 SANs。
-
確認通訊是透過 TLS 連線進行。
-
在用戶端上設定交互 TLS 身分驗證,指定用戶端憑證、信任鏈,以及選擇性的信任 SANs。
-
在伺服器上啟用 TLS 組態的
STRICT模式。
遷移透過 TLS 通訊的服務
-
在用戶端上設定交互 TLS 設定,指定用戶端憑證和選用的信任 SANs。在後端伺服器請求用戶端憑證之前,用戶端憑證不會傳送至其後端。
-
在伺服器上設定交互 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 身分驗證演練
-
相互 TLS 身分驗證演練
:此演練說明如何使用 App Mesh CLI 建立具有相互 TLS 身分驗證的顏色應用程式。 -
Amazon EKS 交互 TLS SDS 型演練
:此演練說明如何透過 Amazon EKS 和 SPIFFE 執行期環境 (SPIRE) 使用交互 TLS SDS 型身分驗證。 -
Amazon EKS 交互 TLS 檔案型演練
:此演練說明如何搭配 Amazon EKS 和 SPIFFE 執行期環境 (SPIRE) 使用交互 TLS 檔案型身分驗證。