Transport Layer Security (TLS) - AWS 應用程式網格

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

Transport Layer Security (TLS)

重要

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

在 App Mesh 中,Transport Layer Security (TLS) 會加密部署在運算資源上的 Envoy 代理之間的通訊,這些資源由網格端點在 App Mesh 中表示,例如 虛擬節點虛擬閘道。代理交涉並終止 TLS。使用應用程式部署代理時,您的應用程式程式碼無需負責交涉TLS工作階段。代理TLS會代表您的應用程式進行交涉。

App Mesh 可讓您以下列方式提供TLS憑證給代理:

  • 由 AWS Certificate Manager (ACM) 發出的來自 () AWS Private Certificate Authority 的私有憑證AWS Private CA。

  • 由您自己的憑證授權機構 (CA) 發行的虛擬節點本機檔案系統上儲存的憑證

  • Secrets Discovery Service (SDS) 端點透過本機 Unix 網域通訊端提供的憑證。

Envoy Proxy 授權 必須針對網格端點代表的已部署 Envoy 代理啟用 。我們建議您啟用代理授權時,只能限制對要啟用加密之網格端點的存取。

憑證需求

憑證上的其中一個主體別名 (SANs) 必須符合特定條件,具體取決於網格端點代表的實際服務是如何發現的。

  • DNS – 其中一個憑證SANs必須符合DNS服務探索設定中提供的值。對於具有服務探索名稱 的應用程式mesh-endpoint.apps.local,您可以建立與該名稱相符的憑證,或使用萬用字元 的憑證*.apps.local

  • AWS Cloud Map – 其中一個憑證SANs必須與使用 格式 AWS Cloud Map 的服務探索設定中提供的值相符service-name.namespace-name。對於具有 serviceNamemesh-endpoint和 AWS Cloud Map 服務探索設定的應用程式 namespaceName apps.local,您可以建立與名稱 相符的憑證mesh-endpoint.apps.local,或使用萬用字元建立憑證 *.apps.local.

對於這兩種探索機制,如果沒有任何憑證SANs符合DNS服務探索設定,Envoys 之間的連線會失敗,並顯示下列錯誤訊息,如用戶端 Envoy 所示。

TLS error: 268435581:SSL routines:OPENSSL_internal:CERTIFICATE_VERIFY_FAILED

TLS 身分驗證憑證

使用TLS身分驗證時,App Mesh 支援多個憑證來源。

AWS Private CA

憑證必須存放在與將使用憑證的網格端點ACM相同的 區域和 AWS 帳戶中。CA 的憑證不需要位於相同的 AWS 帳戶中,但它仍需要位於與網格端點相同的 區域中。如果您沒有 AWS 私有 CA,則必須先建立 ,才能從中請求憑證。如需 AWS Private CA 使用 從現有 請求憑證的詳細資訊ACM,請參閱請求私有憑證 。憑證不能是公有憑證。

您用於TLS用戶端政策CAs的私有必須是根使用者 CAs。

若要使用憑證和CAs從 設定虛擬節點 AWS Private CA,您用來呼叫 App Mesh 的主體 (例如使用者或角色) 必須具有下列IAM許可:

  • 對於您新增至接聽程式TLS組態的任何憑證,主體必須具有 acm:DescribeCertificate 許可。

  • 對於在TLS用戶端政策上CAs設定的任何 ,主體必須具有 acm-pca:DescribeCertificateAuthority 許可。

重要

CAs 與其他帳戶共用可能會將這些帳戶意外的權限授予 CA。我們建議使用資源型政策,針對不需要從 CA 發出憑證acm-pca:GetCertificateAuthorityCertificate的帳戶,限制對 acm-pca:DescribeCertificateAuthority和 的存取。

您可以將這些許可新增至連接至委託人的現有IAM政策,或建立新的委託人和政策,並將政策連接至委託人。如需詳細資訊,請參閱編輯IAM政策 建立IAM政策 新增IAM身分許可

注意

在刪除每個 AWS Private CA 之前,您需為每個 的操作支付每月費用。您還需要為每月發行的私有憑證和匯出的私有憑證付費。如需詳細資訊,請參閱 AWS Certificate Manager 定價

當您為網格端點所代表的 Envoy Proxy 啟用代理授權時,您必須為所使用的IAM角色指派下列IAM許可:

  • 對於在虛擬節點接聽程式上設定的任何憑證,角色必須具有 acm:ExportCertificate 許可。

  • 對於在TLS用戶端政策上CAs設定的任何 ,角色必須具有 acm-pca:GetCertificateAuthorityCertificate 許可。

