为 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 服务所需的配置与自托管 Elasticsearch 集群不同。如果您复制了 Fleet 中显示的配置,请根据需要进行调整。

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 {
    cloud_id => "xxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxx=" 
    api_key => "xxxx:xxxx" 
    data_stream => true
    ssl => true 
  }
}

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

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

Elasticsearch 服务使用标准的公共可信证书,因此无需在此处指定其他 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 主机下,指定您的代理将用于连接到 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

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

在代理策略中选择 Logstash 输出

编辑

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

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

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

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

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

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

测试连接

编辑

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

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

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

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