在 Elasticsearch 节点之间启用 HTTPS 连接

[ad_1]

在本教程中,您将学习如何在 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 系统指标

[ad_2]

Related Posts