使用双向 TLS 的 Elastic Agent 部署模型
编辑使用双向 TLS 的 Elastic Agent 部署模型
编辑双向传输层安全性 (mTLS) 比单向 TLS 提供更高水平的安全性和信任,在单向 TLS 中,只有服务器出示证书。它不仅确保服务器是它声称的身份,而且还验证客户端的身份。这在双方都需要建立信任并验证彼此身份的场景中尤其有价值,例如在安全的 API 通信、Web 服务或远程身份验证中。
有关使用单向或双向 TLS 在组件之间建立 TLS 的流程摘要,请参阅单向和双向 TLS 证书流。
概述
编辑使用双向 TLS,会发生以下身份验证和证书验证
- 客户端身份验证:客户端在 TLS 握手期间向服务器出示其数字证书。此证书由受信任的证书颁发机构 (CA) 颁发,并包含客户端的公钥。
- 服务器身份验证:服务器还会向客户端出示其数字证书,证明其身份并共享其公钥。服务器的证书也由受信任的 CA 颁发。
- 证书验证:客户端和服务器都会通过对照 CA 的公钥检查数字签名来验证彼此的证书(请注意,客户端和服务器不必使用同一个 CA)。
Fleet 管理的 Elastic Agent 有两个主要连接以确保正确操作
- 与 Fleet Server 的连接(控制平面,用于签入、下载策略以及类似操作)。
- 与输出的连接(数据平面,例如 Elasticsearch 或 Logstash)。
为了引导,Elastic Agent 最初必须与 Fleet Server 建立安全连接,Fleet Server 可以位于本地或 Elastic Cloud 中。此连接验证过程可确保代理的真实性。验证后,代理会收到策略配置。此策略下载使代理能够了解它需要与之交互的其他组件。例如,它可以深入了解它应该将数据写入到的输出目标。
当需要 mTLS 时,Elastic Agent、Fleet 和 Fleet Server 之间的安全设置通过以下步骤进行配置
- 启用 mTLS。
- 使用通过
elastic-agent install
或elastic-agent enroll
命令传递的参数在 Elastic Agent 注册时配置 Elastic Agent 和 Fleet Server 之间的初始 mTLS 连接。 -
注册完成后,Elastic Agent 会从 Fleet Server 下载初始 Elastic Agent 策略。
- 如果 Elastic Agent 策略包含 mTLS 配置设置,这些设置将优先于注册期间使用的设置:这包括用于 Elastic Agent 和 Fleet Server(以及 Kibana 中的 Fleet 应用程序,对于 Fleet 管理的 Elastic Agent)之间连接的 mTLS 设置,以及用于 Elastic Agent 和其指定输出之间连接的设置。
- 如果 Elastic Agent 策略不包含任何 TLS、mTLS 或代理配置设置,这些设置将保持与 Elastic Agent 注册时指定的设置相同。请注意,初始 TLS、mTLS 或代理配置设置不能通过 Elastic Agent 策略删除;它们只能更新。
当您使用 Elastic Defend 集成运行 Elastic Agent 时,用于连接到 Fleet Server 和 Elasticsearch 的 TLS 证书需要使用 RSA 生成。有关配置 TLS 或 mTLS 时可用的完整算法列表,请参阅为独立 Elastic Agent 配置 SSL/TLS。这些设置适用于独立和 Fleet 管理的 Elastic Agent。
本地部署
编辑
请参阅为自管理 Fleet Server 配置 SSL/TLS中的步骤。要配置双向 TLS,请在安装 Elastic Agent 和 Fleet Server 时包括以下附加参数。
Elastic Agent 设置
编辑在本地安装 Elastic Agent 期间,请使用以下选项
|
当 Fleet Server 连接到 Elastic Agent 时受信任的 CA 证书列表 |
|
在身份验证期间向 Fleet Server 出示的 Elastic Agent 证书 |
|
要向 Fleet Server 出示的 Elastic Agent 证书密钥 |
|
包含双向 TLS 私钥的密码的文件路径,Elastic Agent 将使用该私钥连接到 Fleet Server |
Fleet Server 设置
编辑在本地安装 Fleet Server 期间,Fleet Server 使用 Elasticsearch 和 Elastic Agent 进行身份验证。您可以使用以下 CLI 选项来促进这些安全连接
|
用于 Elasticsearch 连接的 CA |
|
要向 Elasticsearch 出示的 Fleet Server 证书 |
|
要向 Elasticsearch 出示的 Fleet Server 证书密钥 |
|
当 Elastic Agent 连接到 Fleet Server 以及当 Fleet Server 验证 Elastic Agent 身份时受信任的 CA 证书列表。 |
|
在身份验证期间向 Elastic Agent 出示的 Fleet Server 证书 |
|
用于解密证书的 Fleet Server 私有证书密钥 |
Fleet 设置
编辑在 Kibana 中,导航到“Fleet”,打开“设置”选项卡,然后选择您要配置的“输出”。在“高级 YAML 配置”中,添加以下设置
|
当 Fleet Server 连接到 Elastic Agent 时受信任的 CA 证书列表 |
|
此证书将传递给策略中配置了此输出的所有代理。当代理与输出建立 mTLS 时,将使用此证书。 您可以应用完整证书,在这种情况下,所有代理都获得相同的证书,或者,如果证书对于每个代理是唯一的,则可以指向代理上证书所在的本地目录。 |
|
此证书密钥将传递给策略中配置了此输出的所有代理。证书密钥用于解密 SSL 证书。 |
指定这些 SSL 设置时,请注意以下事项
- 证书颁发机构、证书和证书密钥需要指定为本地文件的路径。您不能指定目录。
- 您可以定义多个 CA 或 CA 路径。
- 只能定义一个证书和一个证书密钥。
在“高级 YAML 配置”中,应按以下格式添加这些设置
ssl.certificate_authorities: - /path/to/ca ssl.certificate: /path/to/cert ssl.key: /path/to/cert_key
或
ssl.certificate_authorities: - /path/to/ca ssl.certificate: /path/to/cert ssl.key: /path/to/cert_key

