程序员小强总结的 ElasticSearch专题超全总结篇在这里:传送门
结合官网资料,做了更详细的实际使用总结。
从单机版安装到集群高可用生产环境搭建、基本概念(索引,分片,节点,倒排索引…)、DSL语法实践、分词器(内置+中文)、SpringBoot整合实战、仿京东商品搜索实战实现。
1.前言
当我们安装完ElasticSearch的时候发现,访问过程中我们没有任何安全认证就可以直接访问并操作。如果是生产环境,端口向外暴露的话,那么对数据的安全性是无法得到保障的。
一般解决方案有
- 开启ElasticSearch认证插件,访问的时候添加账密不就好了
- 当然也可以通过nginx作代理防护
本文主要讲解通过启用X-Pack来设置ElasticSearch的访问密码。
集群与单据环境都适合次方法
- 集群与单据环境配置的区别就是,集群需要在某一台生成证书然后拷贝到其它节点目录下。
- 集群环境重设置密码的时候需要整个集群节点都已启动,可在任一台处修改。
2.X-Pack简介
X-Pack是Elastic Stack扩展功能,提供安全性,警报,监视,报告,机器学习和许多其他功能。 ES7.0+之后,默认情况下,当安装Elasticsearch时,会自动安装X-Pack,无需单独再安装。自6.8以及7.1+版本之后,基础级安全永久免费了。
在使用的时候主要需要配置一下证书,以及修改配置文件(config/elasticsearch.yml )
3.证书配置
3.1生成节点证书
切换到 elasticsearch 安装文件目录 bin 下 :示例:/usr/local/elasticsearch-7.4.0/bin
借助elasticsearch-certutil命令生成证书:
./elasticsearch-certutil ca -out config/certs/elastic-certificates.p12 -pass
这里单独设置了一个 证书文件目录 config/certs
生成后的证书
3.2修改配置
配置通信证书 > 需要在 config目前下elasticsearch.yml 配置
# 开启xpack
xpack.security.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.enabled: true
# 证书配置
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
其它配置(可选)
#跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
注:若是集群环境则需要将证书文件目录,以及配置文件,在所有集群环境下都修改一下。
3.3.重启生效
需要重启elasticsearch
注:若是集群环境下则需要启动所有集群节点,再统一设置密码
注:重启异常情况,若出现报错,类似 failed to load plugin class[org.elasticsearch.xpack.core.XPackPlugin]
请检查是否是使用root用户生成的证书,启动用户无权限导致。
4.设置用户密码
执行设置用户名和密码的命令,内置了部分用户
切换到 elasticsearch 安装文件目录 bin 下 :示例:/usr/local/elasticsearch-7.4.0/bin/
# 手动配置每个用户密码模式(需要一个一个的输入)
./elasticsearch-setup-passwords interactive
也可以先自动配置密码后续再修改
#自动配置每个用户密码(随机生成并返回字符串密码,需要保存好)
./elasticsearch-setup-passwords auto
下图1是自动生成密码情况(一定拷贝下来要牢记密码)
下图2是自定义密码情况
分别为多个用户设置密码例如:elastic, kibana, logstash_system,beats_system,
设置密码的时候需要连续输入2遍。
部分内置账号的角色权限解释如下:
- elastic 账号:拥有 superuser 角色,是内置的超级用户。
- kibana 账号:拥有 kibana_system 角色,用户 kibana 用来连接 elasticsearch 并与之通信。Kibana 服务器以该用户身份提交请求以访问集群监视 API 和 .kibana 索引。不能访问 index。
- logstash_system 账号:拥有 logstash_system 角色。用户 Logstash 在 Elasticsearch 中存储监控信息时使用。
至此单节点安全配置完毕,重启es后访问9200会出现用户名和密码的提示窗口,我们就可以通过用户生成的密码过行访问了
5.测试访问
通过查看证书方式,顺便测试一下密码是否生效了
浏览器输入 http://IP:9200/_license 可以看到,弹窗出来,需要输入密码了
附录:常见问题
1.如何修改账号密码
以elastic账号为例,注意需要在elasticsearch服务已启动的情况下进行
curl -H 'Content-Type: application/json' -u elastic:123456 -XPUT 'http://localhost:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "1234567" }'
2.客户端ES-head连接问题
连接失败情况下先检查是否是跨域问题
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
例如下图连接的时候报错未授权
解决方案:在访问的URL中拼接授权账号信息
示例:?auth_user=elastic&auth_password=1234567
示例:指定服务端地址以及账户
http://IP:9100/?base_uri=http://IP:9200&auth_user=elastic&auth_password=1234567
3.启动报xpack相关错
DecoderException: javax.net.ssl.SSLHandshakeException: No available authentication scheme
解决方案:请通过上文配置步骤,排查,检查证书是否已经配置好,以及配置是否填写正确
关注程序员小强公众号更多编程趣事,知识心得与您分享
?关注“程序员小强”发送关键字“elasticSearch”到公众号获取相关篇