Elasticsearch 集群加密认证实施案例
实施步骤详解
1. 生成证书文件
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --days 3650 -out /etc/elasticsearch/config/elastic-certificates.p12 -pass ""
--days 3650:设置证书有效期为10年-pass "":设置空密码(生产环境建议设置强密码)- 系统提示创建不存在的目录时选择
Y
2. 证书文件权限设置
ll /etc/elasticsearch/config/
chmod +r /etc/elasticsearch/config/elastic-certificates.p12
- 初始权限为
-rw-------(仅root可读) - 修改为
-rw-r--r--(所有用户可读)
3. 同步证书到集群其他节点
scp -r /etc/elasticsearch/config/ 10.0.0.92:/etc/elasticsearch/
scp -r /etc/elasticsearch/config/ 10.0.0.93:/etc/elasticsearch/
- 确保所有节点证书文件路径一致
- 生产环境建议使用更安全的文件传输方式
4. 修改ES配置文件
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: config/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: config/elastic-certificates.p12
xpack.security.enabled:启用安全功能verification_mode: certificate:验证证书但不验证主机名
5. 同步配置文件到集群
scp /etc/elasticsearch/elasticsearch.yml 10.0.0.92:/etc/elasticsearch/
scp /etc/elasticsearch/elasticsearch.yml 10.0.0.93:/etc/elasticsearch/
6. 重启所有节点ES服务
systemctl restart elasticsearch.service
7. 验证端口监听
ss -ntl | grep "9[2|3]00"
- 9200:HTTP REST API端口
- 9300:节点间通信端口
8. 测试访问验证
curl 10.0.0.93:9200
- 预期返回401状态码,表示认证已生效
9. 生成系统用户密码
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
生成的用户包括:
elastic:超级用户(相当于root)kibana_system:Kibana服务账号logstash_system:Logstash服务账号beats_system:Beats服务账号apm_system:APM服务账号remote_monitoring_user:监控用户
10. 使用密码访问验证
curl -u elastic:密码 10.0.0.93:9200/_cat/nodes
- 成功返回节点信息表示认证配置完成
注意事项
- 备份重要:操作前务必创建集群快照
- 密码安全:
elastic用户密码相当于root权限- 建议将生成的密码保存到安全位置
- 证书安全:
- 生产环境建议为证书设置密码
- 定期轮换证书(默认10年有效期过长)
- 服务配置:
- 需要相应更新Kibana、Logstash等组件的配置
- Kibana配置示例:
elasticsearch.username: "kibana_system" elasticsearch.password: "密码"
- 权限控制:
- 生产环境应配置更精细的RBAC权限
- 避免长期使用elastic用户进行操作
后续建议
- 配置TLS加密通信(HTTPS)
- 设置IP白名单限制访问
- 定期轮换密码和证书
- 配置审计日志记录安全事件
- 为不同服务创建专用角色和用户
此方案实现了Elasticsearch集群的基础安全认证,满足了基本的安全需求。根据实际安全要求,可以进一步强化安全配置。
浙公网安备 33010602011771号