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

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

双向 TLS 身份证

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

客户端-服务器关系中的客户端还在会话协商过程中提供 X.509 证书。服务器使用此证书来识别客户端并对其进行身份验证。此过程有助于验证证书是否由受信任的证书颁发机构 (CA) 颁发,以及证书是否为有效证书。它还使用证书上的使用者备用名称 (SAN) 来识别客户端。

您可以为支持的所有协议启用双向 TLS 身份验证Amazon App Mesh. 它们是 TCP、HTTP/1.1、HTTP/2、gRPC。

注意

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

双向 TLS 身份验证书

Amazon App Mesh支持双向 TLS 身份验证的两个可能的证书来源 TLS 客户端策略中的客户端证书和监听器 TLS 配置中的服务器验证可以来自:

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

  • 特使的秘密发现服务(SDS)—带上自己的副车,可以实现 SDS 并允许将证书发送给 Envoy。它们包括 SPIFFE 运行时环境(SPIRE)。

重要

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

配置网格端节点

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

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

在网格内部信任

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

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

网格之外的信任

在虚拟网关监听器中为 TLS 终止指定服务器端证书。配置与虚拟网关通信的外部服务以提供客户端证书。这些证书应来自服务器端证书在虚拟网关侦听器上用于创建 TLS 的同一证书颁发机构 (CA) 之一。

将服务移至双向 TLS 身份验证

在将 App Mesh 中的现有服务迁移到双向 TLS 身份验证时,请遵循这些准则以保持连接。

迁移通过明文通信的服务

  1. 启用PERMISSIVE服务器端点上 TLS 配置的模式。此模式允许纯文本流量连接到终端节点。

  2. 在服务器上配置双向 TLS 身份验证,指定服务器证书、信任链以及可选的可信 SAN。

  3. 确认通信是通过 TLS 连接进行的。

  4. 在客户端上配置双向 TLS 身份验证,指定客户端证书、信任链以及可选的可信 SAN。

  5. 启用STRICT服务器上 TLS 配置的模式。

迁移通过 TLS 通信的服务

  1. 在客户端上配置双向 TLS 设置,指定客户端证书和可选的可信 SAN。在后端服务器请求之前,客户端证书才会发送到其后端。

  2. 在服务器上配置双向 TLS 设置,指定信任链和可选的可信 SAN。为此,您的服务器请求客户端证书。

验证双向 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) 与客户端信任的任何 SAN 都不匹配。

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

双 App Mesh LS 身份验证演练