本文主要是结合ES集群搭建时使用,并且适用于ES7.x以上版本
背景及安全策略方案对比
ES 7.x以下版本默认几乎没有任何安全策略,如果集群IP、端口被暴露,在可访问的情况下任何用户都可以对索引进行管理以及数据的增删改查等,基于此需要考虑设置一定的安全策略, 目前常用几种方式如下 :
类别 | 优点 | 缺点 | 建议 |
nginx | 对外屏蔽了ES集群的真实IP和端口,配置也较简单 | 只能做一些网络访问安全上面的防护,不能对索引及字段进行精确控制 | 选择X-pack 经验证在免费情况下X-Pack能满足基本诉求,对应用中使用影响也比较小 |
Search Guard | 开源免费,基于RBAC权限模型设计,能够细粒度进行管控 | 配置复杂,需要安装证书及业务应用代码改造 | |
X-Pack | 官方提供,基于RBAC权限模型设计,能够细粒度进行管控,与client api及es集群兼容性较好 | 配置稍复杂,基础部分功能免费 |
X-pack安全策略开启及集群配置
第一步:在ES的根目录生成CA证书
bin/elasticsearch-certutil ca
步骤执行完会在elasticsearch根目录生成:elastic-stack-ca.p12
注意:
1、提示输入输出文件,直接回车默认即可
2、提示输入密码,务必输入,第二步要用到,如果都是空密码后面启动es时会出password incorrect错误
第二步: 使用第一步生成的证书,产生p12密钥
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
步骤执行完会在elasticsearch根目录生成:elastic-certificates.p12
注意:这一步共有三个交互
-
Enter password for CA (elastic-stack-ca.p12)
输入第一步中设置的的密码:
-
Please enter the desired output file [elastic-certificates.p12]:
不用输入文件,直接回车默认即可
-
Enter password for elastic-certificates.p12 :
不要输入密码,直接回车,否则还会出现es启动时报password incorrect错误
第三步: 配置证书
1、将以上两个文件拷贝到config/certs目录,没有则新创建
2、配置elasticsearch.yml
xpack.security.enabled: true xpack.license.self_generated.type: basic
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
注意:
-
第一步和第二步整个集群只须执行一次,第一个节点配置完后把证书copy到其它节点共用即可
-
elasticsearch.yml同样集群中每个es节点都需要配置
第四步:重启ES验证
重启ES看是否能正常启动,是否有ssl相关的错误信息,若无则一般说明配置没有问题
重启成功再访问ES时则会提示输入用户名密码,此时说明es安全已经启用,此时由于没有设置密码是无法登录的,接下来按第5步进行操作
注意:
先配置单个节点,重启ES看是否正常,如果正常其它节点再进行同样的操作