Elasticsearch学习笔记(四) Elasticsearch集群安全配置一

继续我们的实验。先谈一下我对Elasticsearch粗浅的一些认识,首先Elasticsearch是一个非常宏大的技术栈,发展到今天围绕着Elasticsearch已经产生了更多的组件、套件。因此在看官方文档或者别人的一些教程的时候经常会遇到ELK,elastic stack等。elastic stack直译为elatic堆栈,她由Elasticsearch、Logstash、Kibana和Beats四个组件组成,目前我只接触过Kibana,接下来在我的集群中安装一台kibana服务器。

0.准备kibana服务器

在我的虚拟机中准备了一台8核16G的Ubuntu2404桌面版的服务器,我将在这台服务器上安装并配置kibana.

1.安装kibana

1.1 下载kibana 安装包

推荐使用deb包进行安装,安装的kibana版本需要和前面我们安装的Elastic的版本相同,同学们可以根据自己的情况灵活变动。下面是我下载及安装kibana的命令。

# 下载指定版本的kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.11.1-amd64.deb
# 安装kibana同样使用普通用户
sudo dpkg -i kibana-8.11.1-amd64.deb

kibana的安装非常的顺利,没有报错,仔细观察安装输出信息,"created Kibana keystore in /etc/kibana/kibana.keystore"这句引起我的注意,那就查看一下这个文件是什么东东吧。

vim /etc/kibana/kibana.keystore

打开这个文件发现里面有一串字符

1:1MpjNFrWKwaUatCLDATV3UObC9vaKeXzJc1zpTRWAMchWMgTroCbdESHVL7ob/rIj7DGybF6+d3ViTBUbVaghGDjVd3zaMUfAksI3rxSlOjsUTwSnvDoMdoOzRqTNg==

我试图解析出这串字符串中的内容,可是尝试了很多方法都失败了,好了先不管他了,可以确认的是这个文件一定是用来隐蔽秘密的。

1.2 配置kibana

kibana的配置非常的简单,我们目前只需要开启以下配置即可,当然随着后面集群的安装还会增加一些配置。

打开配置文件/etc/kibana/kibana.yml,修改以下内容

server.port: 5601
server.host: "0.0.0.0"

我的这台kibana服务器安装了中文包,所以我在kibana配置文件中把语言设置成中文了,这样登录kibana时就是中文界面了。

locale: "zh-CN"

修改完成后,保存配置文件。

1.3 启动登录kibana

systemctl start kibana

如果出现上图的状态,说明kibana已经正常启动。

在浏览器中输入 http://192.168.50.4:5601 就能打开kibana的登录界面了。

接着在node1上使用下面的命令生成kibana的注册令牌。

sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

复制上述命令生成的令牌,粘贴到kibana登录页面的输入框内,然后点击"配置Elastic"按钮,程序接下来会配置Elastic。

接着使用下面的命令在kibana服务上生成验证码。

 /usr/share/kibana/bin/kibana-verification-code

输入正确的验证码后,kibana会自动配置ES。

配置完成后会弹出登录界面,使用安装elasticsearch时的内置用户elastic就可以登录kibana了。

到目前为止kibana基本已经安装并配置了elastic了,接下来我最关心的是想使用kibana的监控功能监控我集群的状态。

2.使用kibana监控集群

在kibana主界面,点击左上角的菜单项,展开菜单并找到堆栈监测。

kibana会弹出下图所示的提示,意思是需要我们配置Metricbeat也可以先不配置,这里我先选择下面的Or,set up with self monitoring。

接着点击"Turn on monitoring"。

接下来的提示以后再说吧。

好了我们的kibana目前对集群的监控先简单的配置好了,同学们如果跟着我的教程走到了这一步,建议你在kibana的各个页面点点看看,先有些粗浅的印象。

3.Elastic stack安全设置

按照官方的说明文档ES的安全设置分为三个层级如下图所示。

如果你只是在开发测试环境使用es.可以使用最小的安全级别,但是如果你是在生产环境中使用ES则必须配置基础的ES安全。

