前言
以下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 添加如下配置
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
若想关闭x-pack密码验证,如下操作:
xpack.security.enabled: false
二、重新启动ES
找到ES路径 bin 下面 双击 elasticsearch.bat 重新启动后,以上配置才生效
启动完成:
三:通过命令设置ES密码
通过管理员打开cmd窗口,切换到ES文件夹 bin 路径下面 执行以下命令:
elasticsearch-setup-passwords interactive
1、出现以下情况,输入:y
2、可以开始设置密码了,一次性需要设置多个密码,密码尽量保证一致
其中,用户权限分别如下:
- elastic 账号:拥有 superuser 角色,是内置的超级用户
- kibana 账号:拥有 kibana_system 角色,用户 kibana 用来连接 elasticsearch 并与之通信。Kibana 服务器以该用户身份提交请求以访问集群监视 API 和 .kibana 索引。不能访问 index。
- logstash_system 账号:拥有 logstash_system 角色。用户 Logstash 在 Elasticsearch 中存储监控信息时使用。
密码设置完成后,重新启动ES
四:访问ES 验证是否成功?
访问 127.0.0.1:9200
ES用户名:elastic
passWord: 刚才设置的密码
密码设置成功!
五:kibana 配置ES
1、修改kibana 配置文件 kibana.yml ,添加如下配置
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
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 文件中配置这些信息的示例:
spring: data: elasticsearch: client: reactive: endpoints: 127.0.0.1:9200 username: elastic password: zxcv9527
或者,如果你使用的是 application.properties 文件,配置是这样的:
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 代码配置类
只是一个简单的配置类,主要是连接测试,参考使用
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管理的Beanpublic 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;}@Beanpublic ElasticSearchUtil elasticSearchUtil() {return new ElasticSearchUtil();}
}
3、注意事项
- 版本兼容性:检查你使用的 Spring Data Elasticsearch 版本与你的 Elasticsearch 服务器版本是否兼容。
- 依赖关系:确保你的项目中包含了 Spring Data Elasticsearch 的依赖。对于使用 Spring Boot 的项目,你可以添加类似以下的依赖到你的 pom.xml(如果你使用 Maven):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch-reactive</artifactId>
</dependency>
- 安全性:确保你的密码和其他敏感信息不会硬编码在源代码或配置文件中,特别是在生产环境中。考虑使用环境变量或外部配置服务来管理敏感信息。
- 连接测试:在应用启动后,测试连接是否成功,可以通过查看日志或使用一些简单的查询来验证。
这样配置后,你的 Spring 应用应该能够成功连接到需要身份验证的 Elasticsearch 实例。
七:修改密码
命令中,elastic是要修改密码的用户名。执行完命令后,输入新密码即可完成密码修改
bin/elasticsearch-users passwd elastic
服务器修改、rest api:
语法示例:
curl -H "Content-Type:application/json" -XPOST -u elastic 'http://192.168.157.132:9200/_xpack/security/user/用户名/_password' -d '{ "password" : "修改后的密码" }'
修改 elastic 示例:
curl -H "Content-Type:application/json" -XPOST -u elastic 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "zxcv9527" }'
忘记密码处理:
- 修改elasticsearch.yml 配置,将身份验证相关配置屏蔽掉;
- 重启ES,查看下索引,发现多了一个.security-7索引,将其删除
- 到此就回到ES没有设置密码的阶段了,如果想重新设置密码,请重新开始
备注:ES 整体路径不要存在中文名称和特殊符号,空格、等,防止出现一些其他问题。