ELK日志收集(二)- ES集群内部加密
一:ES集群搭建
ES集群由多台ES单节点组合而成,当某一台ES故障时集群能够自动切换以保证集群正常工作。
修改单台集群的配置文件,形成集群。
1.cluster.name: XXXX # 集群名称,在同一集群的ES机器应保证集群名称相同
2.node.name: es-3 #单台ES机器的名字不能重复
3.discovery.zen.ping.unicast.hosts: ["172.16.1.73", "172.16.1.71"] #不必将集群中的每个ip地址写出来,只要相互关联即可
4.discovery.zen.minimum_master_nodes: 2 #选举原则,遵循过半原则 当某台机器故障时实现自我转移
二:集群内部加密
通过elasticsearch自带的elasticsearch-certutil的命令生成证书,然后各节点通过该证书可以进行安全通信。
【需要账号与密码访问ES集群,kibana页面】
1.证书级别了解
证书认证的不同级别:
Certificate: 节点加入集群需要使用想用CA签发的证书
Full Verfication: 节点加入集群需要使用想用CA签发的证书,还需要验证Hostname或IP地址
No Verfication: 任何节点都可以加入,开发环境用于诊断目的
企业中一般选择Certificate级别即可。
2.部署步骤
1) 环境准备
cd /usr/share/elasticsearch
使用yum方式安装的可执行文件路径
2)生成CA证书
bin/elasticsearch-certutil ca (CA证书:elastic-stack-ca.p12)
执行命令后会出现提示,第一个是指定证书位置,第二个是为证书设置密码。
注意:位置不用指定会有默认位置【在哪个位置执行生成命令证书就在该目录下】,不要设置密码,直接回车密码为空。设置密码后后面会很麻烦,很麻烦,很麻烦!!
3)生成节点证书
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 (节点证书:elastic-certificates.p12)
执行后也会出现相应提示,第一个是输入ca证书的密码,ca证书密码为空直接回车。第二个是指定从节点证书的存放位置,同样不输入会有默认存放位置。第三个是指定从节点证书的密码,一定还是直接回车,不要设置密码,不要设置密码!!
4)检查证书是否生成成功
此时证书的存放目录是/usr/share/elasticsearch,可以在该目录下查看是否有elastic-stack-ca.p12(ca证书)
和elastic-certificates.p12(从节点证书)。
5)移动证书位置并授权
注意:在本机生成的证书需要更改证书权限:`chmod 644 elastic-certificates.p12` (若是使用运行es程序的用户创建证书,则不用更改证书权限)
默认证书权限是600,运行elasticsearch程序的用户没有权限读取,会造成elasticsearch启动失败
mv /usr/share/elasticsearch/elastic-stack-ca.p12 /etc/elasticsearch
mv /usr/share/elasticsearch/elastic-certificates.p12 /etc/elasticsearch
chmod 644 /etc/elasticsearch/elastic-stack-ca.p12
chmod 644 /etc/elasticsearch/elastic-certificates.p12
chown root.elasticsearch /etc/elasticsearch/elastic-stack-ca.p12
chown root.elasticsearch /etc/elasticsearch/elastic-certificates.p12
6)编辑配置文件,增加xpack(5条)【主节点上操作】
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
最后两行注意是证书的位置,直接存放在/etc/elasticsearch目录下,配置文件中使用相对路径即可。
问:为啥证书密码建议都设置为空?
答:如果设置了证书密码就需要注意xpack,它读取不到密码就会造成ES重启不成功。配置xpack目前没找到资料怎么去配置,所以请直接把证书密码设置为空。
7)重启es服务
systemctl restart elasticsearch.service
重启后一定检查是否成功启动,如果没有成功请注意你是否设置了证书密码,没有设置的情况下检查证书文件的授权与位置是否正确。
8)推送证书到集群从节点
*将主节点产生的证书文件推送到其他两台机器的/etc/elasticsearch目录下,并编辑配置文件【仍是增加xpack那5条配置】
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
完成推送后重启ES服务,也请注意检查服务是否启动成功。
9)创建账号与密码
启动三个节点,待节点启动完毕之后,进入主节点elasticsearch目录,执行以下命令,进行账号,密码设置:
设置密码的两种方式:
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
系统随机创建密码 (建议使用随机创建,创建成功后保存好即可)
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive #自定义密码
考虑到会生成es,kibana,filebeat,logstash的账号与密码,我们选择系统随机生成即可。
创建:/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
输出结果:
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]
注意:生成后记得保存好自己的账号与密码,后期登录要用它们才能登录页面。
账号密码支持新生成,如果需要生成新账号密码,执行生成命令即可。生成的新密码默认覆盖之前的。
9)访问测试
访问es页面,提示需要账号与密码
注意:使用了head插件可能导致401报错,因为此时es集群已有密码。
解决:在es的.yml这个配置文件中增加一条配置即可。
http.cors.allow-headers: Authorization,content-type
10)使用logstash或者filebeat收集日志
在收集的配置文件中增加es的用户名与密码即可
#举例:
output.elasticsearch:
hosts: ["http://192.168.80.104:9200"]
username: "elastic"
password => "elkstack123456" # 密码是上面步骤设置随机生成的
}
}
注意:配置账户和密码的时候有坑,账号对应的是username,之前百度出来有文档写的是user,一开始用的user,ES一直收集不到日志,排查发现是这里的坑!!改成username就可以了
11)#测试kibana访问页面
登陆kibana提示需要输入用户与密码 【安全机制:访问页面需要输入账号密码登录】
在kibana的配置文件中填写用户与密码 【kibana与ES集群相连接,需要账号与密码】
注意:不管是页面登录还是配置文件中都可以用kibana的账号,也能用ES的账号,【ES】账号属于超级用户账号。
配置文件kibana.yml中需要加入以下配置:【使用了es账号】
elasticsearch.username: "elastic"
elasticsearch.password: "elkstack123456"
#kibana页面登录不同账号的区别:
使用es:在Management下面的Kibana最后出现一个Security,有User和Role,方便kibana多用户创建及角色权限控制【先创建规则,在创建用户时绑定该规则即可】
使用kibana:不能进行角色创建与管理。