Elasticsearch 单节点安全配置与用户认证

Elasticsearch 单节点安全配置与用户认证

安全扫描时发现了一个高危漏洞:Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时,需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤,为单节点 Elasticsearch 实现最基本的安全功能,包括启用 Elasticsearch 自带的安全功能和配置传输层 SSL,以确保数据传输的加密和访问权限的严格管理。 (elaticsearch版本7.9.2)


修改配置文件

编辑单节点的 elasticsearch.yml 文件,确保包含以下内容:

# 启用 Elasticsearch 的安全功能
xpack.security.enabled: true# 启用传输层 SSL
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.client_authentication: required# 指定证书路径(使用默认生成的 P12 文件)
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

生成证书

在 Elasticsearch 安装目录中,使用 elasticsearch-certutil 工具生成证书

生成 CA 文件

cd /bin
./elasticsearch-certutil ca# (设置证书密码)可以直接回车选择不设置密码
Please enter the desired output file [elastic-stack-ca.p12]: 
Enter password for elastic-stack-ca.p12 :
  • 输出文件:elastic-stack-ca.p12

  • 选择密码(可留空)

    image-20241203165352589

生成节点证书

cd /bin
./elasticsearch-certutil cert --ca elastic-stack-ca.p12# (设置证书密码)可以直接回车选择不设置密码
Enter password for CA (elastic-stack-ca.p12) : 
Please enter the desired output file [elastic-certificates.p12]: 
Enter password for elastic-certificates.p12 : 
  • 输出文件:elastic-certificates.p12

  • 可选择为证书设置密码

    image-20241203165525302

将证书复制到配置目录

将生成的 elastic-certificates.p12 文件移动到 Elasticsearch 的配置目录(通常是 $ES_HOME/config)下:

mv elastic-certificates.p12 $ES_HOME/config
# 赋权为es用户权限
chown es:es elastic-certificates.p12

image-20241203165304163


(可选)存储证书密码

如果生成证书时设置了密码,需要将密码存储到 Elasticsearch 密钥库中:

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

按照提示输入密码


启动 Elasticsearch

配置完成后,切换为 es 用户启动 Elasticsearch 或重启ES服务:

./elasticsearch

如果一切正常,日志中应显示以下内容:

[2024-12-03T14:27:33,401][INFO ][o.e.x.s.s.SecurityStatusChangeListener] [es-xcu-node] Active license is now [BASIC]; Security is enabled

验证安全配置

设置用户密码

默认情况下,Elasticsearch 启用了几个内置用户(例如 elastic)。运行以下命令设置密码:

cd /bin
./elasticsearch-setup-passwords interactive

按提示为用户设置密码,特别是 elastic 用户。

访问 REST 接口

使用 curl 或其他工具测试:

# 未带认证信息访问会提示报错
curl http://localhost:9200
# 提示 401 错误,表明未授权# 带认证信息的请求
curl -u elastic:设置的密码 http://localhost:9200

如果返回正常的 Elasticsearch 信息,则配置成功。

浏览器访问

image-20241203170846599


Spring Boot 项目中配置 Elasticsearch 连接账户密码

1. 引入依赖

pom.xml 中添加 Elasticsearch 客户端依赖:

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.9.2</version>
</dependency>

2. 配置类

在 Spring Boot 项目中,通过 Java 配置类创建 RestHighLevelClient Bean:

import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.nio.client.HttpAsyncClientBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.nio.client.HttpAsyncClients;
import org.apache.http.nio.client.HttpAsyncClientBuilder;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ElasticsearchConfig {@Value("${elasticsearch.host}")private String host;@Value("${elasticsearch.port}")private int port;@Value("${elasticsearch.username}")private String username;@Value("${elasticsearch.password}")private String password;@Beanpublic RestHighLevelClient restHighLevelClient() {// 配置用户名和密码BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY,new UsernamePasswordCredentials(username, password));// 构建 RestClientRestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(host, port)).setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider));return new RestHighLevelClient(restClientBuilder);}
}

3. 配置文件

application.ymlapplication.properties 中添加 Elasticsearch 的相关配置:

elasticsearch:host: localhostport: 9200username: elasticpassword: elasticPWD

4. 使用示例

在需要使用 RestHighLevelClient 的地方直接注入并使用:

import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.core.MainResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class ElasticsearchService {@Autowiredprivate RestHighLevelClient restHighLevelClient;public String getClusterInfo() {try {MainResponse response = restHighLevelClient.info(RequestOptions.DEFAULT);return response.getClusterName().toString();} catch (Exception e) {e.printStackTrace();return "Error fetching cluster info";}}
}

5. 启动项目并验证

启动项目后,调用 ElasticsearchService 中的方法,验证是否成功连接到 Elasticsearch

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

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

相关文章

Vulhub:Shiro[漏洞复现]

目录 CVE-2010-3863(Shiro未授权) 使用浏览器访问靶场主页面 使用Yakit进行抓包 使用ffuf对靶机8080端口进行根路径FUZZ CVE-2016-4437(Shiro-550) 使用浏览器访问靶场主页面 使用Yakit进行抓包 使用Yakit反连中自带的Yso-Java Hack进行漏洞利用 首先运行脚本生成一个…

数学拯救世界(一)———寻“数”记

一、 很久很久以前&#xff0c;在一个只认识整数和小数的国度&#xff0c;有一个很残暴的国王提了一个要求&#xff1a;要是不能表示出把一段1米的绳子三等分后的大小&#xff0c;就要把所有的大臣杀掉。 1➗3 0.333&#xff0c;怎么办呀&#xff1f;怎么办呀&#xff1f; 袁q…

Codeforces Round 991 (Div. 3)题解

先随随便便写一点东西吧&#xff0c;毕竟只是一场div3 A. Line Breaks 思路&#xff1a;一道很简单的模拟题吧&#xff0c;就是遍历一遍&#xff0c;当大于x的时候就break&#xff0c;然后前面那个就是找到的前x个字的总长度不超过m #include<bits/stdc.h> using names…

掌握谈判技巧,达成双赢协议

在当今竞争激烈且合作频繁的社会环境中&#xff0c;谈判成为了我们解决分歧、谋求共同发展的重要手段。无论是商业合作、职场交流&#xff0c;还是国际事务协商&#xff0c;掌握谈判技巧以达成双赢协议都具有极其关键的意义。它不仅能够让各方在利益分配上找到平衡点&#xff0…

基于Matlab特征提取与浅层神经网络的数字图像处理乳腺癌检测系统(GUI界面+训练代码+数据集)

本研究提出了一种结合数字图像处理技术、特征提取与浅层神经网络的创新癌症检测系统&#xff0c;旨在为医学图像的分析和早期癌症检测提供有效支持。系统主要处理癌症与正常组织的医学图像&#xff0c;通过灰度共生矩阵&#xff08;GLCM&#xff09;等方法&#xff0c;从图像中…

Backblaze 2024 Q3硬盘故障质量报告解读

作为一家在2021年在美国纳斯达克上市的云端备份公司&#xff0c;Backblaze一直保持着对外定期发布HDD和SSD的故障率稳定性质量报告&#xff0c;给大家提供了一份真实应用场景下的稳定性分析参考数据&#xff1a; 以往报告解读系列参考&#xff1a; Backblaze发布2024 Q2硬盘故障…

河工oj第七周补题题解2024

A.GO LecturesⅠ—— Victory GO LecturesⅠ—— Victory - 问题 - 软件学院OJ 代码 统计 #include<bits/stdc.h> using namespace std;double b, w;int main() {for(int i 1; i < 19; i ) {for(int j 1; j < 19; j ) {char ch; cin >> ch;if(ch B) b …

[ABC234A] Weird Function

解题思路 这是一道模拟题…… 设置一个函数 &#xff0c;返回值为 。 最后答案就是 。 代码 记得开 long long ! #include<bits/stdc.h> using namespace std;long long t; long long f(long long x) {return x*xx*23; }int main() {cin>>t;cout<<f(f(f…

蓝牙键鼠无法被电脑识别

起因是我的键鼠是三模的&#xff0c;但是我蓝牙模式我只用过几次&#xff0c;基本一直使用的是有线模式&#xff0c;最近突然要用无线连接&#xff0c;如果使用收发器就显得过于繁琐&#xff0c;还占用usb口&#xff0c;因此想用蓝牙连&#xff0c;但是由于 win10更新了英特尔…

【C#设计模式(18)——中介者模式(Mediator Pattern)】

前言 中介者模式&#xff1a;是两者之间通过第三者来帮助传话。 代码 //抽象接收者public abstract class Receiver{protected Mediator mediator;protected Receiver(Mediator mediator){this.mediator mediator;}public abstract void SendMessage(string message);public a…

动态计算加载图片

学习啦 别名路径&#xff1a;①npm install path --save-dev②配置 // vite.config,js import { defineConfig } from vite import vue from vitejs/plugin-vueimport { viteStaticCopy } from vite-plugin-static-copy import path from path export default defineConfig({re…

Java HashMap用法详解

文章目录 一、定义二、核心方法三、实例演示3.1、方法示例3.2、get()方法注意点&#xff01; 一、定义 Java 的 HashMap 是 Java 集合框架中的一个非常重要的类&#xff0c;它实现了 Map 接口。HashMap基于哈希表的数据结构&#xff0c;允许使用键-值对存储数据。这种存储方式使…

淘宝直播间智能化升级:基于LLM的学习与分析

自营直播应用技术团队负责的业务中&#xff0c;淘宝买菜的直播业务起步较晚&#xff0c;业务发展压力较大&#xff0c;业务上也就有了期望能够对一些二方的标杆直播间进行学习&#xff0c;并将其优点应用到自己直播间的需求。 最初 - 人海战术&#xff0c;学习PK 业务侧最直接的…

有的开发者用Apache-2.0开源协议,但是不允许商用?合理吗

Apache 2.0开源协议是设计用来允许商业使用的。该协议明确授予了使用者在遵守许可条款的情况下&#xff0c;对软件进行复制、修改、分发以及商业使用的权利。这包括但不限于&#xff1a; 1. 永久、全球性的版权许可&#xff1a;允许复制、准备衍生作品、公开展示、公开演出、从…

java学习 -----项目(1)

项目 写在前面的话&#xff1a;耳机没电&#xff0c;先来写写今早的感受。说实话&#xff0c;我并不喜欢我们的职业规划老师&#xff0c;满嘴荒唐言&#xff0c;被社会那所大缸浸染了一身社会气。课快结束时&#xff0c;老师问还有谁的视频没做&#xff0c;我把手举了起来。&a…

某j vue3 ts 随笔

因为ts组件封装的缘故&#xff0c;使用某个组件就必须按照这个组件的规则使用&#xff0c;老是忘记&#xff0c;这里就记一下吧 1.ApiSelect 组件 {label: 角色,field: selectedroles,component: ApiSelect,componentProps: {mode: multiple,api: getAllRolesListNoByTenant,la…

红旗Asianux8.1+高斯GaussDB6.0安装手册

一、简介 服务器系统&#xff1a;红旗Asianux8.1&#xff08;需联网&#xff09;高斯GaussDB6.0&#xff1a;openGauss_6.0.0 极简版 二、安装准备 关闭防火墙 systemctl stop firewalld systemctl disable firewalld###查看状态 systemctl status firewalld 上传安装包 创建组…

如何实现Docker容器自动更新?从此无需再手动更新!(如何实现docker容器的自动更新、docker容器如何实现定时更新)

以下是经过优化后的完整文章内容: 文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Docker 容器自动更新的需求 📒📝 解决方案概述📝 Docker 容器自动更新📝 Docker 容器定期更新📝 实现指定容器更新或排除更新⚓️ 相关链接 ⚓️📖 介绍 📖 随着容器化技术的普…

python异常、模块和包

文章目录 异常异常简介异常处理捕获所有异常捕获指定异常捕获多个指定异常 异常else、finally异常的传递 模块模块导入自定义模块 包自定义python包安装第三方python包 综合案例 异常 异常简介 异常就是程序运行过程中出现了错误 f open(RLlearn_2.txt, "r", enc…

Python内存泄漏 —— 宏观篇

Python内存泄漏 —— 宏观篇 应该弄清楚哪些问题 内存情况如何&#xff0c;是否一直增长&#xff1f;哪些是异常对象&#xff1f;这类对象占总内存多大比例&#xff1f;异常对象为何泄漏&#xff1f;如何使其正常释放&#xff1f;如何确定异常对象正常释放了&#xff1f;如何…