Elasticsearch设置 X-Pack认证,设置账号和密码

前言

以下Elasticsearch版本:7.9.3

ES自带的X-Pack密码验证:

  • X-Pack是elasticsearch的一个扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中,所以我们想要开启账号密码验证,就需要开启X-Pack密码校验。
  • 5.X版本之前:Elasticsearch没有自带X-Pack,X-Pack的各个功能(如安全、警报、监视、图形和报告)是独立的单元。
  • 5.X版本:Elasticsearch对原本的安全、警报、监视、图形和报告等功能做了一个封装,形成了X-Pack,但X-Pack仍需要额外安装。
  • 6.3版本及之后:X-Pack已经集成在一起发布,无需额外安装。不过,基础安全功能在付费黄金版中才可用。
  • 6.8及以上版本:默认带上了X-Pack认证插件且免费。
  • 7.0+版本:默认情况下,当安装Elasticsearch时,会安装X-Pack,无需单独再安装。

Elasticsearch的X-Pack 详细简介:点我查看

一、修改ES配置文件

在ES配置文件config 文件夹:elasticsearch.yml 添加如下配置

bash 复制代码
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true

若想关闭x-pack密码验证,如下操作:

bash 复制代码
xpack.security.enabled: false

二、重新启动ES

找到ES路径 bin 下面 双击 elasticsearch.bat 重新启动后,以上配置才生效

启动完成:

三:通过命令设置ES密码

通过管理员打开cmd窗口,切换到ES文件夹 bin 路径下面 执行以下命令:

bash 复制代码
elasticsearch-setup-passwords interactive 

1、出现以下情况,输入:y

2、可以开始设置密码了,一次性需要设置多个密码,密码尽量保证一致

其中,用户权限分别如下:

  1. elastic 账号:拥有 superuser 角色,是内置的超级用户
  2. kibana 账号:拥有 kibana_system 角色,用户 kibana 用来连接 elasticsearch 并与之通信。Kibana 服务器以该用户身份提交请求以访问集群监视 API 和 .kibana 索引。不能访问 index。
  3. logstash_system 账号:拥有 logstash_system 角色。用户 Logstash 在 Elasticsearch 中存储监控信息时使用。

密码设置完成后,重新启动ES

四:访问ES 验证是否成功?

访问 127.0.0.1:9200

bash 复制代码
ES用户名:elastic
passWord: 刚才设置的密码


密码设置成功!

五:kibana 配置ES

1、修改kibana 配置文件 kibana.yml ,添加如下配置

bash 复制代码
elasticsearch.hosts: ["http://127.0.0.1:9200"]
elasticsearch.username: "elastic"
elasticsearch.password: "zxcv9527" 

2、执行 bin下面的 kibana.bat 启动

3、浏览器访问 127.0.0.1:5601 输入账号和密码

备注:注意网站登录的账号和密码是ES

bash 复制代码
kibana 账号:elastic
passWord: zxcv9527

六:Spring Boot 配置ES

1、yml文件配置

在配置 Spring Data Elasticsearch 以使用带有身份验证的 Elasticsearch 客户端时,你需要确保配置文件中包含了正确的连接信息和认证细节。基于你提供的信息,你的 Elasticsearch 实例位于 127.0.0.1:9200,账号为 elastic,密码为 zxcv9527。

对于 Spring Boot 应用,你可以在 application.yml 或 application.properties 文件中设置这些配置。以下是如何在 application.yml 文件中配置这些信息的示例:

java 复制代码
spring:  
  data:  
    elasticsearch:  
      client:  
        reactive:  
          endpoints: 127.0.0.1:9200  
          username: elastic  
          password: zxcv9527

或者,如果你使用的是 application.properties 文件,配置是这样的:

java 复制代码
spring.data.elasticsearch.client.reactive.endpoints=127.0.0.1:9200  
spring.data.elasticsearch.client.reactive.username=elastic  
spring.data.elasticsearch.client.reactive.password=zxcv9527

这些配置设置将确保 Spring Data Elasticsearch 使用提供的用户名和密码连接到指定的 Elasticsearch 端点。

2、java 代码配置类

只是一个简单的配置类,主要是连接测试,参考使用

java 复制代码
import com.lingxu.plus.es.utils.ElasticSearchUtil;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.CredentialsProvider;
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;

/**
 * @Author ajie
 *
 * @since 20241014
 */
@Configuration
public class ElasticSearchClientConfig {

    @Value("${spring.data.elasticsearch.client.reactive.endpoints}")
    private String endpoints;

    @Value("${spring.data.elasticsearch.client.reactive.username}")
    private String userName;

    @Value("${spring.data.elasticsearch.client.reactive.password}")
    private String password;

