0


elasticsearch安全通讯配置要点(es 8.5.1)

   elasticsearch的安全通讯配置,官网文档说明比较零散,尤其是几种组件如kibana、fleetserver、各类agent、beat采用的处理方式都不一样,这里针对利用elasticsearch自带证书工具创建CA的方式,归集一下配置要点,希望能有所帮助。

一、基本知识

1、默认情况下,服务器将使用两个端口进行通讯,9300与9200:

      9300,用于elasticsearch服务器集群内各服务器节点间的通讯。

      9200,用于http通讯,各类restful客户端,例如kibana,浏览器直接访问、agent等等需要通过该端口与服务器连接。

2、如果首次使用yum或者rpm按装elasticsearch服务器,安装程序会自动进行安全配置,并生成几个安全配置需要的文件,如ca的keystore、用于http加密通讯的keystore(http.p12)等,这些最好保留下来,当然,你也可以用它提供的证书工具在后面自行创建。留意,如果不是首次安装,又希望系统再次自动生成安全配置,需要先把/var/lib/elasticsearch里的东西删除干净。

3、通过自动安全配置生成的几个文件会放在/usr/share/elasticsearch下:

     elastic-stack-ca.p12   keystore文件,存储了ca的公共证书及用于签发其他证书的密钥。

     transport.p12   包含了传输层密钥和证书,用于elasticsearch节点间加密通讯。

     http.p12  这个keystore存储着http加密通讯需要的证书和密钥。

     http_ca.crt  证书文件,用于集群内的http通讯加密。

二、配置要点(以下elasticsearch服务简称es服务器)

1、创建CA

 (yum/rpm方式安装的es,其自带的工具都放在/usr/share/elasticsearch/bin里面。)

    ./elasticsearch-certutil ca 

  按提示操作即可,我这里选择了不改名字、不加密码。完成后该工具会在上一级文件夹(即/usr/share/elasticsearch)里生成elastic-stack-ca.p12文件。这个文件将用于签署其他证书,非常重要。

2、启用elasticsearch节点间加密通讯:

   2.1、创建用于节点间加密的keystore

           把上面的CA文件复制到需要加入集群的节点服务器,使用certutil工具生成节点keystore文件,如下:

           ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

   按提示操作,为了方便,我没改默认文件名,但为了后面说明keystore工具的使用,我在这里添加了密码:abcdef

   完成后生成keystore文件elastic-certificates.p12,里面包含了节点证书,节点密钥,以及CA的证书。

 2.2、由于上面的文件加了密码,需要在本地的keystore里添加密码以便本节点elasticsearch进程可以读取,如下:

       ./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password

       ./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password

 2.3、在/etc/elasticsearch文件夹里新建certs文件夹以方便后面对路径统一管理。把elastic-certificates.p12文件复制到每一个节点的certs目录。注意读取权限要分配给elasticsearch组(该组在yum/rpm方式安装时自动创建)。

 2.4、在每一个节点上配置elasticsearch.yml文件
         cluster.name: (集群名字,所有节点都要一致)
         node.name:  (节点名字 ,最好有规律方便自己记忆)

       xpack.security.transport.ssl:
              enabled: true
              verification_mode: certificate
              keystore.path: certs/elastic-certificates.p12
              truststore.path: certs/elastic-certificates.p112

3、启用elasticsearch服务器上的http加密通讯

 3.1、使用工具生成用于http加密通讯的p12及pem文件。

      ./bin/elasticsearch-certutil http    下面会有一堆问题,我按如下配置:

       创建CSR: 否
        使用已创建CA:是
        CA文件路径:/usr/share/elasticsearch/elastic-stack-ca.p12
        CA文件密码:无密码
        设置证书过期时间:可以按年月日计算,例如10y为10年,10d为10天,10m为10个月。
        是否为每个节点创建独立的证书:否  (使用同一个证书。)
        录入需要使用证书的机器名    (可以多个)
        录入需要使用证书的IP          (可以多个)
        设置证书密码:abcdef

   以上完成后将生成一个zip压缩文件。   

  3.2、解压文件,生成一个文件夹,里面包含两个文件夹,elasticsearch文件夹包含http.p12及elasticsearch.yml的配置参考,kibana文件夹包含elasticsearch-ca.pem及kibana.yml的配置参考。把http.p12复制到certs文件中。

  3.3、同样,把上面keystore文件的密码加入到keystore中,

     ./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password

  3.4、修改elasticsearch.yml以支持http通讯加密

     xpack.security.http.ssl:
           enabled: true
           keystore.path: certs/http.p12

  3.5、如果你没有记下内置的超级用户elastic的密码,这时可以重置一下它的密码:

        ./bin/elasticsearch-reset-password -u elastic

       该工具会把重置密码显示在屏幕中,记下来。

 3.6、此时,可以尝试在浏览器用https://你的elasticsearch服务器的地址:9200访问一下验证安全设置是否生效。