到目前为止,我们搭建的ES集群只启用了基础安全,也就是用户密码验证,自动配置的SSL和TLS证书,并开启了 xpack.security.http.sslxpack.security.transport.ssl

Elastic的高级安全建立在基本安全方案的基础上,并使用TLS保护所有HTTP流量。除了在Elasticsearch集群的传输接口上配置TLS之外,还可以在Elasticsearch和Kibana的HTTP接口上配置TLS。

Elasticsearch 8.X 集群默认开启了安全配置,集群首次运行时会自动配置TLS和LLS证书,但是自动配置的TLS证书通常只用于集群内部节点之间的通信,不包括客户端或ES stack节点的通信,自动配置的证书是自签名的没有由受信任的证书颁发机构(CA)签发。

上图是我从网上随便找的一张图,从上图中可以看出ES集群内部节点之间通过9300端口进行通信,默认的安全配置是安装elasticsearch时自动配置的,各个节点之间只要使用相同的证书、密钥就可以了,我们node3加入集群的操作就证明了这一点。可是默认的自动配置还是有安全风险的,因为只要别人拿到你的相关证书和密钥就能加入你的集群了,而默认的安全配置和ES集群之外的例如kibana的通信还是使用http的,安全性比较低。

Elastic stack是通过数字证书来保证安全的,如果你对数字证书非常了解,那么Elastic stack的安全配置就比较轻松了。

以下是关于数字证书的一些基本知识。

在 SSL/TLS 证书的使用中,.crt 文件、.key 文件和 CA(证书颁发机构)文件是确保数据安全性的关键组件。

  1. .crt 文件(证书文件)
    • 这是一个包含公钥的文件,通常被称为证书文件。
    • 它由一个证书颁发机构(CA)签发,用于验证拥有对应私钥的实体(如服务器或客户端)的身份。
    • 证书文件中包含了证书持有者的公钥、证书持有者的身份信息(如域名或组织名称)、证书的有效期限、签发证书的 CA 的信息,以及 CA 对证书持有者公钥的数字签名。
    • 在建立 SSL/TLS 连接时,证书文件用于加密通信双方的会话密钥。
  2. .key 文件(私钥文件)
    • 这是一个包含私钥的文件,通常被称为私钥文件。
    • 私钥是证书持有者用于解密信息、签名数据或证明公钥所有权的密钥。
    • 私钥必须保密,只有证书持有者才能访问。
    • 在 SSL/TLS 握手过程中,私钥用于生成临时会话密钥或对数据进行签名。
  3. CA 文件(证书颁发机构文件)
    • 这是一个包含 CA 公钥的文件,通常被称为 CA 证书或根证书。
    • CA 文件用于验证证书文件中 CA 数字签名的有效性。
    • 当客户端(如浏览器或应用程序)接收到服务器的证书文件时,它会使用 CA 文件中的公钥来验证证书文件的签名。
    • 如果签名验证成功,客户端可以确信证书文件是由受信任的 CA 签发的,并且证书持有者的身份是可信的。

在实际应用中,你应该:

  • .crt 文件部署到你的服务器上,并在 SSL/TLS 配置中指定它。
  • .key 文件安全地存储在服务器上,确保只有必要的服务和用户可以访问它。
  • 将 CA 文件部署到所有需要验证服务器证书的客户端上,以确保客户端可以信任服务器的证书。

正确配置和管理这些文件对于确保 SSL/TLS 加密通信的安全性至关重要。

3.1 手动配置集群内节点TLS

在前面的集群配置中,虽然集群内的节点之间的通信也使用了TLS,但是它是自动配置的,也就是说所有节点使用通用的数字证书,这种方式还是具有一定的安全隐患的,所以建议在你的生产集群上手动配置集群节点的TLS.

一、生成CA

首先使用elastic自带的工具elasticsearch-certutil为集群生成一个CA机构。

在集群中的任一节点上,使用下面的命令生成一个CA。

/usr/share/elasticsearch/bin/elasticsearch-certutil ca