    @Bean  // 标记这个方法生成的对象是一个Spring管理的Bean
    public RestHighLevelClient restHighLevelClient() {
        // 将端点字符串分割成数组
        String[] points = endpoints.split(",");
        // 创建一个与端点数组长度相同的HttpHost数组
        HttpHost[] httpHosts = new HttpHost[points.length];

        // 遍历端点数组,创建HttpHost对象并填充到数组中
        for (int i = 0; i < points.length; i++) {
            String point = points[i];
            String[] hostPort = point.split(":");
            httpHosts[i] = new HttpHost(hostPort[0], Integer.parseInt(hostPort[1]), "http");
        }

        // 创建一个凭证提供者,用于存储用户名和密码
        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
        // 设置凭证提供者的认证范围(这里设置为ANY,表示对所有主机都使用这些凭证)
        // 并使用用户名和密码创建基本认证凭据
        credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));

        // 自定义RestClientBuilder,以便在创建HTTP客户端时使用凭证提供者
        RestClientBuilder builder = RestClient.builder(httpHosts)
                .setHttpClientConfigCallback(httpClientBuilder -> {
                    // 在HTTP客户端构建器中设置凭证提供者
                    return httpClientBuilder
                            .setDefaultCredentialsProvider(credentialsProvider);
                    // 这里可以根据需要添加其他配置,比如SSL设置等
                });

        // 使用自定义的构建器创建RestHighLevelClient对象
        RestHighLevelClient client = new RestHighLevelClient(builder);
        // 返回创建的RestHighLevelClient对象
        return client;
    }

    @Bean
    public ElasticSearchUtil elasticSearchUtil() {
        return new ElasticSearchUtil();
    }
}

3、注意事项

  • 版本兼容性:检查你使用的 Spring Data Elasticsearch 版本与你的 Elasticsearch 服务器版本是否兼容。
  • 依赖关系:确保你的项目中包含了 Spring Data Elasticsearch 的依赖。对于使用 Spring Boot 的项目,你可以添加类似以下的依赖到你的 pom.xml(如果你使用 Maven):
java 复制代码
<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-data-elasticsearch-reactive</artifactId>  
</dependency>
  • 安全性:确保你的密码和其他敏感信息不会硬编码在源代码或配置文件中,特别是在生产环境中。考虑使用环境变量或外部配置服务来管理敏感信息。
  • 连接测试:在应用启动后,测试连接是否成功,可以通过查看日志或使用一些简单的查询来验证。
    这样配置后,你的 Spring 应用应该能够成功连接到需要身份验证的 Elasticsearch 实例。

七:修改密码

命令中,elastic是要修改密码的用户名。执行完命令后,输入新密码即可完成密码修改

bash 复制代码
bin/elasticsearch-users passwd elastic

服务器修改、rest api:

语法示例:

bash 复制代码
curl -H "Content-Type:application/json" -XPOST -u elastic  'http://192.168.157.132:9200/_xpack/security/user/用户名/_password' -d '{ "password" : "修改后的密码" }'

修改 elastic 示例:

bash 复制代码
curl -H "Content-Type:application/json" -XPOST -u elastic 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "zxcv9527" }'

忘记密码处理:

  1. 修改elasticsearch.yml 配置,将身份验证相关配置屏蔽掉;
  2. 重启ES,查看下索引,发现多了一个.security-7索引,将其删除
  3. 到此就回到ES没有设置密码的阶段了,如果想重新设置密码,请重新开始

备注:ES 整体路径不要存在中文名称和特殊符号,空格、等,防止出现一些其他问题。

相关推荐
桃林春风一杯酒1 小时前
HADOOP_HOME and hadoop.home.dir are unset.
大数据·hadoop·分布式
桃木山人1 小时前
BigData File Viewer报错
大数据·java-ee·github·bigdata
B站计算机毕业设计超人2 小时前
计算机毕业设计Python+DeepSeek-R1高考推荐系统 高考分数线预测 大数据毕设(源码+LW文档+PPT+讲解)
大数据·python·机器学习·网络爬虫·课程设计·数据可视化·推荐算法
数造科技2 小时前
紧随“可信数据空间”政策风潮,数造科技正式加入开放数据空间联盟
大数据·人工智能·科技·安全·敏捷开发
逸Y 仙X5 小时前
Git常见命令--助力开发
java·大数据·git·java-ee·github·idea
元气满满的热码式5 小时前
logstash中的input插件(http插件,graphite插件)
网络·网络协议·http·elasticsearch·云原生
caihuayuan46 小时前
PHP建立MySQL持久化连接(长连接)及mysql与mysqli扩展的区别
java·大数据·sql·spring
B站计算机毕业设计超人6 小时前
计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+LW文档+PPT+讲解)
大数据·hadoop·爬虫·机器学习·课程设计·数据可视化·推荐算法
silianpan6 小时前
文档检索服务平台
elasticsearch·搜索引擎·开源
(; ̄ェ ̄)。6 小时前
在nodejs中使用ElasticSearch(二)核心概念,应用
大数据·elasticsearch·搜索引擎