godaddy 建网站,网站建设优化服务行情,龙华公司,答题网站开发教程Elasticsearch 单节点安全配置与用户认证
安全扫描时发现了一个高危漏洞#xff1a;Elasticsearch 未授权访问 。在使用 Elasticsearch 构建搜索引擎或处理大规模数据时#xff0c;需要启用基本的安全功能来防止未经授权的访问。本文将通过简单的配置步骤#xff0c;为单节…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 选择密码可留空
生成节点证书
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 可选择为证书设置密码
将证书复制到配置目录
将生成的 elastic-certificates.p12 文件移动到 Elasticsearch 的配置目录通常是 $ES_HOME/config下
mv elastic-certificates.p12 $ES_HOME/config
# 赋权为es用户权限
chown es:es elastic-certificates.p12 可选存储证书密码
如果生成证书时设置了密码需要将密码存储到 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 信息则配置成功。
浏览器访问 Spring Boot 项目中配置 Elasticsearch 连接账户密码
1. 引入依赖
在 pom.xml 中添加 Elasticsearch 客户端依赖
dependencygroupIdorg.elasticsearch.client/groupIdartifactIdelasticsearch-rest-high-level-client/artifactIdversion7.9.2/version
/dependency2. 配置类
在 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.yml 或 application.properties 中添加 Elasticsearch 的相关配置
elasticsearch:host: localhostport: 9200username: elasticpassword: elasticPWD4. 使用示例
在需要使用 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