一、前言
在 6.8 之前免费版本并不包含安全认证功能,之后版本有开放一些基础认证功能;为了防止各种事故,一般都会设置es集群的访问密码;但是在我尝试设置访问密码的时候发现,设置访问密码的前提必须要设置集群证书,不然es启动报错。
关于设置证书的作用,简单来说就是在集群内定各个es节点都必须持有相同的证书,如果某个es的恶意节点想加入你的集群,那么它也必须有要相同的证书,这就可以防止别人恶意创建节点加入你的集群了。
本例子使用elasticsearch v7.2.0为例
二、具体步骤
1、编辑elasticsearch.yml文件(每个节点都要配置)
开启x-pack功能,并指定证书位置
添加内容如下:
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
2、生成 TLS 和身份验证
单独使用一个节点生成证书;
证书会生成在config目录下,证书文件名为 elastic-certificates.p12;
# cd到elasticsearch目录下的bin目录执行
./elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""
执行完上面命令以后就可以在elasticsearch目录下的config目录里看到多了一个elastic-certificates.p12文件;
把elastic-certificates.p12这个文件复制到其他节点下,也是elasticsearch目录下的config目录里即可;
复制方法这里就不多说了,有各种不同的方式;
3、重启es集群
全部节点都要重启一遍,因为elasticsearch.yml有了新的配置了;
重启这里也不多介绍了;
4、创建 Elasticsearch 集群密码
在其中一个节点设置密码即可,设置完之后,数据会自动同步到其他节点。
4-1、手动设置访问密码
# cd到elasticsearch目录下的bin目录执行
./elasticsearch-setup-passwords interactive
执行后如下图所示,先输入y,然后需要给es预设的账号依次设置账号密码;
4-2、自动设置访问密码
# cd到elasticsearch目录下的bin目录执行
./elasticsearch-setup-passwords auto
执行后如下图所示,对应账号的密码会自动生成,一定要拷贝下来!!!!
5、验证访问密码配置
5-1、在没有密码的情况下访问
经过上面的配置以后,如果没有带密码访问,会提示安全认证错误了;
curl http://localhost:9200
# 返回结果
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm="security" charset="UTF-8""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm="security" charset="UTF-8""}},"status":401}
5-2、使用访问密码
# 附带账号密码的访问
curl --user elastic:elastic http://localhost:9200
# 单独再输入密码的访问方式
curl --user elastic http://localhost:9200
正常返回结果:
6、脚本方式修改访问密码
在某些场景下,必须使用脚本执行,不能手动的话;上面手动的方式好难实现脚本自动化;
于是这里有个投机取巧的方法;
# 在其中一个节点执行就可以了
# cd到elasticsearch目录下的bin目录执行
# 创建一个超级用户
sh elasticsearch-users useradd copriwolf -p sayHi2Elastic -r superuser
# 使用这个超级用户修改elastic用户的密码
curl -u copriwolf:sayHi2Elastic -XPUT "http://localhost:9200/_xpack/security/user/elastic/_password?pretty" -H 'Content-Type: application/json' -d '{"password": "elastic"}'
# 其他要修改的账号同理
# 把刚创建的超级用户删除掉
sh elasticsearch-users userdel copriwolf
参考文章:
https://blog.csdn.net/piaoranyuji/article/details/114264033
https://blog.csdn.net/qq_38011415/article/details/111499840
https://0ne.store/2019/03/13/ELK-change-password-with-non-interactive-way/
https://blog.51cto.com/u_13740724/2438072(这里有kibana和logstash的访问密码配置示例)