在不安全的集群上启用 Elasticsearch Xpack 安全性

news2025/1/31 23:46:48

本博文详细描述如何把一个没有启动安全的 Elasticsearch 集群升级为一个带有 HTTPS 访问的启用 Elasticsearch xpack 安全的集群。

为了增强 Elasticsearch 集群的安全性,你需要执行完全集群重启,并在客户端进行一些更改。 启用身份验证后,所有索引和搜索数据的请求都将需要用户名和密码或 token。

安装

如果你还不知道如何安装一个不含有安全的 Elasticsearch 8.x 集群,那么请参考之前的文章:

  • Elasticsearch:如何在 Docker 上运行 Elasticsearch 8.x 进行本地开发

  • Elastic Stack 8.0 安装 - 保护你的 Elastic Stack 现在比以往任何时候都简单 (参考文章的 “如何配置 Elasticsearch 不带安全性” 部分)

在本显示中,我们将参考上面的第二篇文章在本地部署一个不带安全的 Elasticsearch 集群。在第一次启动 Elasticsearch 之前,我们必须修改 elasticsearch.yml 文件如下:

xpack.security.enabled: false
xpack.security.http.ssl.enabled: false

只有这样的配置,我们才可以安装出一个没有任何安全的 Elasticsearch 集群。安装完毕后,我们可以在 http://localhost:9200 来访问 Elasticsearch 集群。