檔案系統

您可以使用 檔案系統將憑證分發給 Envoy。您可以讓憑證鏈和對應的私有金鑰在檔案路徑上可用,藉此執行此操作。如此一來,這些資源即可從 Envoy 邊車代理伺服器存取。

Envoy 的秘密探索服務 (SDS)

Envoy 透過 Secrets Discovery 通訊協定,從特定端點擷取諸如TLS憑證等秘密。如需此通訊協定的詳細資訊,請參閱 Envoy SDS 文件

App Mesh 會將 Envoy 代理設定為使用代理的本機 Unix 網域通訊端,當 SDS作為憑證和憑證鏈的來源時,作為秘密探索服務 (SDS) 端點。您可以使用APPMESH_SDS_SOCKET_PATH環境變數來設定此端點的路徑。

重要

App Mesh Envoy 代理 1.15.1.0 版及更新版本支援使用 Unix Domain Socket 的 Local Secrets Discovery Service。

App Mesh 支援使用 g 的 V2 SDS通訊協定RPC。

與SPIFFE執行期環境整合 (SPIRE)

您可以使用 的任何 Sidecar SDS 實作API,包括現有的工具鏈,例如SPIFFE執行期環境 (SPIRE)。SPIRE 旨在啟用分散式系統中多個工作負載之間的相互TLS身分驗證部署。它可證明執行階段工作負載的身分。SPIRE 也會將特定工作負載、短期和自動輪換金鑰和憑證直接交付至工作負載。

您應該將SPIRE客服人員設定為 Envoy 的SDS提供者。允許它直接為 Envoy 提供提供相互TLS身分驗證所需的金鑰材料。在 Envoy 代理旁的邊框中執行SPIRE代理程式。客服人員會視需要負責重新產生短期金鑰和憑證。客服人員會證明 Envoy,並判斷當 Envoy 連線至SPIRE客服人員公開的SDS伺服器時,應提供給 Envoy 哪些服務身分和 CA 憑證。

在此過程中,服務身分和 CA 憑證會輪換,並將更新串流回 Envoy。Envoy 會立即將它們套用至新的連線,而不會有任何中斷或停機時間,也不會讓私有金鑰接觸到檔案系統。

App Mesh 如何設定 Envoys 進行交涉 TLS

App Mesh 在決定如何在網格中設定 Envoys 之間的通訊時,會使用用戶端和伺服器的網格端點組態。

使用用戶端政策

當用戶端政策強制執行 的使用時TLS,且用戶端政策中的其中一個連接埠符合伺服器政策的連接埠時,用戶端政策會用來設定用戶端的TLS驗證內容。例如,如果虛擬閘道的用戶端政策與虛擬節點的伺服器政策相符,則會使用虛擬閘道的用戶端政策中定義的設定,在代理之間嘗試TLS協商。如果用戶端政策與伺服器政策的連接埠不相符,則代理TLS之間可能會也可能不會交涉,具體取決於伺服器政策TLS的設定。

沒有用戶端政策

如果用戶端未設定用戶端政策,或用戶端政策與伺服器的連接埠不相符,App Mesh 將使用伺服器來判斷是否要TLS從用戶端交涉,以及如何進行交涉。例如,如果虛擬閘道未指定用戶端政策,且虛擬節點未設定TLS終止,則代理TLS不會交涉。如果用戶端未指定相符的用戶端政策,且伺服器已設定為TLS模式 STRICTPERMISSIVE,則代理會設定為交涉 TLS。根據為TLS終止提供憑證的方式,下列其他行為適用。

  • ACM受管TLS憑證 – 當伺服器已使用 ACM受管憑證設定TLS終止時,App Mesh 會自動設定用戶端,針對憑證鏈結所在的根使用者 CA 來交涉TLS和驗證憑證。

  • 檔案型TLS憑證 – 當伺服器已使用代理本機檔案系統的憑證設定TLS終止時,App Mesh 會自動設定用戶端以交涉 TLS,但伺服器憑證未驗證。

主題替代名稱

您可以選擇性地指定要信任的主題別名 (SANs) 清單。SANs 必須為 FQDN或 URI 格式。如果SANs已提供 ,Envoy 會驗證所出示憑證的主體別名是否符合此清單上的其中一個名稱。

如果您未在終止的網格端點SANs上指定 ,則該節點的 Envoy 代理不會驗證對等用戶端憑證SAN上的 。如果您未在原始網格端點SANs上指定 ,終止端點提供的憑證SAN上的 必須符合網格端點服務探索組態。

如需詳細資訊,請參閱應用程式網格TLS:憑證需求

