背景: 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