

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

# 交互 TLS 驗證
<a name="mutual-tls"></a>

**重要**  
支援終止通知：2026 年 9 月 30 日， AWS 將停止支援 AWS App Mesh。2026 年 9 月 30 日之後，您將無法再存取 AWS App Mesh 主控台或 AWS App Mesh 資源。如需詳細資訊，請參閱此部落格文章[從 遷移 AWS App Mesh 至 Amazon ECS Service Connect](https://aws.amazon.com/blogs/containers/migrating-from-aws-app-mesh-to-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 身分驗證憑證
<a name="mtls-certificates"></a>

AWS App Mesh 支援兩個可能的憑證來源進行交互 TLS 身分驗證。TLS 用戶端政策中的用戶端憑證和接聽程式 TLS 組態中的伺服器驗證可從下列來源取得：
+ **檔案系統 –** 來自正在執行之 Envoy 代理的本機檔案系統的憑證。若要將憑證分發至 Envoy，您需要提供憑證鏈和私有金鑰的檔案路徑給 App Mesh API。
+ **Envoy 的秘密探索服務 (SDS) –** Bring-your-own附屬，可實作 SDS 並允許將憑證傳送至 Envoy。其中包括 SPIFFE 執行期環境 (SPIRE)。

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

## 設定網格端點
<a name="mtls-configure-mesh-endpoints"></a>

為您的網格端點設定交互 TLS 身分驗證，例如虛擬節點或閘道。這些端點提供憑證並指定信任的授權單位。

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

**網格內部的信任**  
伺服器端憑證是在虛擬節點接聽程式 (TLS 終止） 中設定，而用戶端憑證是在虛擬節點服務後端 (TLS 起始） 中設定。作為此組態的替代方案，您可以為虛擬節點的所有服務後端定義預設用戶端政策，然後，如有需要，您可以針對特定後端覆寫此政策。虛擬閘道只能使用套用到其所有後端的預設用戶端政策進行設定。  
您可以為兩個網格的虛擬閘道上的傳入流量啟用交互 TLS 身分驗證，藉此設定跨不同網格的信任。

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

## 將服務遷移至交互 TLS 身分驗證
<a name="mtls-migrating-services"></a>

將 App Mesh 中的現有服務遷移至交互 TLS 身分驗證時，請遵循這些準則來維持連線。

**遷移透過純文字通訊的服務**

1. 在伺服器端點上啟用 TLS 組態的`PERMISSIVE`模式。此模式允許純文字流量連線到端點。

1. 在伺服器上設定交互 TLS 身分驗證，指定伺服器憑證、信任鏈，以及選擇性的信任 SANs。

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

1. 在用戶端上設定交互 TLS 身分驗證，指定用戶端憑證、信任鏈，以及選擇性的信任 SANs。

1. 在伺服器上啟用 TLS 組態的`STRICT`模式。

**遷移透過 TLS 通訊的服務**

1. 在用戶端上設定交互 TLS 設定，指定用戶端憑證和選用的信任 SANs。在後端伺服器請求用戶端憑證之前，用戶端憑證不會傳送至其後端。

1. 在伺服器上設定交互 TLS 設定，指定信任鏈和選擇性信任SANs。因此，您的伺服器會請求用戶端憑證。

## 驗證交互 TLS 身分驗證
<a name="mtls-verification"></a>

您可以參考 [Transport Layer Security：驗證加密](https://docs.aws.amazon.com/app-mesh/latest/userguide/tls.html#verify-encryption)文件，以查看 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 身分驗證演練
<a name="mtls-walkthrough"></a>
+  [相互 TLS 身分驗證演練](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-mutual-tls-file-provided)：此演練說明如何使用 App Mesh CLI 建立具有相互 TLS 身分驗證的顏色應用程式。
+  [Amazon EKS 交互 TLS SDS 型演練](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-mtls-sds-based)：此演練說明如何透過 Amazon EKS 和 SPIFFE 執行期環境 (SPIRE) 使用交互 TLS SDS 型身分驗證。
+  [Amazon EKS 交互 TLS 檔案型演練](https://github.com/aws/aws-app-mesh-examples/tree/main/walkthroughs/howto-k8s-mtls-file-based)：此演練說明如何搭配 Amazon EKS 和 SPIFFE 執行期環境 (SPIRE) 使用交互 TLS 檔案型身分驗證。