教程 2:保护自管理 Elastic Stack

编辑

教程 2:保护自管理 Elastic Stack

编辑

本教程是 教程 1:安装自管理 Elastic Stack 的后续内容。第一个教程描述了如何配置多节点 Elasticsearch 集群,然后设置 Kibana,接着设置 Fleet Server 和 Elastic Agent。在生产环境中,建议完成 Kibana 设置后直接进行本教程,配置您的 SSL 证书。这些步骤将引导您完成该过程,然后介绍如何使用已配置的证书配置 Fleet Server 和 Elastic Agent。

保护 Elastic Stack

从 Elastic 8.0 开始,默认情况下在 Elastic Stack 中启用安全性,这意味着 Elasticsearch 节点之间以及 Kibana 和 Elasticsearch 之间的流量都经过 SSL 加密。虽然这适用于测试 Elastic 平台的非生产可行性,但大多数生产网络都要求使用受信任的 CA 签名证书。以下步骤演示如何使用您自己的受信任 CA 签名证书更新开箱即用的自签名证书。

为了在 Elasticsearch 集群节点之间以及 Kibana 和 Elasticsearch 之间加密流量,必须为传输(Elasticsearch 节点间通信)和 HTTP(用于 Elasticsearch REST API)层创建 SSL 证书。同样,在设置 Fleet Server 时,您将生成并配置新的证书捆绑包,然后 Elastic Agent 使用生成的证书与 Fleet Server 和 Elasticsearch 通信。设置过程如下:

完成这些步骤应该需要一到两个小时。

先决条件和假设

编辑

在开始之前,您需要按照 教程 1:安装自管理 Elastic Stack 中的步骤,设置带有 Kibana 的本地 Elasticsearch 集群。

本指南中的示例使用 RPM 包在运行 Red Hat Enterprise Linux 8 的主机上安装 Elastic Stack 组件。其他安装方法和操作系统的步骤类似,可以在每个部分链接的文档中找到。

此处不涵盖防火墙和代理服务器等特殊注意事项。

步骤 1:生成新的自签名 CA 证书

编辑

在生产环境中,您通常会使用您自己组织的 CA 证书,以及为安装 Elastic Stack 的主机生成的证书文件。为了演示目的,我们将使用 Elastic 证书实用程序来配置自签名 CA 证书。

  1. 在 Elasticsearch 集群中的第一个节点上,停止 Elasticsearch 服务

    sudo systemctl stop elasticsearch.service
  2. 使用提供的证书实用程序 elasticsearch-certutil 生成 CA 证书。请注意,该实用程序的位置取决于您用于安装 Elasticsearch 的安装方法。有关命令详细信息,请参阅 elasticsearch-certutil,有关整个过程的详细信息,请参阅 使用不同的 CA 更新安全证书

    运行以下命令。出现提示时,为输出文件指定一个唯一的名称,例如 elastic-stack-ca.zip

    sudo /usr/share/elasticsearch/bin/elasticsearch-certutil ca -pem
  3. 将输出文件移动到 /etc/elasticsearch/certs 目录。当您安装 Elasticsearch 时,会自动创建此目录。

    sudo mv /usr/share/elasticsearch/elastic-stack-ca.zip /etc/elasticsearch/certs/
  4. 解压该文件

    sudo unzip -d /etc/elasticsearch/certs /etc/elasticsearch/certs/elastic-stack-ca.zip
  5. 查看解压到新 ca 目录中的文件

    sudo ls /etc/elasticsearch/certs/ca/
    ca.crt
    生成的证书(或者您可以使用您自己组织的证书颁发机构签名的证书来代替)
    ca.key
    证书颁发机构的私钥

    生成新的自签名 CA 证书的这些步骤只需要在第一个 Elasticsearch 节点上完成。其他 Elasticsearch 节点将使用相同的 ca.crtca.key 文件。

  6. /etc/elasticsearch/certs/ca/ 目录中,将新创建的 CA 证书导入到 Elasticsearch 信任库中。此步骤确保您的集群信任新的 CA 证书。

    在新安装上,会自动创建新的密钥库和信任库。如果您在现有的 Elasticsearch 安装上运行这些步骤,并且知道密钥库和信任库的密码,请按照 使用不同的 CA 更新安全证书 中的说明导入 CA 证书。

    按所示运行 keytool 命令,将 <password> 替换为信任库的唯一密码,并安全地存储该密码

    sudo /usr/share/elasticsearch/jdk/bin/keytool -importcert -trustcacerts -noprompt -keystore /etc/elasticsearch/certs/elastic-stack-ca.p12 -storepass <password> -alias new-ca -file /etc/elasticsearch/certs/ca/ca.crt
  7. 确保新密钥已添加到密钥库中

    keytool -keystore elastic-stack-ca.p12 -list

    keytool 实用程序作为 Elasticsearch 安装的一部分提供,位于 RPM 安装的 /usr/share/elasticsearch/jdk/bin/keytool

    出现提示时,输入您的密码。结果应显示您新添加的密钥的详细信息

    Keystore type: jks
    Keystore provider: SUN
    Your keystore contains 1 entry
    new-ca, Jul 12, 2023, trustedCertEntry,
    Certificate fingerprint (SHA-256): F0:86:6B:57:FC...

