本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
传输层安全 (TLS)
重要
终止支持通知:2026 年 9 月 30 日, AWS 将停止对的支持。 AWS App Mesh 2026 年 9 月 30 日之后,您将无法再访问 AWS App Mesh 控制台或 AWS App Mesh 资源。如需了解更多信息,请访问此博客文章从迁移 AWS App Mesh 到 Amazon S ECS ervice Connect
在 App Mesh 中,传输层安全 (TLS) 加密部署在计算资源上的 Envoy 代理之间的通信,这些资源在 App Mesh 中由网格端点表示,例如虚拟节点和。虚拟网关代理人协商并终止TLS。当代理与应用程序一起部署时,您的应用程序代码不负责协商会TLS话。代理人代表您的申请TLS进行协商。
App Mesh 允许您通过以下方式向代理提供TLS证书:
-
来自 AWS Certificate Manager (ACM) 的私有证书,由 AWS Private Certificate Authority (AWS Private CA) 颁发。
-
存储在虚拟节点本地文件系统中的证书,由您自己的证书颁发机构 (CA) 颁发
-
由机密发现服务 (SDS) 端点通过本地 Unix 域套接字提供的证书。
Envoy Proxy 授权 必须为由网格端点表示的已部署的 Envoy 代理启用。我们建议您在启用代理授权时,将访问限制为仅访问您启用加密的网状端点。
证书要求
证书上的主题备用名称 (SANs) 之一必须符合特定标准,具体取决于网格端点所代表的实际服务的发现方式。
-
DNS— 其中一个证书SANs必须与DNS服务发现设置中提供的值相匹配。对于具有服务发现名称的应用程序
,您可以创建与该名称匹配的证书,也可以创建带有通配符的证书mesh-endpoint.apps.local
*.
。apps.local
-
AWS Cloud Map— 其中一个证书SANs必须与使用格式的 AWS Cloud Map 服务发现设置中提供的值相匹配
。对于 AWS Cloud Map 服务发现设置为serviceNameservice-name.namespace-name
和的应用程序 namespaceNamemesh-endpoint
,您可以创建与名称匹配的证书apps.local
,或者使用通配符创建证书mesh-endpoint.apps.local
*.
apps.local
.
对于这两种发现机制,如果没有一个证书SANs与DNS服务发现设置匹配,则 Envoy 之间的连接将失败,并显示以下错误消息,如客户端 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的私有用户必须是 root 用户CAs。
要使用证书和CAs来自配置虚拟节点 AWS Private CA,用于调用 App Mesh 的主体(例如用户或角色)必须具有以下IAM权限:
-
对于添加到监听器TLS配置中的任何证书,委托人必须具有
acm:DescribeCertificate
权限。 -
对于在TLS客户端策略上CAs配置的任何内容,委托人必须具有
acm-pca:DescribeCertificateAuthority
权限。
重要
CAs与其他账户共享可能会将这些账户授予 CA 意想不到的权限。我们建议使用基于资源的策略来限制访问无需从 CA 颁发证书的账户的
acm-pca:DescribeCertificateAuthority
和acm-pca:GetCertificateAuthorityCertificate
。您可以将这些权限添加到附加到委托人的现有IAM策略中,也可以创建新的委托人和策略并将该策略附加到委托人。有关更多信息,请参阅编辑IAM策略、创建IAM策略和添加IAM身份权限。
注意
在将其删除 AWS Private CA 之前,您需要为每个操作支付月费。您还需要为每月颁发的私有证书和导出的私有证书付费。有关更多信息,请参阅 AWS Certificate Manager 定价
。 当您为网格端点所代表的 Envoy 代理启用代理授权时,必须为您使用的IAM角色分配以下IAM权限:
-
对于在虚拟节点的侦听器上配置的任何证书,该角色必须具有
acm:ExportCertificate
权限。 -
对于在TLS客户端策略上CAs配置的任何角色,该角色都必须具有
acm-pca:GetCertificateAuthorityCertificate
权限。
-
- 文件系统
-
您可以使用文件系统向 Envoy 分发证书。您可以通过在文件路径上提供证书链和相应的私钥来实现此目的。这样,就可以通过 Envoy sidecar 代理访问这些资源。
- 特使的秘密发现局 (SDS)
-
Envoy 通过密钥发现协议从特定端点获取诸如TLS证书之类的机密。有关此协议的更多信息,请参阅 Envoy 的SDS文档
。 当用作证书和证书链的来源时,App Mesh 将 Envoy 代理配置为使用代理本地的 Unix 域套接字SDS作为秘密发现服务 (SDS) 端点。您可以使用
APPMESH_SDS_SOCKET_PATH
环境变量配置此端点的路径。重要
App Mesh Envoy 代理版本 1.15.1.0 及更高版本支持使用 Unix 域套接字的本地密钥发现服务。
App Mesh 支持使用 g RPC 的 V2 SDS 协议。
- 与SPIFFE运行时环境集成 (SPIRE)
-
您可以使用的任何 sidecar 实现 SDSAPI,包括SPIFFE运行时环境 () SPIRE
等现有工具链。SPIRE旨在支持在分布式系统中的多个工作负载之间部署相互TLS身份验证。它在运行时证明了运行时系统的身份。SPIRE还为工作负载提供特定于工作负载的、短期的、自动轮换的密钥和证书。 您应该将SPIRE代理配置为 Envoy 的SDS提供者。允许它直接向 Envoy 提供提供相互TLS身份验证所需的密钥材料。在 Envoy SPIRE 代理旁边的边车中运行特工。代理负责根据需要重新生成短期密钥和证书。代理会证明 Envoy,并确定在 Envoy 连接到SPIRE代理暴露的SDS服务器时应向 Envoy 提供哪些服务身份和 CA 证书。
在此过程中,将轮换服务身份和 CA 证书,并将更新流式传输回 Envoy。Envoy 会立即将它们应用于新连接,不会出现任何中断或停机,也不会让私钥接触文件系统。
App Mesh 如何配置特使进行谈判 TLS
在确定如何配置网格中 Envoy 之间的通信时,App Mesh 使用客户端和服务器的网格端点配置。
- 使用客户端策略
-
当客户端策略强制使用时TLS,如果客户端策略中的一个端口与服务器策略的端口相匹配,则该客户端策略用于配置客户端的TLS验证上下文。例如,如果虚拟网关的客户端策略与虚拟节点的服务器策略相匹配,则将尝试使用虚拟网关的客户端策略中定义的设置在代理之间进行TLS协商。如果客户端策略与服务器策略的端口不匹配,则代理TLS之间可能会协商,也可能不协商,具体取决于服务器策略的TLS设置。
- 没有客户端策略
-
如果客户端尚未配置客户端策略,或者客户端策略与服务器的端口不匹配,App Mesh 将使用服务器来确定是否与客户端进行协商TLS,以及如何进行协商。例如,如果虚拟网关未指定客户端策略,并且虚拟节点未配置TLS终止,则代理之间TLS将不会进行协商。如果客户端未指定匹配的客户端策略,并且服务器已配置为TLS模式
STRICT
或PERMISSIVE
,则代理将被配置为协商TLS。根据为TLS终止提供证书的方式,将适用以下其他行为。-
ACM-托管TLS证书 — 当服务器使用托ACM管证书配置TLS终止时,App Mesh 会自动配置客户端,使其TLS与证书链接到的根用户 CA 协商和验证证书。
-
基于文件的TLS证书 — 当服务器使用来自代理本地文件系统的证书配置TLS终止时,App Mesh 会自动配置客户端进行协商TLS,但服务器的证书未经过验证。
-
- 主题备用名称
-
您可以选择指定要信任的主题备用名称 (SANs) 列表。SANs必须采用FQDN或URI格式。如果提供SANs,Envoy 将验证所提供证书的主题备用名称是否与此列表中的一个名称匹配。
如果您未在终止网格端点SANs上指定,则该节点的 Envoy 代理不会在对等客户端证书SAN上进行验证。如果您未在原始网格端点SANs上指定,则终止端点提供的证书SAN上的必须与网状端点服务发现配置相匹配。
有关更多信息,请参阅 App Mesh TLS:证书要求。
重要
只有在的客户端策略设置为TLS时,SANs才能使用通配符。
not enforced
如果将客户端虚拟节点或虚拟网关的客户端策略配置为强制执行TLS,则它不能接受通配符SAN。
验证加密
启用后TLS,您可以查询 Envoy 代理以确认通信已加密。Envoy 代理会发出有关资源的统计信息,可以帮助您了解您的TLS通信是否正常运行。例如,Envoy 代理记录其为指定网格端点协商的成功TLS握手次数的统计信息。使用以下命令确定命名的网格端点成功TLS握
手次数。my-mesh-endpoint
curl -s 'http://
my-mesh-endpoint.apps.local
:9901/stats' | grep ssl.handshake
在以下示例返回的输出中,网格端点进行了三次握手,因此通信已加密。
listener.0.0.0.0_15000.ssl.handshake: 3
当TLS协商失败时,Envoy 代理还会发出统计信息。确定网格端点是否存在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 统计信息的更多信息,请参阅 E nvoy 监听器统计信息
证书续订
AWS Private CA
当您使用续订证书时ACM,续订的证书将在续订完成后的 35 分钟内自动分发给您连接的代理。我们建议使用托管续订来自动续订即将到期的证书。有关更多信息,请参阅《 AWS Certificate Manager 用户指南》中的 “亚马逊颁发ACM的证书” 的托管续订。
您自己的证书
使用来自本地文件系统的证书时,Envoy 不会在证书更改时自动重新加载证书。您可以重新启动或重新部署 Envoy 进程来加载新证书。您还可以将较新的证书放在不同的文件路径中,并使用该文件路径更新虚拟节点或网关配置。
将 Amazon ECS 工作负载配置为使用TLS身份验证 AWS App Mesh
您可以将网格配置为使用TLS身份验证。确保证书可供您添加到工作负载中的 Envoy 代理 sidecar 使用。你可以将EBS或EFS卷附加到你的 Envoy 边车,也可以从 Secr AWS ets Manager 存储和检索证书。
-
如果您使用基于文件的证书分发,请将EBS或EFS卷附加到您的 Envoy sidecar。确保证书和私钥的路径与中配置的路径相匹配 AWS App Mesh。
-
如果你使用的是SDS基于基础的分发,请添加一个实现可访问证书的 Envoy 的 SDS API sidecar。
注意
SPIRE在 Amazon 上不支持ECS。
将 Kubernetes 工作负载配置为使用身份验证 TLS AWS App Mesh
您可以为 Kubernetes 配置 AWS App Mesh 控制器,以启用虚拟节点和虚拟网关服务后端和侦听器的TLS身份验证。确保证书可供您添加到工作负载中的 Envoy 代理 sidecar 使用。您可以在相互TLS身份验证的演练部分中查看每种分发类型的示例。
-
如果您使用基于文件的证书分发,请将EBS或EFS卷附加到您的 Envoy sidecar。确保证书和私钥的路径与控制器中配置的路径相匹配。或者,您可以使用挂载在文件系统上的 Kubernetes 密钥。
-
如果你使用的是SDS基于基础的分发,你应该设置一个实现 Envoy 的本地节点SDS提供者SDSAPI。Envoy 会过来的UDS。要在EKS AppMesh 控制器中启用SDS基于 m 的TLS支持,请将该
enable-sds
标志设置为,true
并通过该sds-uds-path
标志SDS提供本地提供商到控制器的UDS路径。如果您使用 helm,则可以在控制器安装过程中设置以下内容:--set sds.enabled=true
注意
如果您在 Fargate 模式下使用SPIRE亚马逊 Elastic Kubernetes Service(亚马逊),则无法使用来分发证书。EKS