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安全通讯配置要点(es 8.5.1)相关推荐

  1. elasticsearch 第二篇(配置篇)

    配置 在es启动之前可以通过设置启动命令行启动参数.环境变量.文件等方式优化和配置es进行参数 环境变量 名称 示例 说明 ES_MIN_MEM 256M 用于配置java进程分配的最小内存 ES_M ...

  2. ElasticSearch安装配置(es)

    1.搭建配置es # 创建es容器 # es的端口 # 9200 走http协议端口 # 9300 代码层面tcp端口 docker run -di --name elasticsearch -p 9 ...

  3. ElasticSearch基础杂烩-配置-索引-优化

    2019独角兽企业重金招聘Python工程师标准>>> ElasticSearch基础杂烩-配置-索引-优化 博客分类: java 前言 ElasticSearch是一个基于Luce ...

  4. Web基础配置篇(十二): Elasticsearch的安装配置及入门使用

    Web基础配置篇(十二): Elasticsearch的安装配置及入门使用 一.概述 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RE ...

  5. java读取ES配置生成ES管理类,获取ES连接

    java读取ES配置生成ES管理类,获取ES连接 1.Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询, ...

  6. elasticsearch安装与配置介绍

    基本概念 集群:一个或者多个elasticsearch节点组成的集合 索引:含有相同属性的文档集合,例如一个索引代表消费者数据,一个索引代表产品数据(相当于MySQL的database) 类型:索引可 ...

  7. Elasticsearch集群配置以及REST API使用

    ES安装与启动 在官网下载压缩包,解压后直接运行bin目录下的.bat文件即可.下载地址戳这里. ES配置集群 Elasticsearch配置集群很简单,只要配置一个集群的 名称 ,ES就会自动寻找并 ...

  8. Elasticsearch 压测方案之 es rally 简介

    rally文档:http://esrally.readthedocs.io/en/latest/quickstart.html 由于 Elasticsearch(后文简称es) 的简单易用及其在大数据 ...

  9. elasticsearch安装和配置,elasticsearch启动报错:can not run elasticsearch as root

    elasticsearch安装和配置 elasticsearch启动报错:can not run elasticsearch as root elasticsearch启动报错:ERROR: [3] ...

最新文章

  1. 机器人 瓷砖墙面清洗_瓷砖铺贴注意事项有哪些?
  2. 微信小程序-自定义picker选择器
  3. zerodivisionerror什么意思python-Python 中的 else详解
  4. 报错:不是可以识别的内置函数名称
  5. Android零基础入门第83节:Activity间数据传递方法汇总
  6. leetcode-110:判断平衡二叉树 Java
  7. 【方便自己使用】KKT条件
  8. Node.js 教程第十四篇——Socket.io
  9. TCP SYN-Cookie背后的人和事
  10. AnyLogic 建立谢林模型
  11. 阿里云运行python_使用阿里云运行python
  12. Linux大实验 (图书管理系统)
  13. js实现兼容的本地化存储方案
  14. C++中bad_alloc类
  15. Pg extention pgcrypto
  16. 安卓程序报错: No package ID ff found for ID 0xffffffff.
  17. 来认识一下Ning!
  18. Mac Pro install peel
  19. linux c查看子进程,Linux 如何查看进程和控制进程
  20. 游戏开发新手入门之Windows编程

热门文章

  1. 时隔一年半,我,一个卑微的前端菜鸡,又来写面经了
  2. python适合开发游戏吗_【学习python小游戏代码,你就可以做python滑雪游戏了】- 环球网校...
  3. yyf的HTMLCSS学习历程
  4. 管理类联考笔试还是计算机考,cc三战失败者对管理类联考与GMAT考试的见解
  5. Flac是什么格式,flac文件怎么转换为wav格式
  6. html5在线俄罗斯方块,HTML5最新经典俄罗斯方块游戏插件
  7. 【渝粤题库】国家开放大学2021春2394内科护理学题目
  8. 福建农信 计算机 考试试题,2020福建农信社招聘考试模拟试题——计算机知识(13)...
  9. Unity ASE案例解析—Skybox Cubemap Extended(天空盒子三维贴图效果)
  10. 基础课程《沉积岩岩石学》及《构造地质学》笔记