步骤 2:为传输层生成新的证书

编辑

本指南假设使用自签名证书,但导入 CA 签名证书的过程是相同的。如果您使用的是组织提供的 CA,则需要生成证书签名请求 (CSR),然后在此步骤中使用签名证书。生成证书后(无论是自签名还是 CA 签名),步骤都是相同的。

  1. 从 Elasticsearch 安装目录中,使用新创建的 CA 证书和私钥,为您的 elasticsearch 节点创建新证书

    sudo /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca-cert /etc/elasticsearch/certs/ca/ca.crt --ca-key /etc/elasticsearch/certs/ca/ca.key

    出现提示时,选择一个输出文件名(您可以使用默认的 elastic-certificates.p12)和证书的密码。

  2. 将生成的文件移动到 /etc/elasticsearch/certs 目录

    sudo mv /usr/share/elasticsearch/elastic-certificates.p12 /etc/elasticsearch/certs/

    如果您在已经包含数据的生产集群上运行这些步骤

    • 在具有多个 Elasticsearch 节点的集群中,在继续之前,您首先需要执行一个 滚动重启,从您正在更新密钥库的节点开始。在 执行任何需要的更改 步骤停止,然后继续本指南中的下一步。
    • 在单节点集群中,始终在继续之前停止 Elasticsearch。
  3. 由于您已经创建了新的信任库和密钥库,因此需要使用新的信任库和密钥库文件名更新 /etc/elasticsearch/elasticsearch.yml 设置文件。

    在文本编辑器中打开 Elasticsearch 配置文件,并调整以下值以反映新创建的密钥库和信任库文件名和路径

    xpack.security.transport.ssl:
       ...
       keystore.path: /etc/elasticsearch/certs/elastic-certificates.p12
       truststore.path: /etc/elasticsearch/certs/elastic-stack-ca.p12

更新 Elasticsearch 密钥库

编辑

Elasticsearch 使用单独的密钥库来保存在之前步骤中创建的保存 CA 和节点证书的密钥库和信任库的密码。通过使用名为 elasticsearch-keystore 的实用程序来访问此密钥库。

  1. 从 Elasticsearch 安装目录中,列出现有密钥库的内容

    sudo /usr/share/elasticsearch/bin/elasticsearch-keystore list

    结果应如下所示

    keystore.seed
    xpack.security.http.ssl.keystore.secure_password
    xpack.security.transport.ssl.keystore.secure_password
    xpack.security.transport.ssl.truststore.secure_password

    请注意,有以下条目:

    • 保存 CA 证书的 transport.ssl.truststore
    • 保存 CA 签名证书的 transport.ssl.keystore
    • 用于 HTTP 层的 http.ssl.keystore

      这些条目是在安装时创建的,需要替换为新创建的信任库和密钥库的密码。

  2. 删除默认传输密钥库和信任库的现有密钥库值

    sudo /usr/share/elasticsearch/bin/elasticsearch-keystore remove xpack.security.transport.ssl.keystore.secure_password
    
    sudo /usr/share/elasticsearch/bin/elasticsearch-keystore remove xpack.security.transport.ssl.truststore.secure_password
  3. 使用在之前步骤中创建的新密钥库和信任库的密码更新 elasticsearch-keystore。这确保了 Elasticsearch 可以读取新的存储

    sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
    
    sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

步骤 3:为 HTTP 层生成新的证书

编辑

