为自管理 Fleet Server 配置 SSL/TLS

编辑

如果您正在运行自管理集群,请配置传输层安全性 (TLS) 以加密 Elastic Agent、Fleet Server 和 Elastic Stack 中其他组件之间的流量。

对于与双向 TLS 相反的单向 TLS 的安装设置,请参阅使用双向 TLS 的 Elastic Agent 部署模型

有关使用单向或双向 TLS 在组件之间建立 TLS 的流程摘要,请参阅单向和双向 TLS 证书流程

我们在 Elastic Cloud 上的托管 Elasticsearch 服务开箱即用地提供安全、加密的连接!

先决条件

编辑

为 Elastic Stack 配置安全性和生成证书。有关保护 Elastic Stack 的更多信息,请参阅为 Elastic Stack 配置安全性

Elastic Agent 需要 PEM 格式的 CA 证书才能将加密数据发送到 Elasticsearch。如果您按照为 Elastic Stack 配置安全性中的步骤操作,您的证书将位于 p12 文件中。要转换它,请使用 OpenSSL

openssl pkcs12 -in path.p12 -out cert.crt -clcerts -nokeys
openssl pkcs12 -in path.p12 -out private.key -nocerts -nodes

目前不支持密钥密码。

当您使用 Elastic Defend 集成运行 Elastic Agent 时,用于连接 Fleet Server 和 Elasticsearch 的TLS 证书需要使用 RSA 生成。有关配置 TLS 或 mTLS 时可用的算法的完整列表,请参阅为独立的 Elastic Agent 配置 SSL/TLS。这些设置可用于独立和 Fleet 管理的 Elastic Agent。

为 Fleet Server 生成自定义证书和私钥

编辑

本节介绍如何使用 Elasticsearch 提供的 certutil 工具,但您可以使用您通常用于生成 PEM 格式证书的任何过程。

  1. 生成证书颁发机构 (CA)。如果要使用现有 CA,请跳过此步骤。

    ./bin/elasticsearch-certutil ca --pem

    此命令创建一个 zip 文件,其中包含您将用于签署 Fleet Server 证书的 CA 证书和密钥。提取 zip 文件

    Screen capture of a folder called ca that contains two files: ca.crt and ca.key

    将文件存储在安全的位置。

  2. 使用证书颁发机构为 Fleet Server 生成证书。例如

    ./bin/elasticsearch-certutil cert \
      --name fleet-server \
      --ca-cert /path/to/ca/ca.crt \
      --ca-key /path/to/ca/ca.key \
      --dns your.host.name.here \
      --ip 192.0.2.1 \
      --pem

    其中 dnsip 指定 Fleet Server 的名称和 IP 地址。为您计划部署的每个 Fleet Server 运行此命令。

    此命令创建一个 zip 文件,其中包括一个 .crt.key 文件。提取 zip 文件

    Screen capture of a folder called fleet-server that contains two files: fleet-server.crt and fleet-server.key

    将文件存储在安全的位置。您稍后需要这些文件来加密 Elastic Agent 和 Fleet Server 之间的流量。

加密 Elastic Agent、Fleet Server 和 Elasticsearch 之间的流量

编辑

Fleet Server 需要 CA 证书或 CA 指纹才能安全地连接到 Elasticsearch。它还需要公开一个 Fleet Server 证书,以便其他 Elastic Agent 可以安全地连接到它。

对于本节中的步骤,请想象您具有以下文件

ca.crt

用于连接到 Fleet Server 的 CA 证书。这是用于为 Fleet Server 生成证书和密钥的 CA。

fleet-server.crt

您为 Fleet Server 生成的证书。

fleet-server.key

您为 Fleet Server 生成的私钥。

如果 fleet-server.key 文件使用密码加密,则需要通过文件指定密码。

elasticsearch-ca.crt

用于连接到 Elasticsearch 的 CA 证书。这是用于为 Elasticsearch 生成证书的 CA(请参阅先决条件)。

请注意,CA 证书的 SHA-256 指纹(哈希)可以用于代替 elasticsearch-ca.crt 文件来保护与 Elasticsearch 的连接。

