暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

efk 使用心得之组件安全性

writeline 2021-04-19
666

 先来回顾下上一篇 环境部署,简要介绍了下环境的部署及其可能遇到的一些问题。本文将会在此基础上,详细的介绍如何为每个组件开启安全机制。


前言


时常能听到这类新闻xx公司的elasticsearch数据又泄漏了,最终导致损失yy。而泄漏的原因有些也是让人哭笑不得的,究其原因,还是没有对使用的技术做过多了解,在加上使用门槛低,直接拿来主义。因而最终出问题也就不奇怪了。可想而知,安全性是有多么重要。下文将用es来代替elasticsearch,用fb代替filebeat。


01


为 es 开启账号授权


  1. elasticsearch.yml 文件开启如下设置

      xpack.security.enabled: true
    • 启动服务后,执行如下命令,会生成一系列账号

        bin/elasticsearch-keystore create
        bin/elasticsearch-setup-passwords interactive
      • 通过如下命令验证

          curl ip:9200 -s -u elastic:密码
        • 通过上面的步骤后,es 已经具备了一定的安全性。可此时,如果外部一个节点加入到集群中,es 分片再平衡后,我们的数据就会被完美的分走,为了避免这种情况发生,我们要保证集群内部通信是可信安全的。

        02


        为 es 开启 ssl


        1. 编写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 node1
              192.168.117.229 node2.elastic.test.com node2
              192.168.117.58 node3.elastic.test.com node3
              kibana 的服务与上述节点并未部署在同一台服务器上,所以无需把它加到里面去。
            • 通过如下命令执行证书签发

                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: true
                  xpack.security.transport.ssl.key: certs/node1.key
                  xpack.security.transport.ssl.certificate: certs/node1.crt
                  xpack.security.transport.ssl.certificate_authorities: certs/ca.crt
                • 通过上述五个步骤后,将签发的证书文件分发至整个集群,启动后集群内部的通信是安全可信的。可数据在传输过程中可能会被劫持,那该怎么办呢?为此,我们需要保证数据在传输过程中是加密的。


                03


                为 es 开启 https


                1. 在elasticsearch.yml文件中增加如下配置

                    xpack.security.http.ssl.enabled: true
                    xpack.security.http.ssl.key: certs/node1.key
                    xpack.security.http.ssl.certificate: certs/node1.crt
                    xpack.security.http.ssl.certificate_authorities: certs/ca.crt
                  • 经过上述的配置后,可以发现只需要增加很小的配置,便能达到一定的安全性。那es是安全了,那我们的kibana、fb要如何与之通信呢?


                  04


                  kibana 与 es 安全连接


                  1. 在kibana.yml文件中增加如下配置

                      elasticsearch.ssl.certificateAuthorities: [ "/etc/kibana/config/certs/ca.crt" ]
                      将签发的ca.crt放置到kibana服务所在目录中
                    • 为kibana开启https服务支持,在kibana.yml文件中增加如下配置

                        server.ssl.enabled: true
                        server.ssl.certificate: /etc/kibana/config/certs/my-kibana.crt
                        server.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 的安全连接


                        1. fb与kibana的交互主要在于生成dashboards、visualize等资源。

                        2. 在filebeat.yml文件中增加如下配置

                            setup.kibana:
                            host: "kibana.test.com"
                            protocol: "https"
                            ssl.enabled: true
                            username: "${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 --dashboards
                            • fb与kibana安全通信会对签发的证书做主机名验证,如果签发的证书未加入主机名设置,程序运行将会报错,如果要跳过验证,可加入如下设置

                                setup.kibana:
                                ssl.verification_modenone
                              • 那fb与es的通信又如何呢?

                              06


                              fb 与 es 的安全连接


                              1. fb与es的交互主要在于上报日志和ingest pipeline。

                              2. 在filebeat.yml文件中增加如下配置

                                  output.elasticsearch:
                                  enabled: true
                                  hosts: "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 --pipelines
                                  • fb与es安全通信会对签发的证书做主机名验证,如果签发的证书未加入主机名设置,程序运行将会报错,如果要跳过验证,可加入如下设置

                                      output.elasticsearch:
                                      ssl.verification_modenone


                                    写在最后

                                    通过上述的操作后,我们可以发现官方已经为应用的安全性考虑得很周到了,而且对使用者来说也提供了很友好的操作设置,只需要很少的配置,便可以让应用的安全性上一个层次。上面的一系列步骤现在看来都挺简单的,因为笔者一直秉承着按最佳实践来要求自己,在摸爬滚打中查阅了无数资料,遇到无数个坑后,一步步踩过来的,也希望热爱技术的你能多多动手实践,因为看懂和自己动手真的是两码事。下一篇将会介绍下如何使用fb来收集各类日志。



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



                                    文章转载自writeline,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                    评论