基于 TLS 实现 Elasticsearch 集群加密通讯
目录
▪ 用途
▪ ES 节点信息
▪ Step1. 关闭服务
▪ Step2. 创建 CA 证书
▪ Step3. 创建 CERT 证书
▪ Step4. 创建密钥库
▪ Step5. 删除 CA 证书
▪ Step6. 修改 Elasticsearch.YAML 配置
▪ Step7. 启动服务
▪ 附. 参考文档
用途
前情提要:
在第一篇《EFK 教程 - 快速入门指南》中, 阐述了 EFK 的安装部署, 其中 Elasticsearch 的架构为三节点, 即 master,ingest,data 角色同时部署在三台服务器上.
在第二篇《EFK 教程 - Elasticsearch 高性能高可用架构》中, 阐述了 EFK 的 data/ingest/master 角色的用途及分别部署三节点, 在实现性能最大化的同时保障高可用.
在第三篇《EFK 教程 (3) - Elasticsearch 冷热数据分离》中, 阐述了 ES 多实例部署, 将不同热度的数据存在不同的磁盘上, 实现了数据冷热分离, 资源合理分配.
前三篇文章, ES 集群之间数据交互都是明文交互, 而在本文中, 为 ES 集群创建 CA,CERT 证书, 实现 Elasticsearch 集群之间数据通过 TLS 进行双向加密交互.
ES 节点信息
由于本文是基于上一篇文章《EFK 教程 (3) - Elasticsearch 冷热数据分离》为环境进行阐述, 因此节点信息和上一篇一致:
Step1. 关闭服务
首先, 需要停止所有 Elasticsearch,kibana,filebeat 服务, 待证书配置完成后再启动
Step2. 创建 CA 证书
1⃣ 找任一一台 Elasticsearch 节点服务器操作即可
- cd /opt/Elasticsearch/
- # --days: 表示有效期多久
- sudo -u Elasticsearch ./bin/Elasticsearch-certutil ca --days 3660
2⃣ 务必将生成的 CA 证书, 传到安全地方永久存储, 因为后期若需要新增 ES 节点, 还会用到该证书
3⃣ 请将 elastic-stack-ca.p12 证书传到所有 ES 实例服务器上
Step3. 创建 CERT 证书
按上面表格进入相对应的目录创建 CERT 证书
- # 在 ES 目录中建立证书目录及给予 Elasticsearch 权限
- mkdir -p config/certs;chown Elasticsearch.Elasticsearch config/certs -R
- # 每一个实例一个证书
- # --ca CA 证书的文件名, 必选参数
- # --dns 服务器名, 多服务器名用逗号隔开, 可选参数
- # --ip 服务器 IP, 多 IP 用逗号隔开, 可选参数
- # --out 输出到哪里, 可选参数
- # --days 有效期多久, 可选参数
sudo -u Elasticsearch ./bin/Elasticsearch-certutil cert --ca elastic-stack-ca.p12 --ip ${本机 IP},127.0.0.1 --out config/certs/cert.p12 --days 3660
# 例如 Elasticsearch-master-1(192.168.1.31) 执行命令: sudo -u Elasticsearch ./bin/Elasticsearch-certutil cert --ca elastic-stack-ca.p12 --ip 192.168.1.31,127.0.0.1 --out config/certs/cert.p12 --days 3660
如果想批量生成 CERT 证书, 请自行查阅附录链接, 不过批量生成有时会碰到生成的证书不可用, 因此建议一台一台生成
Step4. 创建密钥库
按上面表格进入相对应的目录创建密钥库
- # 每一个实例都要操作
- # 创建密钥库
- sudo -u Elasticsearch ./bin/Elasticsearch-keystore create
- # PKCS#12 文件的密码
- sudo -u Elasticsearch ./bin/Elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
- # 信任库的密码
- sudo -u Elasticsearch ./bin/Elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
确认 keystore,truststore 已录入至密钥库
sudo -u Elasticsearch ./bin/Elasticsearch-keystore list
Step5. 删除 CA 证书
由于上面创建的 elastic-stack-ca.p12 含有私钥, 因此为了安全, 建议将该文件删除 (请务必提前备份好, 因为后期增加节点还会用到)
按上面表格进入相对应的目录删除 CA 证书
rm -f elastic-stack-ca.p12
Step6. 修改 Elasticsearch.YAML 配置
按上面表格对应的实例配置 conf 目录下 Elasticsearch.YAML
- # 在所有实例上加上以下配置
- # 开启 transport.ssl 认证
- xpack.security.transport.ssl.enabled: true
- # xpack 认证方式 full 为主机或 IP 认证及证书认证, certificates 为证书认证, 不对主机和 IP 认证, 默认为 full
- xpack.security.transport.ssl.verification_mode: full
- # xpack 包含私钥和证书的 PKCS#12 文件的路径
- xpack.security.transport.ssl.keystore.path: certs/cert.p12
- # xpack 包含要信任的证书的 PKCS#12 文件的路径
- xpack.security.transport.ssl.truststore.path: certs/cert.p12
Step7. 启动服务
- # 开启所有 ES 实例
- sudo -u Elasticsearch ./bin/Elasticsearch
- # 开启 filebeat
- /opt/filebeat/filebeat -e -c /opt/filebeat/filebeat.YAML -d "publish"
- # 开启 kibana
- sudo -u kibana /opt/kibana/bin/kibana -c /opt/kibana/config/kibana.YAML
附. 参考文档
- https://www.elastic.co/guide/en/elasticsearch/reference/current/configuring-tls.html
- https://www.elastic.co/guide/en/elasticsearch/reference/7.3/certutil.html
来源: https://www.cnblogs.com/fzxiaomange/p/efk-tls.html