$ curl http://localhost:9200
{
  "name" : "liuxgm.local",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "hHUucYL9Q0GhcC9QivRlDg",
  "version" : {
    "number" : "8.10.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "e338da74c79465dfdc204971e600342b0aa87b6b",
    "build_date" : "2023-09-07T08:16:21.960703010Z",
    "build_snapshot" : false,
    "lucene_version" : "9.7.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

一旦安装完毕,我们在下面的步骤中来进行展示。

启动 xpack 安全

步骤:

  • 创建 SSL Elastic 证书
  • 将 SSL 证书复制到所有节点
  • 更新 elasticsearch.yml
  • 停止所有 Elasticsearch 节点
  • 启动所有 Elasticsearch 节点
  • 创建/重置内置用户密码

下面,我们分别进行展示各个步骤。

1. 创建 SSL Elastic 证书

  • 要启用 TLS 通信,需要 SSL 证书。 首先创建 SSL 证书。 注意:只需创建一次证书并将其复制到所有节点。
  • 创建 CA 证书。

./bin/elasticsearch-certutil ca --days 3650
[Press Enter]
[Press Enter]
$ pwd
/Users/liuxg/test/elasticsearch-8.10.0
$ ./bin/elasticsearch-certutil ca --days 3650
This tool assists you in the generation of X.509 certificates and certificate
signing requests for use with SSL/TLS in the Elastic stack.

The 'ca' mode generates a new 'certificate authority'
This will create a new X.509 certificate and private key that can be used
to sign certificate when running in 'cert' mode.

Use the 'ca-dn' option if you wish to configure the 'distinguished name'
of the certificate authority

By default the 'ca' mode produces a single PKCS#12 output file which holds:
    * The CA certificate
    * The CA's private key

If you elect to generate PEM format certificates (the -pem option), then the output will
be a zip file containing individual files for the CA certificate and private key

Please enter the desired output file [elastic-stack-ca.p12]: 
Enter password for elastic-stack-ca.p12 : 
$ ls
LICENSE.txt          bin                  elastic-stack-ca.p12 logs
NOTICE.txt           config               jdk.app              modules
README.asciidoc      data                 lib                  plugins

在上面,我们可以看到生产的 elastic-stack-ca.p12 文件。如果你是针对 Linux 的安装,那么你的证书必须是位于 /usr/share/elasticsearch 目录下。

  • 在单个节点上,为集群中的所有节点生成证书和私钥。
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --days 3650
[Press Enter]
[Press Enter]
$ ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --days 3650
This tool assists you in the generation of X.509 certificates and certificate
signing requests for use with SSL/TLS in the Elastic stack.

The 'cert' mode generates X.509 certificate and private keys.
    * By default, this generates a single certificate and key for use
       on a single instance.
    * The '-multiple' option will prompt you to enter details for multiple
       instances and will generate a certificate and key for each one
    * The '-in' option allows for the certificate generation to be automated by describing
       the details of each instance in a YAML file

    * An instance is any piece of the Elastic Stack that requires an SSL certificate.
      Depending on your configuration, Elasticsearch, Logstash, Kibana, and Beats
      may all require a certificate and private key.
    * The minimum required value for each instance is a name. This can simply be the
      hostname, which will be used as the Common Name of the certificate. A full
      distinguished name may also be used.
    * A filename value may be required for each instance. This is necessary when the
      name would result in an invalid file or directory name. The name provided here
      is used as the directory name (within the zip) and the prefix for the key and
      certificate files. The filename is required if you are prompted and the name
      is not displayed in the prompt.
    * IP addresses and DNS names are optional. Multiple values can be specified as a
      comma separated string. If no IP addresses or DNS names are provided, you may
      disable hostname verification in your SSL configuration.


    * All certificates generated by this tool will be signed by a certificate authority (CA)
      unless the --self-signed command line option is specified.
      The tool can automatically generate a new CA for you, or you can provide your own with
      the --ca or --ca-cert command line options.


By default the 'cert' mode produces a single PKCS#12 output file which holds:
    * The instance certificate
    * The private key for the instance certificate
    * The CA certificate

If you specify any of the following options:
    * -pem (PEM formatted output)
    * -multiple (generate multiple certificates)
    * -in (generate certificates from an input file)
then the output will be be a zip file containing individual certificate/key files

Enter password for CA (elastic-stack-ca.p12) : 
Please enter the desired output file [elastic-certificates.p12]: 
Enter password for elastic-certificates.p12 : 

Certificates written to /Users/liuxg/test/elasticsearch-8.10.0/elastic-certificates.p12

This file should be properly secured as it contains the private key for 
your instance.
This file is a self contained file and can be copied and used 'as is'
For each Elastic product that you wish to configure, you should copy
this '.p12' file to the relevant configuration directory
and then follow the SSL configuration instructions in the product guide.

For client applications, you may only need to copy the CA certificate and
configure the client to trust this certificate.
$ ls
LICENSE.txt              data                     logs
NOTICE.txt               elastic-certificates.p12 modules
README.asciidoc          elastic-stack-ca.p12     plugins
bin                      jdk.app
config                   lib

从上面的输出中我们可以看出来有一个新的文件 elastic-certificates.p12 被生成。

2. 拷贝 SSL 证书到所有的节点

针对子家压缩包进行安装的 Elasticsearch 来说,我们可以把刚生产的证书拷贝到相应的 config 目录下:

$ pwd
/Users/liuxg/test/elasticsearch-8.10.0
$ cp elastic-certificates.p12 config/

针对 Linux 环境,我们可以使用如下的命令来进行拷贝。必须在 “/usr/share/elasticsearch” 下创建 “elastic-certificates.p12” 文件。 创建 SSL 证书 (elastic-certificates.p12) 后,将其复制并粘贴到所有节点上。

mv /usr/share/elasticsearch/elastic-certificates.p12 /etc/elasticsearch/
chown elasticsearch:elasticsearch /etc/elasticsearch/ -R

3. 更新 elasticsearch.yml 文件

编辑 elasticsearch.yml 文件并添加或更新以下设置:

xpack.security.enabled: true
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: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

xpack.security.http.ssl:
  enabled: true
  keystore.path: elastic-certificates.p12

如果你是按照本教程安装的没有设置任何安全的 Elasticsearch 集群,那么请删之前在安装时的如下两行,再进行粘贴上面的代码:

注意:证书的默认路径是 “/etc/elasticsearch/elastic-certificates.p12”。 还有:确保没有重复设置。

4. 停止所有的 Elasticsearch 节点

Linux:

service elasticsearch stop

如果是字节压缩的安装,你可以使用 Ctrl + C 来终止集群的运行。

5. 启动所有 Elasticsearch 节点

从主节点开始,启动所有 Elasticsearch 节点。

Linux:

service elasticsearch start

针对自解压的安装,你可以使用:

./bin/elasticsearch

从主节点开始可确保 Elasticsearch 集群的核心在数据节点上线之前启动并运行。 此顺序对于维护集群稳定性和数据完整性非常重要。

6. 创建/重置内置用户密码

bin/elasticsearch-reset-password -u -i elastic
$ pwd
/Users/liuxg/test/elasticsearch-8.10.0
$ ./bin/elasticsearch-setup-passwords interactive
******************************************************************************
Note: The 'elasticsearch-setup-passwords' tool has been deprecated. This       command will be removed in a future release.
******************************************************************************

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y


Enter password for [elastic]: 
Reenter password for [elastic]: 
Enter password for [apm_system]: 
Reenter password for [apm_system]: 
Enter password for [kibana_system]: 
Reenter password for [kibana_system]: 
Enter password for [logstash_system]: 
Reenter password for [logstash_system]: 
Enter password for [beats_system]: 
Reenter password for [beats_system]: 
Enter password for [remote_monitoring_user]: 
Reenter password for [remote_monitoring_user]: 
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
passwordChanged password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

为方便说明,我们在上面把密码都设置为 “password”。

7. 测试

我们使用如下的命令来进行测试:

curl -k -u elastic:password  https://localhost:9200
$ curl -k -u elastic:password  https://localhost:9200
{
  "name" : "liuxgm.local",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "hHUucYL9Q0GhcC9QivRlDg",
  "version" : {
    "number" : "8.10.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "e338da74c79465dfdc204971e600342b0aa87b6b",
    "build_date" : "2023-09-07T08:16:21.960703010Z",
    "build_snapshot" : false,
    "lucene_version" : "9.7.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

常见问题及解决方案:

  • SSL 证书路径:确保 “elastic-certificates.p12” 路径正确。 在 Debian 或 RPM 安装中,默认路径是 “/etc/elasticsearch”。
  • SSL 证书权限:验证所有 Elasticsearch 节点是否具有 SSL 证书和足够的访问权限。
  • SSL 证书密码:在证书创建过程中,未定义密码,但 Elasticsearch v8 可能有默认密码。 检查 “./bin/elasticsearch-keystore list” 并删除为“xpack.security.transport.ssl.*”定义的任何密码。
  • Elasticsearch-Reset-Password 命令(1):确保您可以通过 localhost 访问 Elasticsearch。 如果没有,请在命令末尾添加 “—url”。 检查是否有任何代理问题。
  • Elasticsearch-Reset-Password命令(2):该命令需要数据节点连接到集群,因为它需要将 elastic 用户密码添加到 '.security' 索引中。 在运行命令之前确保数据节点已连接。
  • Kibana 不工作:Elasticsearch v8 之后,你无法在 Kibana 中使用 elastic 超级用户。 使用 “kibana_system” 用户。
  • Kibana 系统无法登录:使用 elastic 用户登录 Kibana; “kibana_system” 用户保留用于 Kibana 和 Elasticsearch 之间的通信。

更多阅读:Security:如何安装 Elastic SIEM 和 EDR

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

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

相关文章

分析谐波失真

目录 简介 查看非线性的影响 量化非线性失真 降低谐波失真的输入衰减 SNR THD 和 SINAD 当作输入衰减的函数 用于消除失真的后处理 组合方法 总结 此示例说明如何分析在具有噪声的情况下弱非线性系统的谐波失真。 简介 在此示例中,我们将研究放大器的简化模…

推荐动漫《头文字D》

《头文字D》是漫画家重野秀一作画的青年漫画,从1995年开始在《周刊Young Magazine》上连载,于2013年7月29日完结,电子版由漫番漫画连载 [1] 。已被改编成同名动画和电影,还有多本探讨汽车驾驶技巧的周边专书。头文字D漫画刚出版即…

机器学习: 初探 定义与应用场景

机器学习 第一课 初探 定义与应用场景 机器学习 第一课 初探 定义与应用场景机器学习的历史机器学习为什么重要?机器学习的定义机器学习在日常生活中的应用推荐系统语音识别图像识别 商业领域的机器学习金融风险评估股票市场预测客户关系管理 机器学习在医疗领域的应用疾病预测…

9、Docker 安装 Redis

1、下载镜像 docker pull redis:3.2.10 2、本机创建redis目录并修改配置文件 1)创建目录 mkdir /usr/local/redis 2)进入redis目录 cd /usr/local/redis 3)创建data目录 mkdir data 4)创建redis.conf文件 vi redis.conf 5&a…

