集群概览
主机名 | 系统 | 版本 |
---|---|---|
es01 | CentOS_7.6-aaarch64 | ElasticSearch-7.17.24 |
es02 | CentOS_7.6-aaarch64 | ElasticSearch-7.17.24 |
es03 | CentOS_7.6-aaarch64 | ElasticSearch-7.17.24 |
需求
将ElasticSearch集群从开源版本升级为具备安全认证功能的版本(如X-Pack),为集群配置SSL/TLS加密并启用安全认证。
实施过程
生成证书
创建 CA 证书
首先,创建一个CA(Certificate Authority)证书,用于签发集群中的节点证书。执行以下命令:
bash
su es
cd /data/elasticsearch-7.17.24/bin
./elasticsearch-certutil ca
执行过程中会提示:
Please enter the desired output file [elastic-stack-ca.p12]:
直接回车,生成默认文件名elastic-stack-ca.p12
。Enter password for elastic-stack-ca.p12:
密码可为空,直接回车。
生成的 elastic-stack-ca.p12
文件位于 Elasticsearch 根目录 /data/elasticsearch-7.17.24/
下。
生成节点证书
使用生成的 CA 证书为集群节点创建证书,执行以下命令:
bash
./elasticsearch-certutil cert --ca elastic-stack-ca.p12
执行过程中会提示:
Enter password for CA (elastic-stack-ca.p12):
输入之前CA文件的密码(如果无密码直接回车)。Please enter the desired output file [elastic-certificates.p12]:
回车以使用默认文件名elastic-certificates.p12
。Enter password for elastic-certificates.p12:
给新证书设置密码。
生成的 elastic-certificates.p12
文件位于相同目录下。
elastic-certificates.p12
文件生成时,我设置了密码,下面的配置将以带密码的形式给出,请注意。
拷贝证书到其他节点
将 elastic-stack-ca.p12
和 elastic-certificates.p12
先移动到/config
下,再复制到集群其他2个节点的 /data/elasticsearch-7.17.24/config/
下。
修改配置文件
在每个节点的 `elasticsearch.yml` 文件中,增加以下配置以启用 SSL/TLS 加密:
yaml
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
xpack.security.transport.ssl.keystore.secure_password: ${keystore:pass}
xpack.security.transport.ssl.truststore.secure_password: ${keystore:pass}
其中以下两行是elastic-certificates.p12
文件密码。
yaml
xpack.security.transport.ssl.keystore.secure_password: ${keystore:pass}
xpack.security.transport.ssl.truststore.secure_password: ${keystore:pass}
添加加密条目
以更加安全的方式管理密码,而不是直接将密码以明文形式放入 elasticsearch.yml
文件中,建议使用 elasticsearch-keystore
工具来加密存储密码。这种方式可以防止在配置文件中暴露敏感信息。
使用以下命令为 keystore 和 truststore 添加elastic-certificates.p12
文件加密密码条目:
plain
bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
执行后,系统会提示你输入 keystore 的密码(如 1QAZ2wsx3edc
)。
接着,为 truststore 密码添加加密条目:
plain
bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
同样,系统会提示你输入 truststore 的密码。
重启 Elasticsearch 服务
将原有的 Elasticsearch 进程关闭并重启:
bash
kill -9 <elasticsearch_pid>
./elasticsearch -d
此时重启后,再发送请求会让你输入密码,下面我们进行密码设置。
设置密码
在集群中的某台节点上为预定义的用户设置密码:
bash
cd /data/elasticsearch-7.17.24/bin
./elasticsearch-setup-passwords interactive
执行过程中会提示为以下用户设置密码:
- elastic
- apm_system
- kibana
- logstash_system
- beats_system
- remote_monitoring_user
你可以为每个用户设置自己的密码,或者全部设置为相同密码。
验证配置
使用设置的密码登录 Elasticsearch,验证集群状态:
bash
curl -u elastic:<password> 'http://192.168.0.111:19200/_cat/nodes?v'
curl -u elastic:<password> 'http://192.168.0.112:19200/_cat/nodes?v'
curl -u elastic:<password> 'http://192.168.0.113:19200/_cat/nodes?v'
curl -u elastic:<password> 'http://192.168.0.111:19200/_cat/health?v'
通过以上步骤,已成功为 Elasticsearch 集群配置了 SSL/TLS 加密与用户密码认证,在浏览器进入时会提示你输入账号和密码。