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:不能进行角色创建与管理。

 

posted @ 2021-04-12 18:03  芒果~~  阅读(414)  评论(0编辑  收藏  举报