查看: 1661|回复: 0

Elasticsearch XPACK安全认证

[复制链接]

631

主题

436

回帖

80

日志

管理员

积分
5649
QQ
发表于 2024-5-5 03:55:34 | 显示全部楼层 |阅读模式
目录
  • 1、什么是Xpack
  • 2、相关安全配置介绍

    • 2.1、xpack.security.enabled
    • 2.2、xpack.security.http.ssl
    • 2.3、xpack.security.transport.ssl
  • 3、ES集群认证配置

    • 3.1、创建证书

      • a、创建一个证书颁发机构
      • b、为节点生成证书和私钥
      • c、config目录下创建下certs目录
      • d、将文件可拷贝到certs目录下
    • 3.2、给keystore和truststore设置密码
    • 3.3、修改配置文件并重启
    • 3.4、创建用户密码
  • 4、认证验证场景

    • 4.1、浏览器访问验证
    • 4.2、curl 认证
    • 4.3、kibana 认证

Elasticsearch往往存有公司大量的数据,如果安全不过关,那么就会有严重的数据安全隐患。
Elasticsearch 的安全认证方式有不少,如http-basic,search guard,shield等,本文讲的是使用Xpack进行安全认证。

1、什么是Xpack
X-Pack是Elastic Stack扩展功能,提供安全性,警报,监视,报告,机器学习和许多其他功能。 ES7.0+之后,默认情况下,当安装Elasticsearch时,会安装X-Pack,无需单独再安装。
自6.8以及7.1+版本之后,基础级安全永久免费。
基础版本安全功能列表如下:
6cd378458d1747af98c34dd965cea4bd.png.jpg



2、相关安全配置介绍
这里挑一些比较重要常见的配置项介绍,完整的配置介绍可以查看官方文档
2.1、xpack.security.enabled
默认为true,启用节点上ES的XPACK安全功能,相当于总开关
2.2、xpack.security.http.ssl
这个是用来开启https的,以及对应的设置,整体配置项如下:
xpack.security.http.ssl:  enabled: false 【开启还是关闭】
verification_mode: certificate【如下】
  【full:它验证所提供的证书是否由受信任的权威机构(CA)签名,并验证服务器的主机名(或IP地址)是否与证书中识别的名称匹配。】
   【certificate:它验证所提供的证书是否由受信任的机构(CA)签名,但不执行任何主机名验证。】
   【none:它不执行服务器证书的验证。】
  truststore.path: certs/elastic-certificates.p12 【信任存储库文件的存放位置】
  keystore.path: certs/elastic-certificates.p12【密钥存储库文件的存放位置】
2.3、xpack.security.transport.ssl这个是传输层的认证设置,整体配置项如下:
xpack.security.transport.ssl:  enabled: true【开启还是关闭】
verification_mode: certificate【如下】
   【full:它验证所提供的证书是否由受信任的权威机构(CA)签名,并验证服务器的主机名(或IP地址)是否与证书中识别的名称匹配。】
   【certificate:它验证所提供的证书是否由受信任的机构(CA)签名,但不执行任何主机名验证。】
   【none:它不执行服务器证书的验证。】
  keystore.path: certs/elastic-certificates.p12【信任存储库文件的存放位置】
  truststore.path: certs/elastic-certificates.p12【密钥存储库文件的存放位置】



3、ES集群认证配置
命令操作都是在ES安装根目录下执行的
573afc392d064ef29a9df694bf66312e.png.jpg
3.1、创建证书
a、创建一个证书颁发机构
提示命名文件:直接回车,默认文件名
elastic-stack-ca.p12文件
提示输入密码:可以直接回车,也可以输入密码进行设置
  1. ./bin/elasticsearch-certutil ca
复制代码
111
0b9c75b0375348478636814be6d3fded.png.jpg
b、为节点生成证书和私钥
提示命名文件,直接回车,默认文件名elastic-certificates.p12文件
提示输入密码:可以直接回车,也可以输入密码进行设置
  1. ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
复制代码

c、config目录下创建下certs目录

  1. makdir config/certs
复制代码

d、将文件可拷贝到certs目录下
  1. mv elastic-certificates.p12 config/certs/
复制代码

663add10b5ef4d588dfa849f5d8bd4c0.png.jpg
3.2、给keystore和truststore设置密码
  1. 注解:
  2. keystore可以看成一个放key的库,key就是公钥,私钥,数字签名等组成的一个信息。
  3. truststore是放信任的证书的一个store
  4. truststore和keystore的性质是一样的,都是存放key的一个仓库,区别在于,truststore里存放的是只包含公钥的数字证书,代表了可以信任的证书,而keystore是包含私钥的。
复制代码

如果在创建证书的过程中加了密码,需要输入这个密码。每个节点都需要
87c849dfe9434101a103f43b11023449.png.jpg
  1. ./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
复制代码
  1. ./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
复制代码
  1. ./bin/elasticsearch-keystore add xpack.security.http.ssl.keystore.secure_password
复制代码
  1. ./bin/elasticsearch-keystore add xpack.security.http.ssl.truststore.secure_password
复制代码

这样就会在config目录下keystore文件了
e995c12c903449b79135f3a2b6857b92.png.jpg
3.3、修改配置文件并重启
配置文件中加入以下配置,然后重启
  1. xpack.security.enabled: true

  2. xpack.security.http.ssl:
  3.   enabled: false
  4.   verification_mode: certificate
  5.   truststore.path: certs/elastic-certificates.p12
  6.   keystore.path: certs/elastic-certificates.p12

  7. xpack.security.transport.ssl:
  8.   enabled: true
  9.   verification_mode: certificate
  10.   keystore.path: certs/elastic-certificates.p12
  11.   truststore.path: certs/elastic-certificates.p12
复制代码

3.4、创建用户密码集群中的节点都按照上面的方式完成配置并启动后,就可以设置账号密码了
a、自动创建密码
  1. ./bin/elasticsearch-setup-passwords auto
复制代码

b、手动输入密码
  1. ./bin/elasticsearch-setup-passwords interactive
复制代码

c、重置用户密码(随机密码)
  1. ./bin/elasticsearch-reset-password -u elastic
复制代码

d、重置用户密码(指定密码)
  1. ./bin/elasticsearch-reset-password -u elastic -i <password>
复制代码




4、认证验证场景
4.1、浏览器访问验证
这里说明一下:
xpack.security.http.ssl的enable为true 就会是https,为false就是http,我这里是关掉了

10291382d1214326ba9a0b19fcfbfdbe.png.jpg
4.2、curl 认证
当你执行curl去访问es api的时候也会提示需要进行认证

718a813b02e84a97b67b39c264b30402.png.jpg

但是带上账号密码就可以了

2f5f9e9ce10948d182646b832e0405cc.png.jpg

4.3、kibana 认证
kibana中配置ES中配置的kibana账号密码即可连接ES认证

  1. elasticsearch.username: "kibana"
  2. elasticsearch.password: "XXX"
  3. elasticsearch.hosts: ["http://1.1.1.1:9200","http://2.2.2.2:9200","http://3.3.3.3:9200"]
  4. server.port: 5601
复制代码

38a86bcadfac4a0db1e49a58bc0b224a.png.jpg
c7b74677a0244725b2102494af02f6e1.png.jpg

来源:https://blog.csdn.net/github_30641423/article/details/123746349

上士闻道,勤而行之;中士闻道,若存若亡;下士闻道,大笑之。不笑不足以为道!
回复 关闭延时

使用道具 举报

您需要登录后才可以回帖 登录 | 注册  

本版积分规则

快速回复 返回顶部 返回列表