为 Logstash 输出配置 SSL/TLS

编辑

要安全地将数据从 Elastic Agent 发送到 Logstash,您需要配置传输层安全 (TLS)。使用 TLS 可确保您的 Elastic Agent 将加密数据发送到受信任的 Logstash 服务器,并且您的 Logstash 服务器接收来自受信任的 Elastic Agent 客户端的数据。

先决条件

编辑
  • 确保您的订阅级别支持输出到 Logstash。
  • 在 Windows 上,将 Fleet Server 的端口 8220 和 Logstash 的端口 5044 添加到 Windows 高级防火墙的入站端口规则中。
  • 如果您要连接到自管理的 Elasticsearch 集群,则需要用于签署 Elasticsearch 集群 HTTP 层证书的 CA 证书。有关更多信息,请参阅Elasticsearch 安全文档

生成自定义证书和私钥

编辑

您可以使用通常用于生成 PEM 格式证书的任何流程。此处显示的示例使用 Elasticsearch 提供的 certutil 工具。

certutil 工具在 Elastic Cloud 上不可用,但您仍然可以使用它来为 Elastic Agent 到 Logstash 的连接生成证书。只需下载 Elasticsearch 包,将其解压缩到本地目录,然后运行 elasticsearch-certutil 命令。无需启动 Elasticsearch!

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

    ./bin/elasticsearch-certutil ca --pem

    此命令会创建一个 zip 文件,其中包含您将用于签署证书的 CA 证书和密钥。解压缩该 zip 文件

    Screen capture of a folder called ca that contains two files: ca.crt and ca.key
  2. 生成由您的 CA 签署的客户端 SSL 证书。例如

    ./bin/elasticsearch-certutil cert \
      --name client \
      --ca-cert /path/to/ca/ca.crt \
      --ca-key /path/to/ca/ca.key \
      --pem

    解压缩该 zip 文件

    Screen capture of a folder called client that contains two files: client.crt and client.key
  3. 生成由您的 CA 签署的 Logstash SSL 证书。例如

    ./bin/elasticsearch-certutil cert \
      --name logstash \
      --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

    解压缩该 zip 文件

    Screen capture of a folder called logstash that contains two files: logstash.crt and logstash.key
  4. 将 Logstash 密钥转换为 pkcs8。例如,在 Linux 上运行

    openssl pkcs8 -inform PEM -in logstash.key -topk8 -nocrypt -outform PEM -out logstash.pkcs8.key

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

配置 Logstash 管道

编辑

如果您已经创建了 Logstash elastic-agent-pipeline.conf 管道并将其添加到 pipelines.yml,请跳到示例配置,并根据需要修改您的管道配置。

在 Logstash 配置目录中,打开 pipelines.yml 文件,并添加以下配置。替换为您的文件路径。

- pipeline.id: elastic-agent-pipeline
  path.config: "/etc/path/to/elastic-agent-pipeline.conf"

elastic-agent-pipeline.conf 文件中,添加管道配置。请注意,Elastic Cloud 上的 Elasticsearch Service 所需的配置与自管理的 Elasticsearch 集群不同。如果您复制了 Fleet 中显示的配置,请根据需要进行调整。

Elasticsearch Service 示例

input {
  elastic_agent {
    port => 5044
    ssl_enabled => true
    ssl_certificate_authorities => ["/path/to/ca.crt"]
    ssl_certificate => "/path/to/logstash.crt"
    ssl_key => "/path/to/logstash.pkcs8.key"
    ssl_client_authentication => "required"
  }
}

output {
  elasticsearch {
    cloud_id => "xxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx=" 
    api_key => "xxxx:xxxx" 
    data_stream => true
    ssl => true 
  }
}

使用 Elastic Cloud 部署页面上显示的 cloud_id

在 Fleet 中,您可以在添加 Logstash 输出时生成此 API 密钥。

Elasticsearch Service 使用标准的公开信任证书,因此此处无需指定其他 SSL 设置。

自管理 Elasticsearch 集群示例

input {
  elastic_agent {
    port => 5044
    ssl_enabled => true
    ssl_certificate_authorities => ["/path/to/ca.crt"]
    ssl_certificate => "/path/to/logstash.crt"
    ssl_key => "/path/to/logstash.pkcs8.key"
    ssl_client_authentication => "required"
  }
}

output {
  elasticsearch {
    hosts => "https://xxxx:9200"
    api_key => "xxxx:xxxx"
    data_stream => true
    ssl => true
    cacert => "/path/to/http_ca.crt" 
  }
}

使用为 Elasticsearch 生成的证书。

要了解有关 Logstash 配置的更多信息,请参阅

配置完管道后,重新启动 Logstash

bin/logstash

向 Fleet 添加 Logstash 输出

编辑

本节介绍如何在 Fleet 中添加 Logstash 输出并配置 SSL 设置。如果您正在独立运行 Elastic Agent,请参阅Logstash 输出配置文档。

  1. 在 Kibana 中,转到 Fleet > 设置
  2. 输出 下,单击 添加输出。如果您一直在按照 Fleet 中的 Logstash 步骤操作,则您可能已在此页面上。
  3. 为输出指定一个名称。
  4. 对于 类型,选择 Logstash
  5. Logstash 主机 下,指定您的 Agent 将用于连接到 Logstash 的主机和端口。使用 host:port 格式。
  6. 服务器 SSL 证书颁发机构 字段中,粘贴您之前生成的 ca.crt 文件的全部内容。
  7. 客户端 SSL 证书 字段中,粘贴您之前生成的 client.crt 文件的全部内容。
  8. 客户端 SSL 证书密钥 字段中,粘贴您之前生成的 client.key 文件的全部内容。
Screen capture of a folder called `logstash` that contains two files: logstash.crt and logstash.key

完成后,保存并应用设置。

在 Agent 策略中选择 Logstash 输出

编辑

Logstash 现在正在侦听来自 Elastic Agent 的事件,但事件尚未流式传输到 Elasticsearch。您需要在 Agent 策略中选择 Logstash 输出。您可以编辑现有策略或创建新策略

  1. 在 Kibana 中,转到 Fleet > Agent 策略,然后创建新的 Agent 策略或单击现有策略以进行编辑

    • 要更改新策略中的输出设置,请单击 创建 Agent 策略,然后展开 高级选项
    • 要更改现有策略中的输出设置,请单击该策略以进行编辑,然后单击 设置
  2. 设置 集成输出 和(可选)Agent 监控输出 以使用您之前创建的 Logstash 输出。您可能需要向下滚动才能看到这些选项

    Screen capture showing the Logstash output policy selected in an agent policy
  3. 保存您的更改。

注册到 Agent 策略的任何 Elastic Agent 都将开始通过 Logstash 将数据发送到 Elasticsearch。如果您没有任何已安装的 Elastic Agent 注册到 Agent 策略,请立即执行此操作。

当 Elastic Agent 更新到新策略并通过安全连接连接到 Logstash 时,可能会有轻微的延迟。

测试连接

编辑

要确保 Logstash 正在发送数据,请从运行 Logstash 的主机运行以下命令

curl -XGET localhost:9600/_node/stats/events

请求应返回有关传入和传出事件数量的统计信息。如果这些值为 0,请检查 Elastic Agent 日志是否存在问题。

当数据流式传输到 Elasticsearch 时,转到 可观测性,然后单击 指标 以查看有关您系统的指标。