现在,Elasticsearch 节点之间的通信(传输层)已使用 SSL 证书进行了保护,对于使用 REST API 的通信(包括 Kibana、客户端和 HTTP 层上的任何其他组件)也必须这样做。

  1. 与传输层的过程类似,在 Elasticsearch 集群中的第一个节点上,使用证书实用程序生成用于 HTTP 通信的 CA 证书

    sudo /usr/share/elasticsearch/bin/elasticsearch-certutil http

    按如下方式响应命令提示

    • 当被问到是否要生成 CSR 时,输入 n
    • 当被问到是否要使用现有 CA 时,输入 y

      如果您使用您组织的 CA 证书,请在以下两个步骤中指定该证书和密钥。

    • 提供新创建的 CA 证书的绝对路径:/etc/elasticsearch/certs/ca/ca.crt
    • 提供新创建的 CA 密钥的绝对路径:/etc/elasticsearch/certs/ca/ca.key
    • 输入证书的过期值。您可以输入以年、月或天为单位的有效期。例如,输入 1y 表示一年。
    • 当被问到是否要为每个节点生成一个证书时,输入 y

      将引导您完成每个节点的证书创建。每个证书都将有自己的私钥,并且将为特定的主机名或 IP 地址颁发。

      1. 输入您的第一个 Elasticsearch 节点的主机名,例如 mynode-es1

        mynode-es1
      2. 出现提示时,确认设置正确。
      3. 添加客户端可用于连接到第一个 Elasticsearch 节点的网络 IP 地址。这与 教程 1:安装自管理 Elastic Stack 的步骤 2 中描述的值相同,例如 10.128.0.84

        10.128.0.84
      4. 出现提示时,确认设置正确。
      5. 出现提示时,选择生成其他证书,然后重复之前的步骤,为 Elasticsearch 集群中的每个节点添加主机名和 IP 设置。
      6. 为生成的 http.p12 密钥库文件提供密码。
      7. 生成的文件将包含在 zip 存档中。在提示符下,提供应创建存档的路径和文件名。

        在此示例中,我们使用:/etc/elasticsearch/certs/elasticsearch-ssl-http.zip

        What filename should be used for the output zip file? [/usr/share/elasticsearch/elasticsearch-ssl-http.zip] /etc/elasticsearch/certs/elasticsearch-ssl-http.zip
  2. 之前,当您为传输层生成证书时,默认文件名为 elastic-certificates.p12。现在,当为 HTTP 层生成证书时,默认文件名为 http.p12。这与最初安装 Elasticsearch 集群时存在的 HTTP 层证书文件的名称匹配。

    为了避免任何可能的名称冲突,请重命名现有的 http.p12 文件,以便将其与新创建的密钥库区分开。

    sudo mv /etc/elasticsearch/certs/http.p12 /etc/elasticsearch/certs/http-old.p12
  3. 解压缩生成的 elasticsearch-ssl-http.zip 压缩包。

    sudo unzip -d /usr/share/elasticsearch/ /etc/elasticsearch/certs/elasticsearch-ssl-http.zip
  4. 当压缩包解压后,证书文件将位于每个 Elasticsearch 节点和 Kibana 节点的单独目录中。

    您可以运行递归的 ls 命令来查看文件结构。

    ls -lR /usr/share/elasticsearch/{elasticsearch,kibana}
    elasticsearch:
    total 0
    drwxr-xr-x. 2 root root 56 Dec 12 19:13 mynode-es1
    drwxr-xr-x. 2 root root 72 Dec 12 19:04 mynode-es2
    drwxr-xr-x. 2 root root 72 Dec 12 19:04 mynode-es3
    
    elasticsearch/mynode-es1:
    total 8
    -rw-r--r--. 1 root root 1365 Dec 12 19:04 README.txt
    -rw-r--r--. 1 root root  845 Dec 12 19:04 sample-elasticsearch.yml
    
    elasticsearch/mynode-es2:
    total 12
    -rw-r--r--. 1 root root 3652 Dec 12 19:04 http.p12
    -rw-r--r--. 1 root root 1365 Dec 12 19:04 README.txt
    -rw-r--r--. 1 root root  845 Dec 12 19:04 sample-elasticsearch.yml
    
    elasticsearch/mynode-es3:
    total 12
    -rw-r--r--. 1 root root 3652 Dec 12 19:04 http.p12
    -rw-r--r--. 1 root root 1365 Dec 12 19:04 README.txt
    -rw-r--r--. 1 root root  845 Dec 12 19:04 sample-elasticsearch.yml
    
    kibana:
    total 12
    -rw-r--r--. 1 root root 1200 Dec 12 19:04 elasticsearch-ca.pem
    -rw-r--r--. 1 root root 1306 Dec 12 19:04 README.txt
    -rw-r--r--. 1 root root 1052 Dec 12 19:04 sample-kibana.yml
  5. 将您现有的密钥库替换为新的密钥库。您的证书目录位置可能与此处显示的位置不同,具体取决于您选择的安装方法。

    运行 mv 命令,将 <es1-hostname> 替换为您初始 Elasticsearch 节点的主机名。

    sudo mv /usr/share/elasticsearch/elasticsearch/<es1-hostname>/http.p12 /etc/elasticsearch/certs/
  6. 由于这是一个新的密钥库,因此需要使用其路径更新 Elasticsearch 配置文件。打开 /etc/elasticsearch/elasticsearch.yml 并使用新路径更新 HTTP SSL 设置。

    xpack.security.http.ssl:
      enabled: true
      #keystore.path: certs/http.p12
      keystore.path: /etc/elasticsearch/certs/http.p12
  7. 由于您还生成了一个新的密钥库密码,因此还需要更新 Elasticsearch 密钥库。从 Elasticsearch 安装目录中,首先删除现有的 HTTP 密钥库条目。

    sudo /usr/share/elasticsearch/bin/elasticsearch-keystore remove xpack.security.http.ssl.keystore.secure_password
  8. 使用您为此密钥库生成的密码,添加更新后的 HTTP 密钥库密码。

    sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
  9. 由于在本教程中,我们向 Elasticsearch 配置目录添加了文件,因此我们需要确保在重新启动 Elasticsearch 之前,权限和所有权正确无误。

    1. 将文件更改为由 root:elasticsearch 拥有。

      sudo chown -R root:elasticsearch /etc/elasticsearch/certs/
    2. /etc/elasticsearch/certs 中的文件设置为拥有者 (root) 具有读取和写入权限,而 elastic 用户具有读取权限。

      sudo chmod 640 /etc/elasticsearch/certs/elastic-certificates.p12
      sudo chmod 640 /etc/elasticsearch/certs/elastic-stack-ca.p12
      sudo chmod 640 /etc/elasticsearch/certs/http_ca.crt
      sudo chmod 640 /etc/elasticsearch/certs/http.p12
    3. /etc/elasticsearch/certs/etc/elasticsearch/certs/ca 目录更改为由拥有者执行。

      sudo chmod 750 /etc/elasticsearch/certs
      sudo chmod 750 /etc/elasticsearch/certs/ca
  10. 重新启动 Elasticsearch 服务。

    sudo systemctl start elasticsearch.service
  11. 运行状态命令以确认 Elasticsearch 正在运行。

    sudo systemctl status elasticsearch.service

    如果出现任何问题,您还可以通过跟踪 Elasticsearch 日志文件来监控 Elasticsearch 日志中的任何问题。

    sudo tail -f /var/log/elasticsearch/elasticsearch-demo.log

    日志文件中类似以下的一行表示已正确配置 SSL。

    [2023-07-12T13:11:29,154][INFO ][o.e.x.s.Security         ] [es-ssl-test] Security is enabled

