为自管理 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 的有效的十六进制编码的 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 关联,用于将此 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 的私钥的路径。
        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 选项。