教程 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 中的步骤设置一个本地 Elasticsearch 集群和 Kibana。

本指南中的示例使用 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
    证书颁发机构的私钥

    仅需在第一个 Elasticsearch 节点上执行这些生成新的自签名 CA 证书的步骤。其他 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名称>和<IP地址>替换为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访问。

    打开一个浏览器到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名称>IP地址替换为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. 回到您的网页浏览器,打开 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. Agent 选项卡上,您应该会看到您的新的 Fleet Server 策略正在运行,并且状态良好。
  8. 点击 添加 Agent添加 Agent 侧边栏将打开。
  9. 在侧边栏中,选择一个 Agent 策略名称,例如 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 添加 Agent 侧边栏中,等待确认 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。添加端点保护只是您添加到 Agent 策略的另一个集成!