ES集群配置用户密码
背景: ES集群原先没设置密码,存在数据泄露,被篡改风险。
1、集群设置证书
启用了x-pack模块,那么集群中的各节点之间通讯就必须安全认证。为了解决节点间通讯的认证问,我们需要制作证书。
不然直接生成密码的话, 会报Cause: Cluster state has not been recovered yet, cannot write to the [null]index
elasticsearch-certutil cert
用于生成elastic-certificates.p12 文件,
ps: 也有博客说要先生成证书elasticsearch-certutil ca , 我这边只生成elastic-certificates.p12。
elastic-certificates.p12文件放到config下面,同时传输到集群各节点config下面。
2、elasticsearch.yml设置
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
重启ES
Elasticsearch 有两个级别的通信,传输通信和 http 通信。 传输协议用于 Elasticsearch 节点之间的内部通信,http 协议用于客户端到 Elasticsearch 集群的通信。
个人认为上面只设置了内部传输协议直接的证书,所以只用cert生成 ,没有ca生成。
elasticsearch.yml设置里面也只设置了 xpack.security.transport.ssl, 没有设置xpack.security.http.ssl...
开始设置密码:
elasticsearch.yml设置
xpack.security.enabled: true
elasticsearch-setup-passwords auto
来自动生成密码
存储密码可能需要elasticsearch.keystore
用./elasticsearch-keystore create
来生成
生成好后配置到kibana等。
kibana上可以自定义设置角色和用户。设置只读用户read,写入用户write
后续可以用这些用户来操作ES了,
如
curl -XGET "http://localhost:9200/_search" -H 'Content-Type: application/json' -d'{"query": {"match_all": {}}}' -u read:read1234
curl -XPOST 'http://localhost:9200/teacher/_doc' -u apm_system:apm1234 -d '{"name":"lihua1","age":13}' -H 'Content-Type:application/json; charset=UTF-8'
参考:
https://blog.csdn.net/UbuntuTouch/article/details/120568128
https://blog.csdn.net/piaoranyuji/article/details/114264033
https://zhuanlan.zhihu.com/p/163337278