人工智能轨道交通行业周刊-第63期(2023.10.9-10.15)

本期关键词:一体化智慧列车运行系统、车辆数字化运维管理、智能传感器、PHM、LKJ 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通RailMetro…

数据结构之手撕顺序表(增删查改等)

0.引言 在本章之后,就要求大家对于指针、结构体、动态开辟等相关的知识要熟练的掌握,如果有小伙伴对上面相关的知识还不是很清晰,要先弄明白再过来接着学习哦! 那进入正题,在讲解顺序表之前,我们先来介绍…

【HCIP】HCIA复习

目录 大纲 情景代入 访问百度/谷歌服务器的准备工作 1、计算机网络发展第一阶段人机交互的加工过程 2、OSI参考模型 3、TCP/IP参考模型 访问谷歌(百度)服务器的流程 1、主机需要一个IP地址才能上网(本场景中通过DHCP服务获取IP地址&a…

【面试题解析】搜狐畅游:Redis IO多路复用中select、poll和epoll有何区别?

大家好,我是小米,今天给大家分享一个我在搜狐畅游面试中被问到的问题:请说一下 Redis 的 IO 多路复用中 select、poll、epoll之间的区别是什么?为了更好地回答这个问题,我将从以下几个角度进行阐述:概念简介…

CANoe仿真面板设计

CANoe仿真面板设计 CANoe Panel介绍关键步骤操作步骤添加系统变量添加Control面板添加Display面板 创建Desktop CANoe Panel介绍 panel(面板〕是CA№e的一个重要功能,为总线仿真提供了图形化的界面。用户可以在面板上添加合适的控件实时地改变信号或变量的值。 控件…

无人机新手防炸飞行技巧

不要在室内飞行,容易撞墙。起飞前设置好避障和返航模式。使用模拟器熟练掌握操控。选择开阔环境目视起飞。使用低速档平稳飞行。合理使用避障功能,不要盲目依赖。使用九宫格避障法。留意电量,及时返航。极低电量时放弃强行返航。飞行后及时为电池充电保养。

基于springboot实现音乐网站与分享平台项目【项目源码+论文说明】

摘要 本论文主要论述了如何使用JAVA语言开发一个音乐网站与分享平台 ,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述音乐网站与分享平台的当前背景以及系统开…

oppo A57刷机包更新

ozip转zip方便把官网下载的ozip包转换为可刷机的zip sdat2img-master方便发烧友制作system.img详情请看redmi.txt

finalshell连接虚拟机中的ubuntu

finalshell下载地址: https://www.finalshell.org/ubuntu设置root密码: sudo passwd rootubuntu关闭防火墙: sudo ufw disable安装ssh # sudo apt update #更新数据(可以不执行) # sudo apt upgrade #更新软件(可以不执行) sudo apt install open…

基于workbench的PTFE矩形密封圈压缩回弹仿真分析

研究背景: 近年来随着工业发展和科技进步,高压容器使用场景逐渐增大,使用环境越发苛刻,如高温、高压以及内部压力的波动,这都对容器端面密封性能的要求更为严格。端面密封所用的密封件必须具备优良的回弹性能和耐化学…

毅速丨模具3D打印材料有哪些选择

当前1.2709和CX是市面上最常用的3D打印模具钢材料,模具3D打印有没有更多的材料选择呢? 据了解,上海毅速推出的几款3D打印新材料正在被越来越多的行业所采用。如毅速的EM191S高性能高抛光不锈钢粉末,这款材料的抗开裂和耐腐蚀性能是…

使用VirtualBox安装Ubuntu系统【保姆级】

一、下载VirtualBox软件安装包 进入VirtualBox官网下载:Oracle VM VirtualBox 二、下载Ubuntu系统镜像 进入Ubuntu官网:https://cn.ubuntu.com/ 1. 点击【桌面系统】,进入桌面系统界面 2. 点击【下载Ubuntu】 ,进入Ubuntu桌面…

基于springboot实现在线blog博客平台系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现在线blog博客平台系统演示 摘要 社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个用户的使用。互联网具有便利性,速度快,效率高&#x…

【Java学习之道】线程的创建与启动

引言 如果你正在学习Java编程,那么你可能已经知道Java是一种多线程编程语言。多线程编程可以帮助我们更高效地利用CPU,同时完成多项任务。但是,你可能还不知道如何在Java中创建和启动线程。在本节中,我们将深入探讨Java中的线程创…

MAC上使用Wireshark常见问题

文章目录 介绍正文启动异常-Permission denied解决方法 过滤协议和地址指定源地址和目的地址调整 time format 介绍 简单记录Wireshark在日常使用过程中的遇到的小case。 正文 Wireshark相较于tcpdump使用较为简单,交互也更为友好。 点击Start即可启动抓包 启动…

java高校自习室座位预订系统springboot+vue

自习室预订座位管理系统被人们投放于现在的生活中进行使用,该款管理类软件就可以让管理人员处理信息的时间介于十几秒之间。在这十几秒内就能完成信息的编辑等操作。有了这样的管理软件,自习室预订座位管理信息的管理就离无纸化办公的目标更贴近了。 本项…