配置tls加密通信及身份验证,主要目的是为了确保集群数据安全。在es早期版本,安全认证相关功能都属于商业付费服务,一般普通公司如果集群部署在内网,基本上就忽略了这些安全认证,当然也可以通过Nginx反向代理来进行控制。现在,官方宣布从6.8和7.1开始,免费提供很多项安全功能。其中包括tls加密通信,基于角色访问控制(RBAC)等功能。这对很多使用ELK技术栈的公司来说是一个福利。
一、配置 TLS 和身份验证
1、我们要做的第一件事是生成证书,通过这些证书便能允许节点安全地通信。但是一般情况下,我们可以通过elasticsearch自带的elasticsearch-certutil的命令生成证书。然后各节点通过该证书可以进行安全通信。
在搭建好es集群的条件下,生成证书:
cd /usr/local/elasticsearch
bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass ""
2、上面命令执行成功后,会在config文件夹下生成elastic-certificates.p12证书。然后编辑配置文件elasticsearch.yml,将以下内容添加到配置文件末尾:
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
3、将上面步骤生成的elastic-certificates.p12证书复制到另外两个node02与node03节点上对应的config文件夹中并授权,同时将上面配置选项也都复制到对应节点的elasticsearch.yml文件里。
chown -R elasticsearch. /usr/local/elasticsearch/config/elastic-certificates.p12
4、现在三台node节点上都有了证书,同时elasticsearch.yml文件中也都增加了安全配置项。启动三个节点。待节点启动完毕之后,进入其中一个节点elasticsearch目录,执行以下命令,进行密码设置:
bin/elasticsearch-setup-passwords interactive
5、由于现在Elasticsearch设置了密码,所以logstash过滤数据之后往es集群中推送的时候以及将数据展示到kibana时,需要添加权限认证。增加es集群的用户及密码:
logstash:
user => "elastic"
password => "password"
kibana:
elasticsearch.username: "elastic"
elasticsearch.password: "password"
6、elasticsearch-head插件此时再去访问有安全认证的es集群时http://node01:9100,会发现无法进行查看,打开控制台可以看到报错:401 unauthorized,head无法登陆的问题:
在/usr/local/elasticsearch/config/elasticsearch.yml中添加如下三行配置:
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
修改三台es节点,然后重新启动,再次url+认证信息方式可以正常访问es集群。
http://ip:9100/?auth_user=elastic&auth_password=passwd
二、在 Kibana 中配置基于角色的访问控制 (RBAC)
由于ELK日志管理属于基础设施平台,所以接入多个应用系统是正常现象,如果接入多个系统的索引文件没有进行权限划分,那么很大程度会出现索引文件误处理现象,为了避免这种情况发生,多用户及权限设置必不可少。
如果是像这个例子中的全新安装情况,Kibana 将询问您是否希望加载一些样本数据。
现在我们就创建角色。找到并单击 roles(角色)选项。
单击 Create role(创建角色)。
针对不同用户只能查看各自系统的索引文件。第一步需要创建角色,将某个角色和索引文件进行绑定。
- 1、创建第一个应用系统test01 角色,选择对应的索引文件,分配对应的权限read
- 2、 创建第二个系统test02角色,选择对应的索引文件,分配对应的权限read
- 3、创建两个用户test01/test01(用户名/密码),test02/test02, 然后分配对应系统角色和kibana_user角色
- 5、用户创建完后,可以进行登录验证。
登录test01用户,只能查询test01的索引日志。
虽然test01用户可以看到其他的索引index-pattern, 但是无法查询到数据。所以保证了其他系统索引文件的安全。
登录test02用户,只能查询test02 索引日志,其他索引无法查询到数据。
test02用户选择其他未分配权限的索引,无法查询到数据。
到此,系统多用户安全认证日志平台搭建完成!