【Docker】Docker Elasticsearch7 加装安全认证插件
之前文章中我们已经完成了Docker版本的Elasticsearch部署,为了增强安全性在此为Elasticsearch安装安全认证插件(2018年全球大规模的Elasticsearch攻击历历在目)。由于之前部署的Elasticsearch是Docker版本,本次也基于Docker版本进行说明。为了简化操作步骤,这边将配合使用Docker Desktop(以下简称“DD”)来进行Docker操作
之前文章中我们已经完成了Docker版本的Elasticsearch部署,为了增强安全性在此为Elasticsearch安装安全认证插件(2018年全球大规模的Elasticsearch攻击历历在目)。由于之前部署的Elasticsearch是Docker版本,本次也基于Docker版本进行说明。
为了简化操作步骤,这边将配合使用Docker Desktop(以下简称“DD”)来进行Docker操作(对应回脚本操作也是非常方便的,有空将重新整理出来)。首先打开DD的Dashbroad界面。在界面上选择对应的Elasticsearch镜像并通过CLI打开
并输入命令
./bin/elasticsearch-certutil ca
如上图所示,这里被要求输入路径和密码,路径我这里没有输入因为不知道路径是什么,密码我就输入一个,之后就会生成了一个elastic-stack-ca.p12
的文件如下图:
之后就根据这个p12文件生成密钥
这里会先验证之前生成elastic-stack-ca.p12
时的密钥,之后要求你输入elastic-certificates.p12
生成的路径和密钥(路径就不必了反正默认是生成在当前目录下的,密钥建议就跟之前一样就可以了免得到处记密钥)。
之后就是常规操作了,将elastic-certificates.p12
复制到/usr/share/elasticsearch/config/certificates/
路径下。由于已经将/usr/share/elasticsearch/config/
映射到宿主机,但是没有certificates
文件夹,这次就将这个文件夹加上。之后通过命令
mv elastic-certificates.p12 config/certificates/
将证书移动过去。并修改证书的权限
chmod 777 config/certificates/elastic-certificates.p12
所有工作准备就绪之后就可以修改配置文件了
vim config/elasticsearch.yml
根据上图给出内容进行设置,设置完成后还需要为节点设置密码
全部工作完成之后就可以重启Docker服务了。
PS:本以为就这样按照网上的一步一步做就可以了,但是我还是太过天真了…
故障处理
在重启服务后CLI发现大量的报错,错的都是关于xpack插件的密钥问题。
没有办法只能查看配置信息并逐个屏蔽找到问题所在,首先将xpack插件相关的配置屏蔽,只保留:
xpack.security.enabled:true
由于是单节点启动的Elasticsearch7,所以在配置中加入:
discovery.type: single-node
通过配置单节点发现,启动Elasticsearch7时会报错:
"stacktrace": ["org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: setting [cluster.initial_master_nodes] is not allowed when [discovery.type] is set to [single-node]",
"at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:163) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:125) ~[elasticsearch-cli-7.5.2.jar:7.5.2]",
"at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:115) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-7.5.2.jar:7.5.2]",
"Caused by: java.lang.IllegalArgumentException: setting [cluster.initial_master_nodes] is not allowed when [discovery.type] is set to [single-node]",
"at org.elasticsearch.cluster.coordination.ClusterBootstrapService.<init>(ClusterBootstrapService.java:86) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.cluster.coordination.Coordinator.<init>(Coordinator.java:198) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.discovery.DiscoveryModule.<init>(DiscoveryModule.java:155) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.node.Node.<init>(Node.java:507) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.node.Node.<init>(Node.java:253) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:241) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:241) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:369) ~[elasticsearch-7.5.2.jar:7.5.2]",
"at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) ~[elasticsearch-7.5.2.jar:7.5.2]",
"... 6 more"] }
看到上面的报错得知由于discovery.type: single-node
这个配置是单节点启动的,而原来的配置中存在cluster.initial_master_nodes: ["node-1"]
这样的配置信息(这个是集群配置)。产生了冲突,所以将后者屏蔽就能够成功启动。具体配置如下:
接下来将之前创建的keystore工序重做一次,进入CLI控制台。执行:
./bin/elasticsearch-keystore create
将之前已创建的key文件覆盖。之后使用:
./bin/elasticsearch-setup-passwords interactive
对现有的Elasticsearch7全部用户重新设置密码(这个是风险项千万要注意)
之后就能够重新创建密钥文件。由于ca文件已经生成就不需要重新生成,可以重新生成认证文件:
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
mv elastic-certificates.p12 config/certificates/
将认证文件移动到宿主机目录并重新输入创建安全连接的密码
./bin/elasticsearch-keystore add \
xpack.security.transport.ssl.keystore.secure_password
./bin/elasticsearch-keystore add \
xpack.security.transport.ssl.truststore.secure_password
之后就可以尝试将elasticsearch.yml
文件中有关xpack
插件配置解除后重启,最终配置文件如下:
在服务启动成功后打开浏览器输入http://localhost:9270
,会出现提示登录弹出框,证明Elasticsearch7配置权限成功
还记得之前通过./bin/elasticsearch-setup-passwords interactive
设置过密码吗?
里面有一个用户叫做“elastic”是一个默认用户,由于之前已经设置了他的密码,所以可以通过用户名elastic和密码进行登录,如下图:
至此全部设置就已经完成。
更多推荐
所有评论(0)