为自管 Fleet Server 配置 SSL/TLS编辑

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

我们在 Elastic Cloud 上的托管 Elasticsearch Service 默认提供安全、加密的连接!

先决条件编辑

为 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

当前不支持密钥密码。

为 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 运行此命令。

    此命令创建一个包含 .crt.key 文件的 zip 文件。解压 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 的有效十六进制编码 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 \
           --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
        PEM 编码的 CA 证书文件路径列表,其他 Elastic Agent 应信任这些文件才能连接到此 Fleet Server
        fleet-server-cert
        与 fleet-server-cert-key 关联的 PEM 编码证书(或证书链)的路径,用于将此 Fleet Server HTTPS 端点公开给其他 Elastic Agent
        fleet-server-cert-key
        用于将此 Fleet Server HTTPS 端点公开给其他 Elastic Agent 的私钥
        elastic-agent-cert
        要用作 Elastic Agent 与 Fleet Server 连接的客户端证书的证书。
        elastic-agent-cert-key
        要用作 Elastic Agent 与 Fleet Server 连接的私钥的路径。
        fleet-server-es-cert
        Fleet Server 连接到 Elasticsearch 时将使用的客户端证书的路径。
        fleet-server-es-cert-key
        Fleet Server 连接到 Elasticsearch 时将使用的私钥的路径。
        fleet-server-client-auth
        noneoptionalrequired 之一。默认为 none。Fleet Server 用于客户端 mTLS 连接的 client_authentication 选项。如果指定了 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。
      enrollment-token
      将应用于 Elastic Agent 的策略的注册令牌。
      certificate-authorities
      用于连接到 Fleet Server 的 CA 证书。这是用于为 Fleet Server 生成证书和密钥的 CA。

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