在本教程中,您将学习如何在 Elasticsearch 节点之间启用 HTTPS 连接。 Elastic 安全功能之一是使用 HTTPS 连接在 Elasticsearch 集群节点之间启用加密。
如果您想了解如何配置和设置 Elasticsearch 集群,请通过以下链接查看我们之前的指南;
配置多节点 Elasticsearch 集群
也可以看看;
启用 Kibana HTTPS 连接
在 Elasticsearch 节点之间启用 HTTPS 连接
集群中的 Elasticsearch 节点通过使用 TCP 端口 9300 的传输协议进行通信。请注意,Elasticsearch 和 REST 客户端(例如 Kibana、Filebeat)之间的 HTTP 连接通过 TCP 端口 9200 进行通信。
假设您已经有一个正在运行的 Elasticsearch 集群,请按照以下步骤启用 Elasticsearch 节点之间的 HTTPS 连接。
检查我们的集群节点;
curl -XGET es-node-01.kifarunix-demo.com:9200/_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name 192.168.59.19 29 84 1 1.90 1.31 1.06 cdhilmrstw * es-node-03 192.168.59.17 48 86 2 1.49 1.46 1.17 cdhilmrstw - es-node-01 192.168.59.18 22 84 1 1.61 1.35 1.14 cdhilmrstw - es-node-02
生成 Elasticsearch TLS/SSL 证书
您需要生成 x509 TLS/SSL 证书才能对节点之间的通信进行加密。
您可以使用生成 TLS 证书和密钥 elasticsearch-certutil
工具。
使用 elasticsearch-certutil 生成 elasticsearch 自签名 TLS 证书
使用以下命令生成 Elasticsearch TLS 证书 elasticsearch-certutil
工具:
- 创建目录来存储证书文件;
mkdir /etc/elasticsearch/certs/
- 以 PKCS#12 格式生成 CA
下面的命令生成一个 CA 证书和私钥,并将其存储在上面创建的目录下的名称下 elk-cluster-ca.p12
. 该命令还将提示您输入用于保护 CA 文件的密码。 我们只需在此设置中按 ENTER 即可使用空密码.
/usr/share/elasticsearch/bin/elasticsearch-certutil ca --out /etc/elasticsearch/certs/elk-cluster-ca.p12 --days 3650
- 生成 PEM 格式的 CA
如果要以 PEM 格式生成 CA,请运行以下命令。 该命令会生成一个 zip 文件,其中包含 CA 证书和私钥的各个文件。
/usr/share/elasticsearch/bin/elasticsearch-certutil ca --pem --out /etc/elasticsearch/certs/elk-cluster-ca.zip --days 3650
- 生成 PKCS#12 格式的证书:
默认情况下,该命令生成单个输出文件,其中包含:证书、私钥和 CA 证书。 如果您在上面设置了密码,它还会提示输入 CA 密码和证书密码。
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca /etc/elasticsearch/certs/elk-cluster-ca.p12 --out /etc/elasticsearch/certs/elk-cluster-cert.p12 --days 3650
- 生成 PEM 格式的证书:
解压 CA 证书和密钥文件;
unzip /etc/elasticsearch/certs/elk-cluster-ca.zip -d /etc/elasticsearch/certs/
接下来,生成 PEM 格式的证书;
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --pem --ca-cert /etc/elasticsearch/certs/ca/ca.crt --ca-key /etc/elasticsearch/certs/ca/ca.key --days 3650 --out /etc/elasticsearch/certs/elk-cluster-cert.zip
解压文件;
unzip /etc/elasticsearch/certs/elk-cluster-cert.zip -d /etc/elasticsearch/certs/
将证书文件的所有权设置为 弹性搜索 用户。
chown -R elasticsearch: /etc/elasticsearch/certs/
启用 Elasticsearch 安全功能
Elasticsearch 的默认安装使用基本许可证,默认情况下禁用安全功能。
要启用 Elasticsearch 安全功能,请将值设置为 xpack.security.enabled
到 真的 通过在下面运行命令 每个节点 在 Elasticsearch 集群中。
echo "xpack.security.enabled: true" >> /etc/elasticsearch/elasticsearch.yml
同样,您需要启用 Elasticsearch 节点传输 SSL/TLS 设置;
echo "xpack.security.transport.ssl.enabled: true" >> /etc/elasticsearch/elasticsearch.yml
在 Elasticsearch 节点之间启用 HTTPS 连接
完成上述操作后,您需要指定上面生成的证书文件的路径。
如果你使用了 PKCS#12 格式, 在中输入以下几行 elasticsearch.yml
Elasticsearch 中每个节点上的文件。
xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.keystore.path: certs/elk-cluster-cert.p12 xpack.security.transport.ssl.truststore.path: certs/elk-cluster-cert.p12
如果您使用的是 PEM文件,然后输入下面的行 elasticsearch.yml
Elasticsearch 中每个节点上的文件。
xpack.security.transport.ssl.verification_mode: certificate xpack.security.transport.ssl.key: certs/instance/instance.key xpack.security.transport.ssl.certificate: certs/instance/instance.crt xpack.security.transport.ssl.certificate_authorities: certs/ca/ca.crt
将证书密码添加到 Elasticsearch Keystore
如果您使用密码保护您的证书,则需要将密码添加到 Elasticsearch 密钥库 在所有集群节点上。
如果您使用 PKCS#12 格式的证书,请运行以下命令将证书密码添加到密钥库:
/usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
/usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
如果您使用 PEM 格式的证书,请使用以下命令将证书密钥添加到密钥库:
/usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.secure_key_passphrase
重启 Elasticsearch
接下来,重新启动 Elasticsearch 服务以使更改生效;
systemctl restart elasticsearch
为内置弹性用户创建密码
当您启用基本的 Elastic 安全功能时,您需要为内置的 Elasticsearch 用户设置密码,尤其是 松紧带 和 kibana_system 用户使您能够运行 REST 查询。
举个例子,你想通过运行命令查看集群中的节点;
curl -XGET es-node-01.kifarunix-demo.com:9200/_cat/nodes?pretty --cacert /etc/elasticsearch/certs/elk-cluster-ca.p12
样本输出;
{ "error" : { "root_cause" : [ { "type" : "security_exception", "reason" : "missing authentication credentials for REST request [/_cat/nodes?pretty]", "header" : { "WWW-Authenticate" : "Basic realm="security" charset="UTF-8"" } } ], "type" : "security_exception", "reason" : "missing authentication credentials for REST request [/_cat/nodes?pretty]", "header" : { "WWW-Authenticate" : "Basic realm="security" charset="UTF-8"" } }, "status" : 401 }
密码可以随机生成,也可以使用手动设置 elasticsearch-setup-passwords
公用事业。
您只能在集群中的任何节点上运行密码创建一次.
为内置弹性用户自动生成随机密码,运行命令;
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
当命令运行时,确认该过程。
样本输出;
Changed password for user apm_system PASSWORD apm_system = eXvv3x7zs9O7qbYgMvLW Changed password for user kibana_system PASSWORD kibana_system = mLhDnalWA8yPpPuE0GFB Changed password for user kibana PASSWORD kibana = mLhDnalWA8yPpPuE0GFB Changed password for user logstash_system PASSWORD logstash_system = p4nAxkl1MGss7VU18TzT Changed password for user beats_system PASSWORD beats_system = L1Xm8xnUM7yKAfBAR3Nx Changed password for user remote_monitoring_user PASSWORD remote_monitoring_user = uNHAxTVX0LSXwnX54hzr Changed password for user elastic PASSWORD elastic = o8u1zQm93o5Py3huqqt1
Save 将密码放在一个您可以在需要时轻松检索的地方。
在大多数情况下,我们将使用密码 松紧带 和 kibana_system 用户。
- 松紧带 是弹性堆栈中的内置超级用户。
- kibana_system 是 Kibana 用来连接 Elasticsearch 并与之通信的用户。
例如,您现在可以在 curl 命令在上面运行。
curl -XGET es-node-01.kifarunix-demo.com:9200/_cat/nodes?pretty --cacert /etc/elasticsearch/certs/elk-cluster-ca.p12 -u elastic
Enter 上面生成的密码 松紧带 用户。
样本输出;
192.168.59.17 19 75 1 0.23 0.37 0.58 cdhilmrstw - es-node-01 192.168.59.18 53 73 0 0.01 0.26 0.62 cdhilmrstw * es-node-02 192.168.59.19 42 73 0 0.04 0.28 0.62 cdhilmrstw - es-node-03
在 Kibana 中配置安全性
Kibana 向 Elasticsearch 提出了一些内部请求。 由于您启用了 HTTPS Elasticsearch 身份验证,因此 Kibana 发出的此类请求也需要进行身份验证。 证书 kibana_system 在这种情况下可以使用 used 广告,因此您需要将它们添加到 Kibana。
用户凭据可以在 Kibana 配置文件中以纯文本形式定义, kibana.yml 或者可以添加到 Kibana 密钥库。
凭据是在上面生成的。
要在 Kibana 配置文件中添加凭据,请在 kibana.yml.
vim /etc/kibana/kibana.yml
elasticsearch.username: "kibana_system" elasticsearch.password: "mLhDnalWA8yPpPuE0GFB"
将凭据添加到密钥库而不是将它们放在 /etc/kibana/kibana.yml
, 创建 Kibana 密钥库并添加它们,如下所示;
chmod g+w /etc/kibana/
sudo -u kibana /usr/share/kibana/bin/kibana-keystore create
添加用户 kibana_system:
sudo -u kibana /usr/share/kibana/bin/kibana-keystore add elasticsearch.username
添加密码:
sudo -u kibana /usr/share/kibana/bin/kibana-keystore add elasticsearch.password
重启 Kibana 服务
接下来,重启 Kibana 服务;
systemctl restart kibana
您还可以查看我们关于如何启用 Kibana HTTPS 连接的指南。
启用 Kibana HTTPS 连接的快速方法
向 Kibana Web 界面进行身份验证
启用安全功能后,您将需要向有效用户进行身份验证,然后才能访问 Kibana Web 界面。
在此设置中,您可以使用上面创建的 Elastic 超级用户, 松紧带.
这标志着我们关于如何在 Elasticsearch 节点之间启用 HTTPS 连接的指南。
参考
在 Elasticsearch 中配置 TLS
将 Wazuh Manager 与 ELK Stack 集成
使用 ElastAlert 配置 ELK 堆栈警报
使用 ELK Stack 监控 Linux 系统指标