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

posted @ 2021-12-08 21:04  clq.lib  阅读(2794)  评论(0编辑  收藏  举报