6、ElasticSearch添加密码验证机制(规避了诸多小坑的操作步骤)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6、ElasticSearch添加密码验证机制(规避了诸多小坑的操作步骤)相关的知识,希望对你有一定的参考价值。

参考技术A

ElasticSearch版本7.6.2

1、验证当前版本是否支持安全功能
2、是否打开安全设置
3、基于FIPS的一些验证
4、配置节点间通讯传输的安全性
5、配置内置用户的密码/
6、选择用户验证用户身份的领域类型
7、设置角色和用户以控制对Elasticsearch的访问
8、启用审核以跟踪与Elasticsearch集群的尝试和成功的交互

1、验证当前版本是否支持安全功能
2、是否打开安全设置
3、配置节点间通讯传输的安全性
4、设置ssl的keystore、truststore的密码
5、重启ES集群是配置生效
6、配置内置用户的密码
7、修改kibana的配置

具体步骤:

Elasticsearch的安全策略需要X-Pack插件的支持,不过对于7.X以上版本X-Pack已经内置,所以不需要额外的操作。

xpack.security.enabled控制安全配置的开启,在默认情况下此参数被设置为false。要想开启安全策略需要在所有集群中讲此参数进行设置

仅仅开启安全设置再启动服务的时候会抛出错误
这是因为传输网络层用于集群中节点之间的内部通信。启用安全功能后,必须使用TLS来确保节点之间的通信已加密。为节点间通讯配置安全策略需要两个步骤:

在Elasticsearch集群中验证证书真实性的推荐方法是信任签署证书的证书颁发机构(CA)。这样,将节点添加到群集后,它们只需要使用由同一CA签名的证书,即可自动允许该节点加入群集。另外证书中可以包含与节点的IP地址和DNS名称相对应的主题备用名称,以便可以执行主机名验证。
* 为Elasticsearch集群创建发证机构 ,使用下面的步骤为集群创建一个CA授权证书

整个创建过程是这样的。在输入命令后控制台会输出此命令的信息描述,然后你需要先执行①的操作然后执行②的操作

①:此位置设置文档输出地址和名称。默认名称为elastic-stack-ca.p12。这个文件是PKCS#12密钥存储库,它包含您的CA的公共证书和用于为每个节点签署证书的私有密钥。
(也可以无需输入,直接回车,则会再当前目录,elasticsearch-7.6.2目录下, 和bin同级目录,生成文件elastic-certificates.p12,
然后在elasticsearch-7.6.2/config目录下,新建一个文件夹certs, 把文件elastic-certificates.p12复制到certs文件夹下即可。)
②:此位置设置证书的密码。计划将来向集群添加更多的节点,请记住其密码。

为Elasticsearch集群中的节点生成证书
使用下面的名称生成集群使用的生成节点证书。elastic-stack-ca.p12为上一步生成CA证书。

整个创建过程是这样的,类似之前的内容,在输入命令后控制台会输出此命令的信息描述,
输入elastic-stack-ca.p12的密码后,在elasticsearch-7.6.2文件夹下执行命令:

然后你需要先执行①的操作然后执行②的操作,最后执行③的操作

① : 此位置需要输入elastic-stack-ca.p12 CA授权证书的密码。
② : 此位置为需要输出证书位置。
③ : 此位置为证书的密码。使用空密码可以直接回车结束。
默认情况下,elasticsearch-certutil生成的证书中没有主机名信息。这意味着可以为集群中的任意节点使用此证书,但是必须关闭主机名验证。

将elastic-certificates.p12文件(只需要此文件)复制到每个节点上的Elasticsearch配置目录中的一个目录中。比如我是放到了每个节点的config/certs目录下。
然后修改每个节点的elasticsearch.yml配置。添加下面的参数:

xpack.security.transport.ssl.verification_mode

如果在elasticsearch-certutil cert命令中使用—dns或—ip选项,并且希望启用严格的主机名检查,此参数需要设置为full。而之前的例子证书中并没有输入ip以及dns等信息,所以我们没有使用严格的主机检查。

如果你在创建证书时没有输入密码,则这个时候重启集群后,如果elastic用户没有密码,则使用默认的引导密码。引导密码是一个临时密码,它允许您运行设置所有内置用户密码的工具。
如果你在创建证书时输入了密码,那可以通过下面的方法设置:

安全重启步骤:
1、暂停数据写入程序
2、关闭集群shard allocation,手动执行POST /_flush/synced
3、查看进程和杀死进程
4、重启节点
5、.确认进程是否启动,
6、并重新开启集群shard allocation
7、等待recovery完成,集群health status变成green

将写入es的程序暂停

curl -XPUT ‘ http://10.3.14.154:9200/_cluster/settings?pretty ’ -d ‘“transient”:“cluster.routing.allocation.disable_allocation”: true’

cd ~/bin
./elasticsearch -d

ps -ef | grep elasticsearch

curl -XPUT ‘ http://10.3.14.155:9200/_cluster/settings?pretty ’ -d ‘“transient”:“cluster.routing.allocation.disable_allocation”: false’

“error” : “Content-Type header [application/x-www-form-urlencoded] is not supported”,
“status” : 406

curl 10.3.14.154:9200/_cluster/health?pretty

重启完成后,我们需要为所有的内置用户设置密码。设置密码使用命令:

上面过程中我们需要设置多个默认用户的信息,每个内置用户负责不同的内容。
为以下用户分别设置密码:
elastic
kibana
logstash_system
beats_system
apm_system
remote_monitoring_user

截止到目前Elasticsearch的部分已经修改完毕,下面修改kibana配置以便于让其和Elasticsearch完成连接。
修改配置文件
修改kibana的配置文件config/kibana.yml在配置文件中添加下面内容:

kibana 使用ps -ef|grep kibana是查不到进程的,因为其实运行在node里面。但是我们也不能关闭所有node里面的软件,所以我们需要查询kibana监听端口5601的进程。
使用下面命令关闭kibana:

然后重启Kibana

此时访问kibana( http://localhost:5601 )会提示需要输入账号密码。
注意此时需要输入的是elasticsearch的用户密码。
到此为止ES最基础的安全策略已经添加进来了。

参考文章: https://blog.csdn.net/qq330983778/article/details/103537252
https://www.tianmingxing.com/2019/06/20/%E5%9C%A8ElasticSearch6.8%E5%8F%8A%E4%BB%A5%E4%B8%8A%E7%89%88%E6%9C%AC%E5%BC%80%E5%90%AF%E5%AE%89%E5%85%A8%E8%AE%A4%E8%AF%81%E5%8A%9F%E8%83%BD/

以上是关于6、ElasticSearch添加密码验证机制(规避了诸多小坑的操作步骤)的主要内容,如果未能解决你的问题,请参考以下文章

Helm安装带验证的ElasticSearch 6.x 7.x 集群

Elasticsearch设置密码

Elasticsearch、Logstash、Kibana手把手教你添加密码设置

ELK日志系统+x-pack安全验证

ElasticsearchLogstashKibana手把手教你添加密码设置

是否需要从Logstash向HTTPS输出到Elasticsearch购买“xpack”?