为什么filebeat只需要cert而metricbeat需要key、ca和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、ca和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: ...
我对整个 ELK 堆栈还很陌生,我刚刚设置了 filebeat 和 metricbeat 以连接到远程 ELK 堆栈。所有 v6.0.0-rc1
SSL 设置让我有点困惑,我留下了一个问题: 为什么filebeat只需要cert而metricbeat需要key、ca和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: ...