Elasticsearch开启安全认证详细步骤
上一级页面:springboot-gulimall
前言
本节的内容来自课后整理,听课的时候不用记录,主要是跟着思路敲代码。课后抽出时间整理一下笔记就好了。
学习笔记目录
鸣谢
笔记来源
感谢此项目:Brain map: 脑图、笔记 (gitee.com)
笔记来源2与开源项目支持
感谢大佬在记笔记这件事上提供的帮助:zsy0216/guli-mall: 尚硅谷-谷粒商城代码及文档https://www.yuque.com/zhangshuaiyin/guli-mall (github.com)
教学文档
感谢大佬的整理:Guli Mall(包含代码、课件、sql).rar
![Pasted image 20231119112557.png](https://webdav-1309345210.file.myqcloud.com/images/Pasted image 20231119112557.png)
所有文档资料,老乡点个赞再走!
链接:https://pan.baidu.com/s/18FuF760AYt3kILGWCmXVEA
提取码:yyds
参考、引用、致谢
Elasticsearch开启安全认证详细步骤_es安全认证_卑微小韩的博客-CSDN博客
Dockerfile+elasticsearch7.12.1(配置密码及证书)+kibana7.12.1+cerebro0.83搭建集群_闪电如风雨的博客-CSDN博客
Elasticsearch开启安全认证详细步骤
Elasticsearch搭建环境
Elasticsearch版本号:7.3.2
服务器版本: CentOS 7.4
问题描述
项目等保协议扫描出了ES漏洞:检测到ES(ElasticSearch)数据库没有开启授权认证,建议开启授权认证,防止非法访问。
解决步骤
# cd es的安装目录,如果是docker镜像,打开默认就在安装目录下
cd /usr/share/elasticsearch
一、生成证书 elastic-stack-ca.p12:
./bin/elasticsearch-certutil ca
碰到第一个直接回车,不用管
碰到第二个输入密码,例如123456
[cjpt@localhost elasticsearch-7.3.2]$ ./bin/elasticsearch-certutil ca
This tool assists you in the generation of X.509 certificates and certificate
signing requests for use with SSL/TLS in the Elastic stack.
The 'ca' mode generates a new 'certificate authority'
This will create a new X.509 certificate and private key that can be used
to sign certificate when running in 'cert' mode.
Use the 'ca-dn' option if you wish to configure the 'distinguished name'
of the certificate authority
By default the 'ca' mode produces a single PKCS#12 output file which holds:
* The CA certificate
* The CA's private key
If you elect to generate PEM format certificates (the -pem option), then the output will
be a zip file containing individual files for the CA certificate and private key
Please enter the desired output file [elastic-stack-ca.p12]: 【不用管,直接回车】
Enter password for elastic-stack-ca.p12 : 【输入密码】
[cjpt@localhost elasticsearch-7.3.2]$ ll
总用量 1888
......(省略其他文件)
-rw-------. 1 cjpt cjpt 2524 4月 19 16:28 elastic-stack-ca.p12
完成后会生成一个文件:elastic-stack-ca.p12
二、生成秘钥(认证凭证) elastic-certificates.p12
# cd es的安装目录,如果是docker镜像,打开默认就在安装目录下
cd /usr/share/elasticsearch
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
中间需要输入刚才设置的密码(例如本例中的123456)就直接输入就可以了,需要输入路径的地方不要输入地址,就直接回车,
之后会询问你私钥文件的密码,建议输入第一步设置的密码 (例如本例中的123456)
回车后会生成一个文件:elastic-certificates.p12文件
三、将凭证迁移到指定目录
# cd es的安装目录,如果是docker镜像,打开默认就在安装目录下
cd /usr/share/elasticsearch
移动凭证至指定目录下
# 先创建目录
mkdir -p ./config/certificates
# 移动 认证凭证 至指定目录下
mv ./elastic-certificates.p12 ./config/certificates/
# 赋值权限,不然会出问题
chmod 777 ./config/certificates/elastic-certificates.p12
如果使用docker镜像的话,现在要做的是退出elasticsearch的容器,将容器内刚刚生成的证书和私钥复制出来
# 复制 认证凭证 到宿主机的对应位置
docker container cp elasticsearch:/usr/share/elasticsearch/config/certificates/elastic-certificates.p12 /mydata/elasticsearch/backup/
# 复制证书到宿主机进行备份
docker container cp elasticsearch:/usr/share/elasticsearch/elastic-stack-ca.p12 /mydata/elasticsearch/backup/
四、凭证移动至每一台集群下面
此处省略各种scp,就是把elastic-certificates.p12这个文件移动到每一个es安装目录的相同路径下
五、在各个节点上添加密码(每一台es都需要操作)
将 keystore 的密码添加到keystore里面
./bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
输入密码:第一步中设置的密码,例如本样例中的123456
将 truststore的密码添加到keystore里面
./bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
输入密码:第二步中,对 elastic-certificates.p12
设置的密码,例如本样例中的ABCABC
六、修改配置文件(每一台es都需要添加)
vim ./config/elasticsearch.yml
输入如下的配置
network.host: 0.0.0.0
# 跨域
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Type,Content-Length
#开启kibana监控配置,如果不开启,也可以在kibana监控界面开启
xpack.monitoring.collection.enabled: true
#开启安全认证相关配置
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.audit.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.keystore.type: PKCS12
xpack.security.transport.ssl.verification_mode: certificate
#名字要和自定义镜像中的名字一致
xpack.security.transport.ssl.keystore.path: 【es的安装路径】/config/certificates/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: 【es的安装路径】/config/certificates/elastic-certificates.p12
xpack.security.transport.ssl.truststore.type: PKCS12
用docker安装的,默认的es安装路径是 /usr/share/elasticsearch
你可以用 pwd
查看当前的路径
七、逐个重新启动节点
./bin/elasticsearch -d
启动后看日志,是否正常,若日志异常,则需要具体排查
八、设置密码
下面会要输入很多密码,都要自己能记住,以后要用
需要设置 elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user 这些用户的密码
./bin/elasticsearch-setup-passwords interactive
九、浏览器查看9200端口
因为我是一台机器上装的集群,所以使用9201端口
访问地址为:http://【ip】:9200
输入用户名和密码 elastic/123456
出现如上结果就是成功加上认证了
十、es-head访问认证的es
本来想修改es-head的源代码的,发现实在改不动,只能记录一下了
常用的es-head采用的连接为直接输入url
但是此方法显然不支持带认证的es
所以此处需要带上账户名和密码:
http://192.168.31.160:9201/?auth_user=elastic&auth_password=123456
此时再连接就可以发现连接正常了
kibana配置
当 es配置了认证凭证和密码后,kibana也需要做对应配置
参考
Docker部署ElasticSearch7.11.1并挂载+配置X-Pack设置帐号密码+Kibana7.11.1+IK插件_es7 docker配置账号-CSDN博客
前言
我之前的kibana并没有把配置给挂载到宿主机,导致我现在需要先把elasticsearch的配置还原,然后才能正常启动kibana,进而进入容器修改配置
也可以选择重新建一个新镜像,配置好对应启动参数,将配置文件挂载到宿主机内
重新run一个新kibana镜像,将配置目录挂载出来
首先run一个临时容器,把配置文件复制出来
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://172.18.0.1:9200 -p 5601:5601 -d kibana:7.6.2
复制容器内的配置文件
mkdir -p /mydata/kibana/
docker container cp kibana:/usr/share/kibana/config /mydata/kibana/
docker container cp kibana:/usr/share/kibana/data /mydata/kibana/
docker container cp kibana:/usr/share/kibana/plugins /mydata/kibana/
终止原容器:
docker stop kibana
执行命令删除临时容器:
docker rm kibana
修改配置文件:见下面的修改配置文件
新建一个容器
docker run --name kibana \
-e ELASTICSEARCH_HOSTS=http://172.18.0.1:9200 \
-p 5601:5601 \
-v /mydata/kibana/config:/usr/share/kibana/config \
-v /mydata/kibana/data:/usr/share/kibana/data \
-v /mydata/kibana/plugins:/usr/share/kibana/plugins \
-d kibana:7.6.2
设置开机启动 kibana
docker update kibana --restart=always
修改配置文件
vim ./kibana/config/kibana.yml
server.name: kibana
# kibana的主机地址 0.0.0.0可表示监听所有IP
server.host: "0.0.0.0"
# kibana访问es的URL
elasticsearch.hosts: [ "http://172.18.0.1:9200" ]
#这里是在elasticsearch设置密码时的值
elasticsearch.username: 'elastic'
elasticsearch.password: '**************'
# # 显示登陆页面
xpack.monitoring.ui.container.elasticsearch.enabled: true
# # 语言
i18n.locale: "zh-CN"