直接回车会生成elastic-stack-ca.p12此文件包含CA的公共证书和用于为每个节点签署证书的私钥,如果想使用自定义文件名,在:后面输入文件名回车即可。

此处输入文件保护密码,测试环境可以回车留空,生产环境建议添加密码。通过上面的操作会在/usr/share/elasticsearch目录下生成elastic-stack-ca.p12文件。

二、为集群中的节点生成证书和私钥

使用下面的命令为节点生成证书和私钥.

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

这里的文件保护密码就是上一步生成elastic-statck-ca.p12时你输入的密码。

通过上面的操作会生成一个包含节点证书、节点密钥和CA证书的文件elastic-certificates.p12,接下来我们就能够使用这个文件对传输层进行加密认证了。

三、修改Elastic配置启用新的数字证书

修改ES的配置文件,使用我们生成的数字证书。

首先将elastic-certificates.p12,复制到ES的配置目录下,并修改相关的文件属性。

cp /usr/share/elasticsearch/elastic-certificates.p12 /etc/elasticsearch/certs/
chown root:elasticsearch /etc/elasticsearch/certs/elastic-certificates.p12
chmod 660 /etc/elasticsearch/certs/elastic-certificates.p12

修改/etc/elasticsearch/elasticsearch.yml文件。

⚠️ 在修改配置文件之前将ES集群完全关闭。

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

elastic-certificates.p12复制到集群中所有其他节点的ES配置目录,修改文件属性,并按照上面的步骤修改ES配置文件。

scp /usr/share/elasticsearch/elastic-certificates.p12 root@192.168.50.7:/etc/elasticsearch/certs/
scp /usr/share/elasticsearch/elastic-certificates.p12 root@192.168.50.6:/etc/elasticsearch/certs/
四、将证书密码添加到ES的keystore

为了保证数据的安全ES使用密码库的方式保存密码。如果在前面生成elastic-certificates.p12添加了文件保护密码,则需要使用下面的命令把保护密码添加到密码库中。这样即使有人得到了你的证书文件,如果他不知道你的证书保护密码,同样无法使用,安全性得到了进一步的提升。

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

每个节点都执行上面的操作。

配置完成后,重启ES集群。

如果启动过程没有报错则新的配置就已经生效。此时通过kibana监控也可以查看集群当前的状态。

📓 此时这里并看不出有什么区别,但是懂的都懂,其实集群的安全性已经得到了很大的提升了。

🚀 通过手动配置数字证书,我们实现了为数字证书加密,这样即保证了集群内节点的通信使用TLS加密,同时又保证了数字证书有密码保护,即使被别人拿到,没有密码也无法使用。

好了,又到了给孩子准备午饭的时间了,接下来我会继续为我的集群进行安全配置,目前集群内部的安全得到了加强,但是集群与外部的通信,还没有开启SSL,后面的教程我会继续为kibana与ES之间的通信进行SSL安全认证配置。

相关推荐
看山还是山,看水还是。13 分钟前
MySQL 管理
数据库·笔记·mysql·adb
蒲公英100138 分钟前
vue3学习:axios输入城市名称查询该城市天气
前端·vue.js·学习
训山43 分钟前
【11】纯血鸿蒙HarmonyOS NEXT星河版开发0基础学习笔记-模块化语法与自定义组件
笔记·学习·华为·harmonyos·鸿蒙系统
①个程序员1 小时前
thinkphp 学习记录
学习
Elastic 中国社区官方博客1 小时前
使用 Vertex AI Gemini 模型和 Elasticsearch Playground 快速创建 RAG 应用程序
大数据·人工智能·elasticsearch·搜索引擎·全文检索
向上的车轮2 小时前
Django学习笔记十一:部署程序
笔记·学习·django
不灭锦鲤3 小时前
ssrf学习(ctfhub靶场)
网络·学习·安全
alfiy3 小时前
Elasticsearch学习笔记(五)Elastic stack安全配置二
笔记·学习·elasticsearch
权^3 小时前
MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)
大数据·数据库·学习·mysql