Elasticsearch集群配置TLS加密通信及身份验证

官方宣布从6.8和7.1开始,免费提供多项安全功能。其中包括tls加密通信,基于角色访问控制等功能。
可以使用企业CA证书来完成这一步骤,但是一般情况下,我们可以通过elasticsearch自带的elasticsearch-certutil的命令生成证书。然后各节点通过该证书可以进行安全通信。
为节点创建证书
TLS:TLS协议要求Trusted Certificate Authority(CA)签发的X.509的证书
证书认证的不同级别

  1. Certificate:节点加入集群需要使用想用CA签发的证书
  2. Full Verfication:节点加入集群需要使用想用CA签发的证书,还需要验证Hostname或IP地址
  3. No Verfication:任何节点都可以加入,开发环境用于诊断目的 先签发CA证书,然后基于这个CA证书,签发每一个节点的证书

核心步骤:

1 生成证书

搭建好了es集群,先拿第一个节点来操作,进入elasticsearch目录,然后执行以下命令。

  1. 文件根目录下执行
bin/elasticsearch-certutil ca
  • 依次输入回车(文件使用默认名),密码

  • 之后执行bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

  • 依次输入上一个步骤的密码。回车(文件使用默认名),密码(建议与上一步密码相同)

  • 执行命令

bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password

并输入第一步输入的密码

  • .执行
bin/elasticsearch-keystore add
    xpack.security.transport.ssl.truststore.secure_password

并输入第一步输入的密码

  • 将生成的elastic-certificates.p12elastic-stack-ca.p12文件mvconfig目录下,并连同elasticsearch.keystore
    文件 scp到其他节点的config目录中。

上面命令执行成功后,会在config/文件夹下生成elastic-certificates.p12证书

注意:在本机生成的证书需要更改证书权限:chmod 644 elastic-certificates.p12 (若是使用运行es程序的用户创建证书,则不用更改证书权限)
默认证书权限是600,运行elasticsearch程序的用户没有权限读取,会造成elasticsearch启动失败

编辑配置文件,开启证书访问

编辑配置文件/etc/elasticsearch/elasticsearch.yml,(注意证书路径,默认config里)

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

将上面步骤生成的elastic-certificates.p12证书复制到另外两个es节点上对应的config文件夹中,同时将配置选项也都复制到对应节点的elasticsearch.yml文件里

设置密码

启动三个节点,待节点启动完毕之后,进入第一个节点elasticsearch目录,执行以下命令,进行密码设置:

bin/elasticsearch-setup-passwords interactive
输出结果

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y # 输入y

直接输入密码,然后再重复一遍密码,中括号里是账号

Enter password for [elastic]: 
Reenter password for [elastic]: 
Enter password for [apm_system]: 
Reenter password for [apm_system]: 
Enter password for [kibana]: 
Reenter password for [kibana]: 
Enter password for [logstash_system]: 
Reenter password for [logstash_system]: 
Enter password for [beats_system]: 
Reenter password for [beats_system]: 
Enter password for [remote_monitoring_user]: 
Reenter password for [remote_monitoring_user]: 
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]
注意: docker-compose 如果有请求路径错误问题 可以执行 bin/elasticsearch-setup-passwords interactive -u 'http://容器:9200'

验证集群设置的账号和密码

打开浏览器访问这个地址,出现需要输入账号密码的界面证明设置成功,集群的一个节点

http://ip:9200/_security/_authenticate?pretty

你可能感兴趣的:(Elasticsearch)