Elastic Cloud 上的 Fleet Server
编辑在此部署模型中,所有进入 Elastic Cloud 的流量的 TLS 连接都在 Elastic Cloud 边界处终止。由于此终止不是按每个租户处理的,因此此时不能使用客户端特定的证书。

我们目前在此部署模型中不支持 mTLS。下面显示了另一种部署模型,您可以在其中部署自己的安全代理,在该代理中终止 TLS 连接。
使用代理的 Elastic Cloud 上的 Fleet Server
编辑在这种情况下,当您可以访问代理时,您可以在代理和代理之间配置 mTLS。

Elastic Agent 设置
编辑在本地安装 Elastic Agent 期间,请使用以下选项
|
当 Elastic Agent 连接到 Fleet Server 或 Elastic Agent 和 Fleet Server 之间的代理时,受信任的 CA 证书列表 |
|
在向 Fleet Server 或 Elastic Agent 和 Fleet Server 之间的代理进行身份验证期间出示的 Elastic Agent 证书 |
|
用于解密证书的 Elastic Agent 私有证书密钥 |
|
包含双向 TLS 私钥的密码的文件路径,Elastic Agent 将使用该私钥连接到 Fleet Server |
本地 Fleet Server 和托管 Elasticsearch 服务
编辑在某些情况下,您可能希望在自己的场所部署 Fleet Server。在这种情况下,您可以提供自己的证书和证书颁发机构,以启用 Fleet Server 和 Elastic Agent 之间的 mTLS。
但是,与Elastic Cloud 上的 Fleet Server用例一样,数据平面 TLS 连接在 Elastic Cloud 边界处终止。Elastic Cloud 不是多租户服务,因此无法提供每个用户的证书。

与 Elastic Cloud 上的 Fleet Server 用例类似,可以在这样的环境中放置一个安全代理,以终止 TLS 连接并满足 mTLS 要求。

Elastic Agent 设置
编辑在本地安装 Elastic Agent 期间,请使用以下选项,类似于在本地部署 Elastic Agent
|
当 Elastic Agent 连接到 Fleet Server 时受信任的 CA 证书列表 |
|
在身份验证期间向 Fleet Server 出示的 Elastic Agent 证书 |
|
用于解密证书的 Elastic Agent 私有证书密钥 |
|
包含双向 TLS 私钥的密码的文件路径,Elastic Agent 将使用该私钥连接到 Fleet Server |
Fleet Server 设置
编辑在本地安装 Fleet Server 期间,请使用以下选项,以便 Fleet Server 可以向代理进行身份验证,然后还可以向安全代理服务器进行身份验证
|
通过安全代理用于 Elasticsearch 连接的 CA。此 CA 用于验证来自安全代理的 TLS 连接 |
|
当 Elastic Agent 连接到 Fleet Server 时受信任的 CA 证书列表 |
|
在身份验证期间向 Elastic Agent 出示的 Fleet Server 证书 |
|
用于解密证书的 Fleet Server 私有证书密钥 |
Fleet 设置
编辑这与本地部署中所述的相同。主要区别在于,您需要使用安全代理接受的证书,因为 mTLS 是在代理和安全代理之间设置的。