步骤 4:在其他 Elasticsearch 节点上配置安全性

编辑

现在已为第一个 Elasticsearch 节点配置了安全性,需要在每个额外的 Elasticsearch 节点上重复一些步骤。

  1. 为了避免文件名冲突,在每个额外的 Elasticsearch 节点上,重命名 /etc/elasticsearch/certs/ 目录中现有的 http.p12 文件。

    mv http.p12 http-old.p12
  2. 复制您在第一个 Elasticsearch 节点上生成的 CA 和信任存储文件,以便在所有其他节点上重复使用它们。

    • /ca 目录(包含 ca.crtca.key)从第一个 Elasticsearch 节点上的 /etc/elasticsearch/certs/ 复制到所有其他 Elasticsearch 节点上的同一路径。
    • elastic-stack-ca.p12 文件从 /etc/elasticsearch/certs/ 复制到所有其他 Elasticsearch 节点上的 /etc/elasticsearch/certs/ 目录。
    • http.p12 文件从 /usr/share/elasticsearch/elasticsearch 中的每个节点目录(即 elasticsearch/mynode-es1elasticsearch/mynode-es2elasticsearch/mynode-es3)复制到每个相应集群节点上的 /etc/elasticsearch/certs/ 目录。
  3. 在每个 Elasticsearch 节点上,重复生成传输层新证书的步骤。

    1. 停止 Elasticsearch 服务。

      sudo systemctl stop elasticsearch.service
    2. /etc/elasticsearch/certs 目录中,为 Elasticsearch 节点创建一个新证书。

      sudo /usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca-cert /etc/elasticsearch/certs/ca/ca.crt --ca-key /etc/elasticsearch/certs/ca/ca.key

      出现提示时,选择一个输出文件名并为证书指定密码。在此示例中,我们将使用 /etc/elasticsearch/certs/elastic-certificates.p12

    3. 使用新的信任存储和密钥库文件名和路径更新 /etc/elasticsearch/elasticsearch.yml 设置文件。

      xpack.security.transport.ssl:
         ...
         keystore.path: /etc/elasticsearch/certs/elastic-certificates.p12
         truststore.path: /etc/elasticsearch/certs/elastic-stack-ca.p12
    4. 列出 Elasticsearch 密钥库的内容。

      /usr/share/elasticsearch/bin/elasticsearch-keystore list

      结果应如下所示

      keystore.seed
      xpack.security.http.ssl.keystore.secure_password
      xpack.security.transport.ssl.keystore.secure_password
      xpack.security.transport.ssl.truststore.secure_password
    5. 删除默认传输密钥库和信任库的现有密钥库值

      sudo /usr/share/elasticsearch/bin/elasticsearch-keystore remove xpack.security.transport.ssl.keystore.secure_password
      
      sudo /usr/share/elasticsearch/bin/elasticsearch-keystore remove xpack.security.transport.ssl.truststore.secure_password
    6. 使用新密钥库和信任存储的密码更新 elasticsearch-keystore

      sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
      
      sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
  4. 对于 HTTP 层,证书已在第一个 Elasticsearch 节点上生成。每个额外的 Elasticsearch 节点只需配置为使用新证书。

    1. 使用新的信任存储和密钥库文件名更新 /etc/elasticsearch/elasticsearch.yml 设置文件。

      xpack.security.http.ssl:
        enabled: true
        #keystore.path: certs/http.p12
        keystore.path: /etc/elasticsearch/certs/http.p12
    2. 删除现有的 HTTP 密钥库条目。

      sudo /usr/share/elasticsearch/bin/elasticsearch-keystore remove xpack.security.http.ssl.keystore.secure_password
    3. 添加更新后的 HTTP 密钥库密码。

      sudo /usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
    4. 将证书文件更改为由 root:elasticsearch 组拥有。

      sudo chown -R root:elasticsearch /etc/elasticsearch/certs/
    5. /etc/elasticsearch/certs 中的文件设置为拥有者 (root) 具有读取和写入权限,而 elastic 用户具有读取权限。

      chmod 640 *
    6. /etc/elasticsearch/certs/etc/elasticsearch/certs/ca 目录更改为由拥有者执行。

      chmod 750 /etc/elasticsearch/certs
      chmod 750 /etc/elasticsearch/certs/ca
  5. 重新启动 Elasticsearch 服务。

    sudo systemctl start elasticsearch.service
  6. 运行状态命令以确认 Elasticsearch 正在运行。

    sudo systemctl status elasticsearch.service

