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

news2024/10/6 3:06:45

继续我们的实验。先谈一下我对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安全认证配置。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2191011.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在电脑上浏览手机界面

联想浏览器中,点击右键-》检查,进入开发者工具: 点击如上,红色框框选中的手机浏览模式即可。

【微服务】服务注册与发现、分布式配置管理 - Nacos

概述 Nacos是阿里巴巴旗下的一个开源产品,目前市场使用率还是比较高的。在最初开源时,Nacos选择内部三个产品合并并统一开源,这三个产品分别是:非持久化注册中心(Configserver)、持久化注册中心&#xff0…

InnoDB 事务模型

文章目录 InnoDB 事务模型事务ACID特性事务隔离级别 事务操作事务并发问题事务数据读写类型Consistent Nonlocking Reads 快照读Locking Reads 加锁读 MVCC 并发控制实现原理InnoDB 隐藏列Read ViewUndo log实现过程 MVCC与隔离级别MVCC和辅助索引 幻读可重复读MVCC会出现幻读的…

腾讯自研Git客户端,助力每个人都可以轻松使用Git

工具介绍 UGit是一款腾讯自研的Git客户端,为了让每个人都可以轻松使用Git,从而提高开发效率和团队协作的流畅性。支持工蜂MR/CR,工蜂议题管理,另外对于Git的原生特性有着深度支持。 支持的系统 支持macOS 10.11、Apple Silicon和…

【数据结构】什么是哈希表(散列表)?

🦄个人主页:修修修也 🎏所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 📌哈希表的概念 📌哈希函数的构造方法 🎏直接定址法 🎏除留余数法 🎏平方取中法 🎏折叠法 &#x…

自动驾驶的技术实现及原理

自动驾驶技术是现代科技领域中一项引人注目的创新,它具有变革运输行业并提升道路安全的潜力。随着人工智能、传感器技术以及数据处理能力的不断提升,自动驾驶车辆已经从实验室研究逐渐走向现实应用。 自动驾驶的技术实现及原理 1. 自动驾驶技术的核心…

【深度学习】— 多层感知机介绍、 隐藏层、从线性到非线性、线性模型的局限性

【深度学习】— 多层感知机介绍 4.1 多层感知机4.1.1 隐藏层线性模型的局限性引入隐藏层 4.2 从线性到非线性线性组合的局限性引入非线性堆叠更多隐藏层 4.1 多层感知机 在第 3 节中,我们介绍了 softmax 回归,并实现了其从零开始的实现和基于高级 API 的…

UART通信协议

什么是UART UART ( Universal Asynchronous Receiver/Transmitter, 通用异步收发器) 是一种常用的串行通信协议,用于在 计算机和外部设备之间传输数据。它是一种异步通信协议,也就是说数据的传输不需要事先建立好同步时钟信号。 UART&#xf…

Unity MVC框架演示 1-1 理论分析

本文仅作学习笔记分享与交流,不做任何商业用途,该课程资源来源于唐老狮 1.一般的图解MVC 什么是MVC我就不说了,老生常谈,网上有大量的介绍,想看看这三层都起到什么职责?那就直接上图吧 2.我举一个栗子 我有…

深入理解 JavaScript 事件循环机制:单线程中的异步处理核心

深入理解 JavaScript 事件循环机制:单线程中的异步处理核心 JavaScript 是一门单线程的编程语言,也就是说它在同一时间只能执行一个任务。然而,现代 Web 应用经常需要处理大量的异步操作,如用户输入、网络请求、定时器等。为了确…

Vue的基本用法及模板语法

Vue.js使用了基于 HTML 的模板语法,允许开发者声明式地将 DOM 绑定至底层 Vue实例的数据。所有 Vue.js的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析。 在底层的实现上,Vue将模板编译成虚拟 DOM 渲染函数。结合响应系…

实现Xshell与虚拟机中Linux服务器的连接(附常见错误解决)

前言 Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 本文将介绍Xshell与虚拟机中Linux服务器连接…

前缀线性基——关于目前的理解以及一些样题

怎么说呢?在前几天我总结了了有关线性基的一篇博客,线性基用来去求整个区间的异或最值问题 前缀线性基——用于统计一个区间内的异或最值问题 那么我们如何去统计呢?那么就要去存储一个区间的异或空间线性基,因此我们的思路就是用…

【python】追加写入excel

输出文件运行前(有两张表,“表1”和“Sheet1”): 目录 一:写入单表(删除所有旧工作表,写入新表)二:写入多表(删除所有旧工作表,写入新表&#x…

平衡二叉搜索树之 AVL 树的模拟实现【C++】

文章目录 AVL树的简单介绍全部的实现代码放在了文章末尾准备工作包含头文件类的成员变量 构造函数和拷贝构造swap和赋值运算符重载析构函数findinsert[重要]当parent的平衡因子为1/-1时,如何向上更新祖先节点的平衡因子呢?怎么旋转?左单旋右单…

Windows Ubuntu下搭建深度学习Pytorch训练框架与转换环境TensorRT

Windows Ubuntu下搭建深度学习Pytorch训练框架与转换环境TensorRT JetBrains2024(IntelliJ IDEA、PhpStorm、RubyMine、Rider……)安装包Anaconda Miniconda安装.condarc 文件配置镜像源查看conda的配置和源(channel)自定义conda虚拟环境路径conda常用命…

Chromium 中JavaScript Screen API接口c++代码实现

Screen - Web API | MDN (mozilla.org) Screen Screen 接口表示一个屏幕窗口,往往指的是当前正在被渲染的 window 对象,可以使用 window.screen 获取它。 请注意:由浏览器决定提供屏幕对象,此对象一般通过当前浏览器窗口活动状…

《python语言程序设计》2018版第8章19题几何Rectangle2D类(下)-头疼的几何和数学

希望这个下集里能有完整的代码 一、containsPoint实现 先从网上找一下Statement expected, found Py:DEDENTTAB还是空格呢??小小总结如何拆分矩形的四个点呢.我们来小小的测试一下这个函数结果出在哪里呢???修改完成variable in function should be lowercase 函数变量应该…

No.2 笔记 | 网络安全攻防:PC、CS工具与移动应用分析

引言 在当今数字化时代,网络安全已成为每个人都应该关注的重要话题。本文将总结一次关于网络安全攻防技术的学习内容,涵盖PC端和移动端的恶意程序利用,以及强大的渗透测试工具Cobalt Strike的使用。通过学习这些内容,我们不仅能够了解攻击者的手法,更能提高自身的安全意识和防…

【牛顿迭代法求极小值】

牛顿迭代法求极小值 仅供参考 作业内容与要求 作业内容 作业要求 递交报告 代码 编程实现 计算偏导数 故上述非线性方程组的根可能为 f ( x , y ) f(x, y) f(x,y)的极值点,至于是极小值点还是极大值点或鞍点,就需要使用微积分中的黑塞矩阵来判断了。…