Elastic Stack之安全认证
安装完Elastic Stack打开Kibana网页端没有账号认证就能直接访问。之前的做法是使用Apache的密码认证进行安全配置,然后通过访问Nginx转发kibana服务器地址。从 7.1.0 版本开始, Elastic Stack安全功能可以实现账号认证。用户能够对网络流量进行加密、创建和管理用户、定义能够保护索引和集群级别访问权限的角色, Kibana 提供访问保护。
配置Elasticsearch
在 Elasticsearch 主节点上配置 TLS
首先关闭相关进程以免造成异常
[root@cncs ~]# systemctl stop elasticsearch
生成自签名证书
在 Elasticsearch 主节点生成证书,文件名为elastic-stack-ca.p12。
[root@cncs ~]# cd /usr/share/elasticsearch
#生成CA,包含CA私钥和证书,默认名称elastic-stack-ca.p12
[root@cncs elasticsearch]# bin/elasticsearch-certutil ca
#敲2次回车
#颁发一个实例证书,默认名称elastic-certificates.p12
[root@cncs elasticsearch]# bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
#敲3次回车
拷贝证书到Elasticsearch配置目录
[root@cncs ~]# mkdir /etc/elasticsearch/certs
[root@cncs ~]# cp /usr/share/elasticsearch/elastic-certificates.p12 /etc/elasticsearch/certs
[root@cncs ~]# chown -R elasticsearch:elasticsearch /etc/elasticsearch/certs
如有多个Elasticsearch节点,每个节点复制一份。
开启Elasticsearch Security特性
Security特性默认是被禁用的,打开文件 config/elasticsearch.yaml。将下列代码行粘贴到文件末尾,开启Elasticsearch Security特性,加密内部通信流量与http流量。
[root@cncs ~]# vim /etc/elasticsearch/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: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
如有多个Elasticsearch节点,每个节点都需配置。
为内置用户创建密码
启动 Elasticsearch
[root@cncs ~]# systemctl start elasticsearch
Elasticsearch默认的内置用户有kibana_system、kibana、elastic、beats_system等。
- kibana_system用户用于Kibana连接Elasticsearch认证
- kibana用户用于Elasticsearch集群认证
- beats_system用户用于beats连接Elasticsearch认证
- elastic用户用于Kibana网页端登录认证
通过运行 elasticsearch-setup-passwords 命令为内置用户设置密码。auto参数是自动生成随机密码,也可以通过 interactive 参数手动定义密码。请记录这些密码,非常重要。
[root@cncs ~]# cd /usr/share/elasticsearch
[root@cncs 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
Changed password for user apm_system
PASSWORD apm_system = UymyZjBfqSS743TwTgpe
Changed password for user kibana_system
PASSWORD kibana_system = lwjCX1ho1oOMGf30bbJW
Changed password for user kibana
PASSWORD kibana = lwjCX1ho1oOMGf30bbJW
Changed password for user logstash_system
PASSWORD logstash_system = 6RYXgJw9V6LBnT53Qgzt
Changed password for user beats_system
PASSWORD beats_system = FiwFQBTuJsumTnWslM2f
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = oU73njEE3ynCThCT2NwZ
Changed password for user elastic
PASSWORD elastic = QA4xUfjBwnfjI6u73Af2
配置Kibana
配置Kibana连接Elasticsearch的账号
上文生成了kibana_system这个账号密码,现在给Kibana配置上这个账号使Kibana能够连接Elasticsearch。
[root@cncs ~]# vi /etc/kibana/kibana.yml
elasticsearch.username: "kibana_system"
elasticsearch.password: "lwjCX1ho1oOMGf30bbJW"
现在可以使用elastic这个账号访问网页端http://10.18.224.112:5601/了。
配置Filebeat
配置Filebeat连接Elasticsearch的账号
这里用的是elastic这个账号密码
[root@localhost ~]# vi /etc/filebeat/filebeat.yml
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["10.18.224.112:9200"]
username: "elastic"
password: "QA4xUfjBwnfjI6u73Af2"