步骤 5:为 Kibana 生成服务器端和客户端证书

编辑

现在已使用新证书配置了传输层和 HTTP 层的加密,要实现与 Elasticsearch 的端到端连接,还需要完成两个任务:设置 Kibana 和 Elasticsearch 之间以及客户端浏览器和 Kibana 之间的加密证书。有关这些步骤的更多详细信息,请参阅 Kibana 和 Elasticsearch 之间的相互 TLS 身份验证 以及 加密浏览器和 Kibana 之间的流量

  1. 在步骤 3 中,当您为 HTTP 层生成新证书时,该过程创建了一个存档 elasticsearch-ssl-http.zip

    从展开的存档中的 kibana 目录中,将 elasticsearch-ca.pem 私钥文件复制到 Kibana 主机。

  2. 在 Kibana 主机上,将 elasticsearch-ca.pem 复制到 Kibana 配置目录(取决于您使用的安装方法,配置目录的位置可能与显示的有所不同)。

    mv elasticsearch-ca.pem /etc/kibana
  3. 停止 Kibana 服务。

    sudo systemctl stop kibana.service
  4. 更新 /etc/kibana/kibana.yml 设置文件,以反映 elasticsearch-ca.pem 的位置。

    elasticsearch.ssl.certificateAuthorities: [/etc/kibana/elasticsearch-ca.pem]
  5. 登录到第一个 Elasticsearch 节点,并使用证书实用程序为 Kibana 服务器生成证书捆绑包。此证书将用于加密 Kibana 和客户端浏览器之间的流量。在命令中,将 <DNS name> 和 <IP address> 替换为 Kibana 服务器主机的主机名和 IP 地址。

    sudo /usr/share/elasticsearch/bin/elasticsearch-certutil cert --name kibana-server --ca-cert /etc/elasticsearch/certs/ca/ca.crt --ca-key /etc/elasticsearch/certs/ca/ca.key  --dns <DNS name> --ip <IP address> --pem

    出现提示时,为输出文件指定一个唯一的名称,例如 kibana-cert-bundle.zip

  6. 将生成的存档复制到您的 Kibana 主机并解压。

    sudo unzip kibana-cert-bundle.zip

    解压后的存档将创建一个目录 kibana-server,其中包含新的 Kibana 密钥和证书。

    ls -l kibana-server/
    total 8
    -rw-r--r--. 1 root root 1208 May  3 16:08 kibana-server.crt
    -rw-r--r--. 1 root root 1675 May  3 16:08 kibana-server.key
  7. 将证书和密钥复制到 /etc/kibana

    sudo cp kibana-server.crt /etc/kibana/
    sudo cp kibana-server.key /etc/kibana/
  8. 更新证书文件的权限,以确保它们是可读的。从 /etc/kibana 目录中,运行

    sudo chmod 640 *.crt
    sudo chmod 640 *.key
  9. 打开 /etc/kibana/kibana.yml 并进行以下更改。

    server.ssl.certificate: /etc/kibana/kibana-server.crt
    server.ssl.key: /etc/kibana/kibana-server.key
    server.ssl.enabled: true

    保持文件打开以进行下一步。

  10. 为了确保 Kibana 会话不会失效,请通过将任何长度为 32 个字符或更长的字符串分配给 xpack.security.encryptionKey 设置来设置加密密钥(此字符串将在 kibana.yml 中配置,无需记住)。要生成随机字符串,可以使用以下 bash 命令

    cat /dev/urandom | tr -dc 'a-z0-9' | fold -w 32 | head -n 1

    使用您自己的字符串或上述命令序列的输出,将加密密钥设置添加到 /etc/kibana/kibana.yml

    xpack.security.encryptionKey: previously_create_string

    保存并关闭文件。

  11. 重新启动 Kibana 服务。

    sudo systemctl start kibana.service
  12. 确认 Kibana 正在运行。

    sudo systemctl status kibana.service

    如果一切配置正确,将建立与 Elasticsearch 的连接,Kibana 将正常启动。

  13. 您还可以查看 Kibana 日志文件以收集更多详细信息。

    tail -f /var/log/kibana/kibana.log

    在日志文件中,您应该找到一条 Kibana is now available 消息。

  14. 现在,您应该拥有一个使用 Elasticsearch 和 Kibana 的端到端加密部署,该部署在集群节点和 Kibana 之间以及对 Kibana 的 HTTPS 访问之间提供加密。

    打开 Web 浏览器,访问 Kibana 主机的外部 IP 地址:https://<kibana-host-address>:5601。请注意,URL 应使用 https 协议,而不是 http 协议。

  15. 使用您在 教程 1:安装自托管的 Elastic Stack 的步骤 1 中配置的 elastic 用户和密码登录。