要加密 Elastic Agent、Fleet Server 和 Elasticsearch 之间的流量

  1. 配置 Fleet 设置。这些设置将应用于所有 Fleet 管理的 Elastic Agent。
  2. 在 Kibana 中,打开主菜单,然后单击 管理 > Fleet > 设置

    1. Fleet Server 主机下,指定 Elastic Agent 将用于连接到 Fleet Server 的 URL。例如,https://192.0.2.1:8220,其中 192.0.2.1 是您将安装 Fleet Server 的主机 IP。

      对于主机设置,请使用 https 协议。也允许使用基于 DNS 的名称。

    2. 输出下,搜索默认输出,然后单击 操作列中的 编辑 图标。
    3. 主机字段中,指定 Elastic Agent 将向其发送数据的 Elasticsearch URL。例如,https://192.0.2.0:9200
    4. 指定 CA 证书或 CA 指纹以安全地连接到 Elasticsearch
  • 如果您具有来自根 CA 的有效 HEX 编码 SHA-256 CA 受信任指纹,请在 Elasticsearch CA 受信任指纹字段中指定它。要了解更多信息,请参阅Elasticsearch 安全文档
  • 否则,在 高级 YAML 配置下,设置 ssl.certificate_authorities 并指定用于连接到 Elasticsearch 的 CA 证书。您可以指定文件路径列表(如果文件可用),或直接将证书嵌入到 YAML 配置中。如果您指定文件路径,则证书必须在运行 Elastic Agent 的主机上可用。

    文件路径示例

    ssl.certificate_authorities: ["/path/to/your/elasticsearch-ca.crt"] 

    Elastic Agent 主机上 CA 证书的路径。

    粘贴的证书示例

    ssl:
      certificate_authorities:
      - |
        -----BEGIN CERTIFICATE-----
        MIIDSjCCAjKgAwIBAgIVAKlphSqJclcni3P83gVsirxzuDuwMA0GCSqGSIb3DQEB
        CwUAMDQxMjAwBgNVBAMTKUVsYXN0aWMgQ2VydGlmaWNhdGUgVG9vbCBBdXRvZ2Vu
        ZXJhdGVkIENBMB4XDTIxMDYxNzAxMzIyOVoXDTI0MDYxNjAxMzIyOVowNDEyMDAG
        A1UEAxMpRWxhc3RpYyBDZXJ0aWZpY2F0ZSBUb29sIEF1dG9nZW5lcmF0ZWQgQ0Ew
        ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDOFgtVri7Msy2iR33nLrVO
        /M/6IyF72kFXup1E67TzetI22avOxNlq+HZTpZoWGV1I4RgxiQeN12FLuxxhd9nm
        rxfZEqpuIjvo6fvU9ifC03WjXg1opgdEb6JqH93RHKw0PYimxhQfFcwrKxFseHUx
        DeUNQgHkMQhDZgIfNgr9H/1X6qSU4h4LemyobKY3HDKY6pGsuBzsF4iOCtIitE9p
        sagiWR21l1gW/lNaEW2ICKhJXbaqbE/pis45/yyPI4Q1Jd1VqZv744ejnZJnpAx9
        mYSE5RqssMeV6Wlmu1xWljOPeerOVIKUfHY38y8GZwk7TNYAMajratG2dj+v9eAV
        AgMBAAGjUzBRMB0GA1UdDgQWBBSCNCjkb66eVsIaa+AouwUsxU4b6zAfBgNVHSME
        GDAWgBSCNCjkb66eVsIaa+AouwUsxU4b6zAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
        SIb3DQEBCwUAA4IBAQBVSbRObxPwYFk0nqF+THQDG/JfpAP/R6g+tagFIBkATLTu
        zeZ6oJggWNSfgcBviTpXc6i1AT3V3iqzq9KZ5rfm9ckeJmjBd9gAcyqaeF/YpWEb
        ZAtbxfgPLI3jK+Sn8S9fI/4djEUl6F/kARpq5ljYHt9BKlBDyL2sHymQcrDC3pTZ
        hEOM4cDbyKHgt/rjcNhPRn/q8g3dDhBdzjlNzaCNH/kmqWpot9AwmhhfPTcf1VRc
        gxdg0CTQvQvuceEvIYYYVGh/cIsIhV2AyiNBzV5jJw5ztQoVyWvdqn3B1YpMP8oK
        +nadUcactH4gbsX+oXRULNC7Cdd9bp2G7sQc+aZm
        -----END CERTIFICATE-----
    1. 在主机上安装 Elastic Agent 作为 Fleet Server,并将其配置为使用 TLS

      1. 如果您还没有 Fleet Server 服务令牌,请单击 Fleet 中的 代理选项卡,并按照说明立即生成服务令牌。

        产品内的安装步骤不完整。在运行 install 命令之前,请添加下一步中显示的设置。

      2. 从您提取 Fleet Server 的目录中,运行 install 命令并指定要使用的证书。

        以下命令将 Elastic Agent 安装为服务,将其注册到 Fleet Server 策略中,并启动该服务。

        如果您使用的是 DEB 或 RPM,或者已经安装了 Elastic Agent,请使用 enroll 命令以及以下选项,然后按照启动 Elastic Agent中所述启动服务。

        sudo ./elastic-agent install \
           --url=https://192.0.2.1:8220 \
           --fleet-server-es=https://192.0.2.0:9200 \
           --fleet-server-service-token=AAEBAWVsYXm0aWMvZmxlZXQtc2XydmVyL3Rva2VuLTE2MjM4OTAztDU1OTQ6dllfVW1mYnFTVjJwTC2ZQ0EtVnVZQQ \
           --fleet-server-policy=fleet-server-policy \
           --fleet-server-es-ca=/path/to/elasticsearch-ca.crt \
           --certificate-authorities=/path/to/ca.crt \
           --fleet-server-cert=/path/to/fleet-server.crt \
           --fleet-server-cert-key=/path/to/fleet-server.key \
           --fleet-server-port=8220 \
           --elastic-agent-cert=/tmp/fleet-server.crt \
           --elastic-agent-cert-key=/tmp/fleet-server.key \
           --elastic-agent-cert-key-passphrase=/tmp/fleet-server/passphrase-file \
           --fleet-server-es-cert=/tmp/fleet-server.crt \
           --fleet-server-es-cert-key=/tmp/fleet-server.key \
           --fleet-server-client-auth=required

        其中

        url
        Fleet Server URL。
        fleet-server-es
        Elasticsearch URL
        fleet-server-service-token
        用于与 Elasticsearch 通信的服务令牌。
        fleet-server-policy
        Fleet Server 将使用的特定策略。
        fleet-server-es-ca
        当前 Fleet Server 用于连接到 Elasticsearch 的 CA 证书。
        certificate-authorities
        应信任其他 Elastic Agent 连接到此 Fleet Server 的 PEM 编码 CA 证书文件的路径列表
        fleet-server-cert
        PEM 编码证书(或证书链)的路径,该证书与 fleet-server-cert-key 相关联,用于向其他 Elastic Agent 公开此 Fleet Server HTTPS 端点
        fleet-server-cert-key
        用于向其他 Elastic Agent 公开此 Fleet Server HTTPS 端点的私钥
        elastic-agent-cert
        用作 Elastic Agent 连接到 Fleet Server 的客户端证书的证书。
        elastic-agent-cert-key
        用作 Elastic Agent 连接到 Fleet Server 的私钥的路径。
        elastic-agent-cert-key
        包含 Elastic Agent 将用于连接到 Fleet Server 的双向 TLS 私钥的密码的文件路径。该文件必须仅包含密码字符,没有换行符或额外的非打印字符。仅当 elastic-agent-cert-key 已加密且需要密码才能使用时,才使用此选项。
        fleet-server-es-cert
        Fleet Server 在连接到 Elasticsearch 时将使用的客户端证书的路径。
        fleet-server-es-cert-key
        Fleet Server 在连接到 Elasticsearch 时将使用的私钥的路径。
        fleet-server-client-auth
        可以是 noneoptionalrequired 之一。默认为 none。Fleet Server 的 client_authentication 选项用于客户端 mTLS 连接。如果指定了 optionalrequired,则会使用 --certificate-authorities 标志中指定的 CA 来验证客户端证书。

        请注意,此外,可以使用以下方式为私钥指定可选密码

        fleet-server-cert-key-passphrase
        用于解密 Fleet Server 私钥的密码文件。
    2. 安装你的 Elastic Agent 并将其注册到 Fleet 中。

      连接到安全 Fleet Server 的 Elastic Agent 需要传入 Fleet Server 使用的 CA 证书。 Elasticsearch 使用的 CA 证书已经在代理策略中指定,因为它在 Kibana 的 Fleet 设置下设置。你不需要在命令行上传递它。

      以下命令将 Elastic Agent 作为服务安装,将其注册到与指定令牌关联的代理策略中,并启动该服务。

      sudo elastic-agent install --url=https://192.0.2.1:8220 \
        --enrollment-token=<string> \
        --certificate-authorities=/path/to/ca.crt

      其中

      url
      用于将 Elastic Agent 注册到 Fleet 的 Fleet Server URL。
      注册令牌
      将应用于 Elastic Agent 的策略的注册令牌。
      certificate-authorities
      用于连接到 Fleet Server 的 CA 证书。这是用于为 Fleet Server 生成证书和密钥 的 CA。

      没有注册令牌?在 Fleet 中的 代理 选项卡上,单击 添加代理。在 注册并启动 Elastic Agent 下,按照产品内的安装步骤操作,确保在运行命令之前添加 --certificate-authorities 选项。