重要

只有在 TLS 的用戶端政策設定為 SANs時,才能使用萬用字元not enforced。如果用戶端虛擬節點或虛擬閘道的用戶端政策設定為強制執行 TLS,則無法接受萬用字元 SAN。

驗證加密

啟用 後TLS,您可以查詢 Envoy 代理,以確認通訊已加密。Envoy 代理會發出資源的統計資料,協助您了解TLS通訊是否正常運作。例如,Envoy 代理會記錄針對指定網格端點交涉的成功TLS交握次數統計資料。判斷my-mesh-endpoint使用下列命令命名的網格端點有多少成功TLS交握。

curl -s 'http://my-mesh-endpoint.apps.local:9901/stats' | grep ssl.handshake

在下列範例傳回輸出中,網格端點有三個交握,因此通訊會加密。

listener.0.0.0.0_15000.ssl.handshake: 3

交涉失敗時,Envoy TLS 代理也會發出統計資料。判斷網格端點是否TLS發生錯誤。

curl -s 'http://my-mesh-endpoint.apps.local:9901/stats' | grep -e "ssl.*\(fail\|error\)"

在傳回輸出的範例中,數個統計資料沒有錯誤,因此TLS協商成功。

listener.0.0.0.0_15000.ssl.connection_error: 0 listener.0.0.0.0_15000.ssl.fail_verify_cert_hash: 0 listener.0.0.0.0_15000.ssl.fail_verify_error: 0 listener.0.0.0.0_15000.ssl.fail_verify_no_cert: 0 listener.0.0.0.0_15000.ssl.ssl.fail_verify_san: 0

如需 Envoy TLS統計資料的詳細資訊,請參閱 Envoy Listener Statistics

憑證續約

AWS Private CA

當您使用 續約憑證時ACM,續約的憑證會在續約完成後的 35 分鐘內自動分發到您連接的代理。我們建議您使用 受管續約,在接近其有效期結束時自動續約憑證。如需詳細資訊,請參閱 AWS Certificate Manager 使用者指南中的 ACMAmazon 發行憑證的 Managed Renewal

您自己的憑證

從本機檔案系統使用憑證時,Envoy 不會在憑證變更時自動重新載入憑證。您可以重新啟動或重新部署 Envoy 程序,以載入新的憑證。您也可以將較新的憑證放在不同的檔案路徑,並使用該檔案路徑更新虛擬節點或閘道組態。

將 Amazon ECS工作負載設定為搭配 使用TLS身分驗證 AWS App Mesh

您可以設定您的網格以使用TLS身分驗證。確定憑證可供您新增至工作負載的 Envoy 代理側載使用。您可以將 EBS或 EFS磁碟區連接至您的 Envoy 邊車,也可以儲存並從 AWS Secrets Manager 擷取憑證。

  • 如果您使用以檔案為基礎的憑證分佈,請將 EBS或 EFS磁碟區連接至您的 Envoy Sidecar。確定憑證和私有金鑰的路徑與 中設定的路徑相符 AWS App Mesh。

  • 如果您使用的是 SDS型分佈,請新增SDSAPI具有憑證存取權的邊車,以實作 Envoy。

注意

SPIRE Amazon 不支援 ECS。

設定 Kubernetes 工作負載以搭配 使用TLS身分驗證 AWS App Mesh

您可以設定 Kubernetes 的 AWS App Mesh 控制器,以啟用虛擬節點和虛擬閘道服務後端和接聽程式的TLS身分驗證。請確定憑證可供您新增至工作負載的 Envoy 代理側載使用。您可以在相互TLS身分驗證的逐步解說區段中查看每個分發類型的範例。

  • 如果您使用以檔案為基礎的憑證分佈,請將 EBS或 EFS磁碟區連接至您的 Envoy Sidecar。確定憑證和私有金鑰的路徑與控制器中設定的路徑相符。或者,您可以使用安裝在檔案系統的 Kubernetes Secret。

  • 如果您使用的是 SDS型分佈,您應該設定節點本機SDS提供者來實作 Envoy 的 SDS API。Envoy 將透過 到達它UDS。若要在EKS AppMesh 控制器中啟用SDS基於 mTLS 的支援,請將enable-sds旗標設定為 ,true並透過sds-uds-path旗標提供本機SDS提供者的UDS控制器路徑。如果您使用 helm,您可以將這些設定為控制器安裝的一部分:

    --set sds.enabled=true
注意

如果您在 Fargate 模式下使用 Amazon Elastic Kubernetes Service (Amazon EKS),則無法使用 SPIRE 來分發憑證。