恭喜!您已成功更新 Elasticsearch 和 Kibana 之间的 SSL 证书。

步骤 6:安装配置了 SSL 证书的 Fleet

编辑

现在 Kibana 已启动并运行,您可以继续安装 Fleet Server,它将管理我们在稍后步骤中设置的 Elastic Agent。

如果您想了解有关这些步骤的更多信息,请参阅 Fleet 和 Elastic Agent 指南中的 部署本地和自托管。您可以在 为自托管 Fleet Server 配置 SSL/TLS 中找到生成和配置证书的详细步骤。

  1. 登录到第一个 Elasticsearch 节点,并使用证书实用程序为 Fleet Server 生成证书捆绑包。在命令中,将 <DNS name>IP address 替换为 Fleet Server 主机的主机名和 IP 地址。

    sudo /usr/share/elasticsearch/bin/elasticsearch-certutil cert --name fleet-server --ca-cert /etc/elasticsearch/certs/ca/ca.crt --ca-key /etc/elasticsearch/certs/ca/ca.key  --dns <DNS name> --ip <IP address> --pem

    出现提示时,为输出文件指定一个唯一的名称,例如 fleet-cert-bundle.zip

  2. 在您的 Fleet Server 主机上,为证书文件创建一个目录。

    sudo mkdir /etc/fleet
  3. 将生成的存档复制到您的 Fleet Server 主机并将其解压到 /etc/fleet/ 中。

    • /etc/fleet/fleet-server.crt
    • /etc/fleet/fleet-server.key`
  4. 从第一个 Elasticsearch 节点,复制 ca.crt 文件,并将其粘贴到 Fleet Server 主机上的 /etc/fleet/ 目录中。为了便于识别,我们还将该文件重命名为 es-ca.crt

    • /etc/fleet/es-ca.crt
  5. 更新证书文件的权限,确保它们是可读的。在 /etc/fleet 目录内,运行

    sudo chmod 640 *.crt
    sudo chmod 640 *.key
  6. 现在证书文件已就位,在 Fleet Server 主机上,为安装包创建一个工作目录

    mkdir fleet-install-files
  7. 切换到新目录

    cd fleet-install-files
  8. 在终端中,运行 ifconfig 命令,并复制主机 inet IP 地址的值(例如,10.128.0.84)。稍后您将需要此值。
  9. 回到您的 Web 浏览器,打开 Kibana 菜单,转到 管理 → Fleet。Fleet 打开时会显示一条消息,提示您需要添加一个 Fleet Server。
  10. 单击 添加 Fleet Server。“添加 Fleet Server”弹出窗口将打开。
  11. 在弹出窗口中,选择 高级 选项卡。
  12. 为 Fleet Server 创建策略 步骤中,保留默认的 Fleet Server 策略名称,以及所有高级选项的默认值。

    保留“收集系统日志和指标”选项的选中状态。单击 创建策略。策略的创建需要一分钟左右的时间。

  13. 选择安全部署模式 步骤中,选择 生产 选项。这使您可以提供自己的证书。
  14. 添加 Fleet Server 主机 步骤中

    1. 为您的 Fleet Server 主机指定一个名称,例如 Fleet Server
    2. 指定主机 URL 和 Elastic Agent 将访问 Fleet Server 的位置,包括默认端口 8220。例如,https://10.128.0.203:8220

      该 URL 是您从 ifconfig 输出中复制的 inet 值。

      有关默认端口分配的详细信息,请参阅本地 Fleet Server 安装文档中的默认端口分配

    3. 单击 添加主机
  15. 生成服务令牌 步骤中,生成令牌并保存输出。该令牌也会自动传播到安装 Fleet Server 的命令中。
  16. 将 Fleet Server 安装到集中式主机 步骤中,在此示例中,我们选择 Linux Tar 选项卡,但您也可以选择适合您设置 Fleet Server 的主机操作系统的选项卡。

    请注意,建议使用 TAR/ZIP 包而不是 RPM/DEB 系统包,因为只有前者支持使用 Fleet 升级 Fleet Server。

  17. 在您的 Fleet Server 主机上,逐个运行前三个命令。

    这些命令将分别执行

    1. 从 Elastic Artifact Registry 下载 Fleet Server 包。
    2. 解压缩软件包存档。
    3. 切换到包含安装二进制文件的目录。
  18. 在运行提供的 elastic-agent install 命令之前,您需要进行一些更改

    1. 更新到正确的文件位置的路径

      • Elasticsearch CA 文件(es-ca.crt
      • Fleet Server 证书(fleet-server.crt
      • Fleet Server 密钥(fleet-server.key
    2. 还需要更新 fleet-server-es-ca-trusted-fingerprint。在您的任何 Elasticsearch 主机上,运行以下命令以获取要使用的正确指纹

      grep -v ^- /etc/elasticsearch/certs/ca/ca.crt | base64 -d | sha256sum

      保存指纹值。您将在后面的步骤中需要它。

      fleet-server-es-ca-trusted-fingerprint 设置替换为返回的值。您更新后的命令应类似于以下内容

      sudo ./elastic-agent install -url=https://10.128.0.208:8220 \
        --fleet-server-es=https://10.128.0.84:9200 \
        --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmPyL6Rva2VuLTE5OTg4NzAxOTM4NDU6X1I0Q1RrRHZTSWlyNHhkSXQwNEJoQQ \
        --fleet-server-policy=fleet-server-policy \
        --fleet-server-es-ca-trusted-fingerprint=92b51cf91e7fa311f8c84849224d448ca44824eb \
        --certificate-authorities=/etc/fleet/es-ca.crt \
        --fleet-server-cert=/etc/fleet/fleet-server.crt \
        --fleet-server-cert-key=/etc/fleet/fleet-server.key \
        --fleet-server-port=8220

      有关所有安装命令选项的详细信息,请参阅 Elastic Agent 命令参考中的 elastic-agent install

  19. 在您进行所需的更新后,运行 elastic-agent install 命令以安装 Fleet Server。

    出现提示时,确认 Elastic Agent 应作为服务运行。如果一切顺利,安装将成功完成

    Elastic Agent has been successfully installed.

    想知道为什么该命令引用 Elastic Agent 而不是 Fleet Server?Fleet Server 实际上是一个在 Elastic Agent 内以特殊 Fleet Server 策略运行的子进程。请参阅 什么是 Fleet Server 以了解更多信息。

  20. 返回到 Kibana 添加 Fleet Server 弹出窗口,并等待 Fleet Server 已连接的确认。
  21. 确认连接后,忽略 继续注册 Elastic Agent 选项,并关闭弹出窗口。

Fleet Server 现在已完全设置!

在继续安装 Elastic Agent 之前,需要执行一些步骤来使用 Elasticsearch CA 指纹更新 kibana.yml 设置文件

  1. 在您的 Kibana 主机上,停止 Kibana 服务

    sudo systemctl stop kibana.service
  2. 打开 /etc/kibana/kibana.yml 进行编辑。
  3. 查找 xpack.fleet.outputs 设置。
  4. ca_trusted_fingerprint 更新为您之前在 Elasticsearch ca.crt 文件上运行 grep 命令时捕获的值。

    kibana.yml 中更新后的条目应如下所示

    xpack.fleet.outputs: [{id: fleet-default-output, name: default, is_default: true, is_default_monitoring: true, type: elasticsearch, hosts: [`https://10.128.0.84:9200`], ca_trusted_fingerprint: 92b51cf91e7fa311f8c84849224d448ca44824eb}]
  5. 保存您的更改。
  6. 重新启动 Kibana

    sudo systemctl start kibana.service

    Kibana 现在已配置了正确的指纹,以供 Elastic Agent 访问 Elasticsearch。您现在可以设置 Elastic Agent 了!

