相互TLS认证 - Amazon App Mesh
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

相互TLS认证

重要

终止支持通知:2026 年 9 月 30 日, Amazon 将停止对的支持。 Amazon App Mesh 2026 年 9 月 30 日之后,您将无法再访问 Amazon App Mesh 控制台或 Amazon App Mesh 资源。如需了解更多信息,请访问此博客文章从迁移 Amazon App Mesh 到 Amazon S ECS ervice Connect

双向TLS(传输层安全)身份验证是其中的一个可选组件TLS,它提供双向对等身份验证。相互TLS身份验证增加了安全层,TLS并允许您的服务验证正在建立连接的客户端。

客户端-服务器关系中的客户端还会在会话协商过程中提供 X.509 证书。服务器使用此证书来识别和验证客户端。此过程有助于验证证书是否由可信证书颁发机构 (CA) 颁发,以及该证书是否为有效证书。它还使用证书上的主题备用名称 (SAN) 来识别客户端。

您可以为支持的所有协议启用双向TLS认证 Amazon App Mesh。它们是TCP,HTTP/1.1,HTTP/2,g。RPC

注意

使用 App Mesh,您可以为来自您的服务的 Envoy 代理之间的通信配置相互TLS身份验证。但是,您的应用程序与 Envoy 代理之间的通信未加密。

相互TLS认证证书

Amazon App Mesh 支持两种可能的证书来源进行相互TLS身份验证。客户端策略中的TLS客户端证书和侦听器TLS配置中的服务器验证可以从以下来源获取:

  • 文件系统 - 来自正在运行的 Envoy 代理的本地文件系统的证书。要向 Envoy 分发证书,您需要提供证书链的文件路径和 App Mesh 的私钥API。

  • E@@ nvoy's Secret Discovery Service (SDS) — 实施SDS并允许向 Envoy 发送证书的 Bring-your-own边车。它们包括SPIFFE运行时环境 (SPIRE)。

重要

App Mesh 不存储用于相互TLS身份验证的证书或私钥。相反,Envoy 会将它们存储在内存中。

配置网格端点

为您的网状端点(例如虚拟节点或网关)配置相互TLS身份验证。这些端点提供证书并指定可信机构。

为此,您需要为客户端和服务器配置 X.509 证书,并在TLS终止和启动的验证上下文中明确定义可信机构证书。TLS

网格内部的信任

服务器端证书在虚拟节点侦听器(TLS终止)中配置,客户端证书在虚拟节点服务后端(发起)中配置。TLS作为此配置的替代方案,您可以为虚拟节点的所有服务后端定义默认的客户端策略,然后,如果需要,可以根据需要为特定后端覆盖此策略。虚拟网关只能使用适用于其所有后端的默认客户端策略进行配置。

您可以通过为两个网格的虚拟网关上的入站流量启用相互TLS身份验证来配置不同网格之间的信任。

网格之外的信任

在虚拟网关侦听器中指定服务器端证书以进行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认证

你可以参考传输层安全:验证加密文档,了解 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身份验证演练