4、启用es服务器与kibana间的加密通讯

  4.1、把上面的elasticsearch-ca.pem复制到kibana服务器。

  4.2、修改kibana.yml

          elasticsearch.ssl.certificateAuthorities: [ "文件路径/elasticsearch-ca.pem" ]
           elasticsearch.ssl.verificationMode: certificate

 4.3、重启kibana。

5、fleet server与es服务器的加密通讯

 我的理解,fleet server实际上是一个agent,启用了特别的代理策略(fleet server policy)。在安装前,需要先准备几个加密通讯用到的文件,当然,你也可以使用--insecure参数跳过,但会带来一系列问题,因此,不建议使用--insecure参数。

5.1、fleet server加密通讯需要3个证书文件和一个密钥文件。你在kibana上添加fleet server时,可以在系统给出的脚本上看到,如下案例:

        --certificate-authorities=<PATH_TO_CA> \    #用于连接到fleet server 的ca证书,即集群CA的证书。
        --fleet-server-es-ca=<PATH_TO_ES_CERT> \ #用于连接到elasticsearch的证书,加密http通讯的证书。
        --fleet-server-cert=<PATH_TO_FLEET_SERVER_CERT> \  # fleet server本身的证书,pem格式。
        --fleet-server-cert-key=<PATH_TO_FLEET_SERVER_CERT_KEY> #fleet server本身的密钥。

5.1.1、这几个文件分别通过如下步骤创建:

  A. 准备ca.crt及ca.key用于创建fleet-server-cert和fleet-server-cert-key:

   openssl pkcs12 -in elastic-stack-ca.p12 -out ca.crt -clcerts -nokeys   #生成ca.crt

   openssl pkcs12 -in elastic-stack-ca.p12 -out ca.key -nocerts -nodes  #生成ca.key

  (ca.crt可直接用于参数--certificate-authorities=/路径/ca.crt)

 B. 使用certutil工具生成fleet-server-cert和fleet-server-cert-key:

  ./bin/elasticsearch-certutil cert  --name fleet-server  --ca-cert 路径/ca.crt  --ca-key 路径/ca.key 
   --dns 你的fleetserver服务器名字 --ip 你的fleetserver的IP --pem

  完成后会生成一个zip压缩文件。解压该文件,得到fleet-server.crt和fleet-server.key  

  C. 生成参数 --fleet-server-es-ca所需文件,如前所述,实际上fleetserver一个特殊agent,因此它也是采用http与es服务器通讯,因此,我们要使用前面生成的keystore文件http.p12里面的证书:

     openssl pkcs12 -in http.p12 -out elastic-ca.crt -clcerts -nokeys

  生成elastic-ca.crt ,此文件用于通过https连接easticsearch服务器。

5.2、把上述文件复制到agent机器的某个路径,至此,安装fleet server所需的文件均已齐备,可以利用kibana界面提供的安装脚本进行安装了。

装完fleet server后,可能会出现agent状态正常,但是没有数据流传递到es服务器的现象,此时需要指定agent使用证书与es通讯,在kibana界面,fleet设置里编辑output,在“高级yaml编辑”加上

 protocol: "https"  

     ssl:

        certificate_authorities:  "路径/agent用于与es服务器通讯的http证书"

        verification_mode: "certificate"

    或者,启用Fingerprint认证,在elasticsearch服务器上,获取http证书的fingerprint:

   openssl x509 -in http_ca1.crt -sha256 -fingerprint | grep SHA256 | sed 's/://g'

   获得后,在“高级yaml编辑”里,加上:       

ssl.ca_trusted_fingerprint: 你的fingerprint。

  这个方式比较简单些,不受证书文件路径格式限制,适合场合也多一点。

6、启用agent的加密通讯

与fleetserver类似,但只需要指定token(kibana上添加代理时会给出)和certificate_authorities即可,这里就略过了。建议注册到fleetserver,会简单很多。没必要使用standalone方式,那是自找麻烦,除非有很特殊的要求或者进行故障排查。

7、beat的加密通讯,这里以filebeat为例

把elastic-ca.crt复制到要安装beat的机器,正常安装beat后,修改filebeat.yml

 output.elasticsearch:
         hosts: ["https://你的es服务器IP:9200"]
         protocol: "https"           
         ssl:
              certificate_authorities:  "路径/agent用于与es服务器通讯的http证书"
              verification_mode: "certificate"  

以上,参考了几篇官方文档:

elastic stack手工配置安全

filebeat配置SSL

标签: elasticsearch

本文转载自: https://blog.csdn.net/MaxSamMax/article/details/128078145
版权归原作者 MaxSamMax 所有, 如有侵权,请联系我们删除。

“elasticsearch安全通讯配置要点(es 8.5.1)”的评论:

还没有评论