步骤 7:安装 Elastic Agent

编辑

接下来,我们将把 Elastic Agent 安装在另一个主机上,并使用“系统”集成来监视系统日志和指标。您可以在 为自管理 Fleet Server 配置 SSL/TLS 中找到有关这些步骤的更多详细信息。

  1. 登录到您要设置 Elastic Agent 的主机。
  2. 为 Elasticsearch 证书文件创建一个目录

    sudo mkdir /etc/agent
  3. 从第一个 Elasticsearch 节点,复制 ca.crt 文件,并将其粘贴到 Fleet Server 主机上的 /etc/agent/ 目录中。为了便于识别,我们还将该文件重命名为 es-ca.crt

    • /etc/fleet/es-ca.crt
  4. 为安装包创建一个工作目录

    mkdir agent-install-files
  5. 切换到新目录

    cd agent-install-files
  6. 打开 Kibana,转到 管理 → Fleet
  7. 代理 选项卡上,您应该会看到您新的 Fleet Server 策略正在运行,且状态正常。
  8. 单击 添加代理。“添加代理”弹出窗口将打开。
  9. 在弹出窗口中,选择一个代理策略名称,例如 Demo Agent Policy
  10. 保持 收集系统日志和指标 处于启用状态。这会将 系统集成 添加到 Elastic Agent 策略。
  11. 单击 创建策略
  12. 对于 注册到 Fleet? 步骤,保持 注册到 Fleet 处于选中状态。
  13. 在您的主机上安装 Elastic Agent 步骤中,在此示例中,我们选择 Linux Tar 选项卡,但您也可以选择适合您设置 Fleet Server 的主机操作系统的选项卡。

    与 Fleet Server 一样,请注意,建议使用 TAR/ZIP 包而不是 RPM/DEB 系统包,因为只有前者支持使用 Fleet 升级 Elastic Agent。

  14. 在您的 Elastic Agent 主机上,逐个运行前三个命令。

    这些命令将分别执行

    1. 从 Elastic Artifact Registry 下载 Elastic Agent 包。
    2. 解压缩软件包存档。
    3. 切换到包含安装二进制文件的目录。
  15. 在运行提供的 elastic-agent install 命令之前,您需要进行一些更改

    1. 对于 --url 参数,请确认端口号为 8220(这是本地 Fleet Server 的默认端口)。
    2. 添加一个 --certificate-authorities 参数,其中包含 CA 证书文件的完整路径。例如,--certificate-authorities=/etc/agent/es-ca.crt

      结果应如下所示

      sudo ./elastic-agent install \
      --url=https://10.128.0.203:8220 \
      --enrollment-token=VWCobFhKd0JuUnppVYQxX0VKV5E6UmU3BGk0ck9RM2HzbWEmcS4Bc1YUUM== \
      --certificate-authorities=/etc/agent/es-ca.crt
  16. 运行 elastic-agent install 命令。

    出现提示时,输入 Y 以安装 Elastic Agent 并将其作为服务运行。等待安装完成。

    如果一切顺利,安装将成功完成

    Elastic Agent has been successfully installed.
  17. 在 Kibana 添加代理 弹出窗口中,等待 Elastic Agent 已连接的确认。
  18. 等待 确认传入数据 步骤完成。这可能需要几分钟时间。
  19. 确认数据正在流动后,关闭弹出窗口。

