为什么filebeat只需要cert而metricbeat需要key、c​​a和cert?

Why does filebeat only need cert and metricbeat need key, ca and cert?

我对整个 ELK 堆栈还很陌生,我刚刚设置了 filebeat 和 metricbeat 以连接到远程 ELK 堆栈。所有 v6.0.0-rc1

SSL 设置让我有点困惑,我留下了一个问题: 为什么filebeat只需要cert而metricbeat需要key、c​​a和cert?

filebeat.yml

ssl:
  certificate_authorities:
    - /host/certs/logstash-beats.crt

metricbeat.yml:

output.logstash:
    hosts: ["host.url:5044"] 
    ssl.certificate_authorities: ["/host/certs/reporter-ca.crt"]
    ssl.certificate: "/host/certs/reporter.crt"
    ssl.key: "/host/certs/reporter-private.key"

TLS/SSL 使用 public 密钥基础设施。需要认证的服务需要 public 和私钥。另一个端点(验证服务)只需要 public 密钥(或者更好的是只需要 CA 证书 - public 密钥)。默认情况下使用 TLS/SSL 时,只有客户端连接到的 'server' 才会被验证。在这种情况下,beats 是客户端,而 Logstash 是服务器。

此外,服务器可以请求客户端对自身进行身份验证(使用证书)。这种方式称为客户端身份验证,必须在服务器 (Logstash) 中明确启用。启用客户端身份验证后,客户端还需要证书和私钥 + 服务器需要证书(或 CA 证书)才能 verify/authenticate 客户端。

无论如何,当使用 client-auth 时,每个客户端都应该有自己的客户端证书和匹配的 IP/Domain 名称。另外 Logstash 应该只有 CAs public 证书用于验证。这归结为拥有适当的 CA 基础设施。

切勿与另一台机器共享 endpoint/machine 的私钥。

Is it bad practice to distribute the private key to each metricbeat agent?

确实如此。

Should that private key have a password?

如果可能的话是(因为私钥应该被加密),但这很可能会混淆访问,因为必须配置 somewhere the passphrase 才能使用密钥。不过,如果密钥被盗,加密密钥可以在一定程度上减少损失。

如果没有客户端身份验证,beats 配置应该(至少)像:

output.logstash:
    hosts: ["host.url:5044"] 
    ssl.certificate_authorities:
    - /host/certs/logstash-beats.crt

通过客户端身份验证,beats 配置应该(至少)像:

output.logstash:
    hosts: ["host.url:5044"] 
    ssl.certificate_authorities:
    - /host/certs/logstash-beats.crt
    ssl.certificate: "/host/certs/reporter.crt"
    ssl.key: "/host/certs/reporter-private.key"
    ssl.key_passphrase: ...