欢迎光临
我们一直在努力

ElasticSearch 安全配置

我们知道 ElasticSearch 安全是非常重要的。没有这个我们的数据可以被任何的人进行访问,串改,删除。Elastic Stack 的安全是由 x-pack 所提供的。在 Elastic Stack 7.0 版本之前,这个是商用的版本,需要进行安装,并购买。从 Elastic Stack 7.0 之后,x-pack 都已经在发布版中,所以不需要进行安装。我们只需要进行配置就可以了。


一、部署 ElasticSearch 集群

首先,参考《Docker 部署 ElasticSearch》将ES集群跑起来,之后我们开始增加安全配置


二、ElasticSearch 集群节点间安全配置

首先找一个容器,进入到容器中,例如:es-node1

docker exec -it es-node1 /bin/bash

运行一下命令,生成 elastic-certificates.p12 文件

### 运行命令,生成文件 elastic-certificates.p12
bin/elasticsearch-certutil ca -out elastic-certificates.p12 -pass ""

### 查看生成的文件
ll | grep "p12"
-rw-------.  1 root          root   2672 Jun  1 16:32 elastic-certificates.p12

退出容器,并将容器内的文件Copy到宿主机

# 从容器中Copy出来,直接放在 es-node1/config 中
docker cp es-node1:/usr/share/elasticsearch/elastic-certificates.p12 /houder/elasticsearch/node1/config/

# 将文件分发给另外两个节点
cp elasticsearch/node1/config/elastic-certificates.p12 elasticsearch/node2/config/
cp elasticsearch/node1/config/elastic-certificates.p12 elasticsearch/node3/config/

## 执行授权操作
chmod -R 777 elasticsearch/node{1..3}/config/elastic-certificates.p12

编辑 三个节点的 elasticsearch.yml 配置,并添加如下配置项:

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 映射

-v /houder/elasticsearch/nodeXXX/config/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12 \

注意调整 nodeXXX 指向具体节点目录 node1, node2, node3

验证容器启动成功:http://192.168.0.31:19200/_cat/nodes?pretty 

注释掉 node3 的 xpack 配置,重启容器后无法上线:


三、为内置用户配置密码

通过上一步配置,可以保证集群间的安全认证配置,但是 ElasticSearch 中的用户还是没有密码的,例如,我们配置上节点链接,则可以直接访问:

首先我们要在 elasticsearch.yml 中为每一个节点增加一个配置,来保证启用 xpack.security

xpack.security.enabled: true

重启集群节点后,进入到其中一个容器中,我们可以使用如下命令来创建密码:

./bin/elasticsearch-setup-passwords interactive[auto]

# interactive:交互式用户手动设定密码
# auto:自动创建并显示密码

注意:创建密码前保证需要保证集群每个节点都可用,在创建密码时会自动发送给其他集群节点

root@ea4e265dcaf5:/usr/share/elasticsearch# bin/elasticsearch-setup-passwords auto 
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y    # 这里需要确认,输入y


Changed password for user apm_system
PASSWORD apm_system = 8fRPljcNgnnxYjLA9VZC

Changed password for user kibana_system
PASSWORD kibana_system = qvxy771goB9Zr7qirjzS

Changed password for user kibana
PASSWORD kibana = qvxy771goB9Zr7qirjzS

Changed password for user logstash_system
PASSWORD logstash_system = Mu07F38tDQLC8pd7i7jV

Changed password for user beats_system
PASSWORD beats_system = YLgWRCjspeIZAWZ36khY

Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = EUZKfKL5b20AwvcRu8c6

Changed password for user elastic
PASSWORD elastic = 0cXv3ngDjM3DsSenVHzf

我们还是通过这个链接来验证:http://192.168.0.31:19200/_cat/nodes?pretty ,提示我们输入用户名和密码,我们输入:elastic 0cXv3ngDjM3DsSenVHzf


四、改用https协议

经过上一步调整后,我们需要配置用户名和密码才可以正确访问,但是访问时还是用的http协议

这里我们调整为https协议,只需要在 elasticsearch.yml 中增加以下配置:

xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: elastic-certificates.p12
xpack.security.http.ssl.truststore.path: elastic-certificates.p12

启用后通过https访问效果如下:

通过http将无法访问:

赞(0)
LiuYD's 个人技术分享 » ElasticSearch 安全配置

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址