您新的 Elastic Agent 现在已安装并注册到 Fleet Server。

步骤 8:查看您的系统数据

编辑

现在所有组件都已安装完毕,是时候查看您的系统数据了。

查看您的系统日志数据

  1. 打开 Kibana 菜单,转到 分析 → 仪表板
  2. 在查询字段中,搜索 Logs System
  3. 选择 [Logs System] Syslog dashboard 链接。Kibana 仪表板打开,其中显示了 Syslog 事件、主机名和进程等的可视化。

查看您的系统指标数据

  1. 打开 Kibana 菜单,然后返回到 分析 → 仪表板
  2. 在查询字段中,搜索 Metrics System
  3. 选择 [Metrics System] Host overview 链接。Kibana 仪表板打开,其中显示了主机指标的可视化,包括 CPU 使用率、内存使用率、正在运行的进程等等。

    The System metrics host overview showing CPU usage, memory usage, and other visualizations

恭喜!您已使用您自己的受信任的 CA 签名证书成功配置了 Elasticsearch、Kibana、Fleet 和 Elastic Agent 的安全性。

下一步是什么?

编辑
  • 您是否已准备好将数据摄取到您新设置的 Elastic Stack 中?了解如何将数据添加到 Elasticsearch
  • 使用 Elastic Observability 来统一您的日志、基础设施指标、正常运行时间和应用程序性能数据。
  • 想要保护您的端点免受安全威胁?试用 Elastic Security。添加端点保护只是您添加到代理策略的另一个集成!