“ 先来回顾下上一篇 环境部署,简要介绍了下环境的部署及其可能遇到的一些问题。本文将会在此基础上,详细的介绍如何为每个组件开启安全机制。”
前言
时常能听到这类新闻xx公司的elasticsearch数据又泄漏了,最终导致损失yy。而泄漏的原因有些也是让人哭笑不得的,究其原因,还是没有对使用的技术做过多了解,在加上使用门槛低,直接拿来主义。因而最终出问题也就不奇怪了。可想而知,安全性是有多么重要。下文将用es来代替elasticsearch,用fb代替filebeat。
01
—
为 es 开启账号授权
elasticsearch.yml 文件开启如下设置
xpack.security.enabled: true启动服务后,执行如下命令,会生成一系列账号
bin/elasticsearch-keystore createbin/elasticsearch-setup-passwords interactive通过如下命令验证
curl ip:9200 -s -u elastic:密码通过上面的步骤后,es 已经具备了一定的安全性。可此时,如果外部一个节点加入到集群中,es 分片再平衡后,我们的数据就会被完美的分走,为了避免这种情况发生,我们要保证集群内部通信是可信安全的。
02
—
为 es 开启 ssl
编写instance.yml文件,放置在/etc/elasticsearch下
instances:- name: 'node1'dns: [ 'node1.elastic.test.com' ]- name: "node2"dns: [ 'node2.elastic.test.com' ]- name: "node3"dns: [ 'node3.elastic.test.com' ]- name: 'my-kibana'dns: [ 'kibana.test.com' ]为需要签发证书的所有节点依次进行配置 在/etc/hosts为上述节点增加如下配置
192.168.117.227 node1.elastic.test.com node1192.168.117.229 node2.elastic.test.com node2192.168.117.58 node3.elastic.test.com node3kibana 的服务与上述节点并未部署在同一台服务器上,所以无需把它加到里面去。 通过如下命令执行证书签发
bin/elasticsearch-certutil cert ca --pem --in /etc/elasticsearch/instance.yml --out /etc/elasticsearch/certs.zip解压zip包至当前目录下的certs文件夹 在elasticsearch.yml增加如下配置 xpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.key: certs/node1.keyxpack.security.transport.ssl.certificate: certs/node1.crtxpack.security.transport.ssl.certificate_authorities: certs/ca.crt通过上述五个步骤后,将签发的证书文件分发至整个集群,启动后集群内部的通信是安全可信的。可数据在传输过程中可能会被劫持,那该怎么办呢?为此,我们需要保证数据在传输过程中是加密的。
03
—
为 es 开启 https
在elasticsearch.yml文件中增加如下配置
xpack.security.http.ssl.enabled: truexpack.security.http.ssl.key: certs/node1.keyxpack.security.http.ssl.certificate: certs/node1.crtxpack.security.http.ssl.certificate_authorities: certs/ca.crt经过上述的配置后,可以发现只需要增加很小的配置,便能达到一定的安全性。那es是安全了,那我们的kibana、fb要如何与之通信呢?
04
—
kibana 与 es 安全连接
在kibana.yml文件中增加如下配置
elasticsearch.ssl.certificateAuthorities: [ "/etc/kibana/config/certs/ca.crt" ]将签发的ca.crt放置到kibana服务所在目录中 为kibana开启https服务支持,在kibana.yml文件中增加如下配置
server.ssl.enabled: trueserver.ssl.certificate: /etc/kibana/config/certs/my-kibana.crtserver.ssl.key: /etc/kibana/config/certs/my-kibana.key将签发的my-kibana.crt\key放置到kibana服务所在目录中 可以在/etc/hosts文件中增加对kibana dns配置,当然不改也是可以的,因为签发的证书并没有对主机名做验证,如下面的配置
server.name: "my-kibana"server.host: "kibana.test.com"elasticsearch.hosts: ["https://node1.elastic.test.com:9200"]至此,连kibana的安全性也是杠杠地。
05
—
fb 与 kibana 的安全连接
fb与kibana的交互主要在于生成dashboards、visualize等资源。
在filebeat.yml文件中增加如下配置
setup.kibana:host: "kibana.test.com"protocol: "https"ssl.enabled: trueusername: "${kibana_username}"password: "${kibana_password}"ssl.certificate_authorities: ["${path.home}/certs/ca.crt"]ssl.certificate: "${path.home}/certs/my-kibana.crt"ssl.key: "${path.home}/certs/my-kibana.key"host需要写成在instance.yml文件中配置的dns名称,同时也要在 etc/hosts下进行相应配置,否则会提示错误 通过执行如下命令生成dashboards
./filebeat -e "*" setup --dashboardsfb与kibana安全通信会对签发的证书做主机名验证,如果签发的证书未加入主机名设置,程序运行将会报错,如果要跳过验证,可加入如下设置
setup.kibana:ssl.verification_mode: none那fb与es的通信又如何呢?
06
—
fb 与 es 的安全连接
fb与es的交互主要在于上报日志和ingest pipeline。
在filebeat.yml文件中增加如下配置
output.elasticsearch:enabled: truehosts: "node1.elastic.test.com,node2.elastic.test.com,node3.elastic.test.com"protocol: "https"username: "${elasticsearch_username}"password: "${elasticsearch_password}"ssl.certificate_authorities: ["${path.home}/certs/ca.crt"]hosts需要写成在instance.yml文件中配置的dns名称,同时也要在 etc/hosts下进行相应配置,否则会提示错误 通过如下命令生成 ingest pipeline
./filebeat -e "*" setup --pipelinesfb与es安全通信会对签发的证书做主机名验证,如果签发的证书未加入主机名设置,程序运行将会报错,如果要跳过验证,可加入如下设置
output.elasticsearch:ssl.verification_mode: none
写在最后
通过上述的操作后,我们可以发现官方已经为应用的安全性考虑得很周到了,而且对使用者来说也提供了很友好的操作设置,只需要很少的配置,便可以让应用的安全性上一个层次。上面的一系列步骤现在看来都挺简单的,因为笔者一直秉承着按最佳实践来要求自己,在摸爬滚打中查阅了无数资料,遇到无数个坑后,一步步踩过来的,也希望热爱技术的你能多多动手实践,因为看懂和自己动手真的是两码事。下一篇将会介绍下如何使用fb来收集各类日志。

如有收获,点个在看,诚挚感谢




