二、开发中配置伪集群的TLS和身份验证(基础)
很详细的配置,支持博客主【https://knner.wang/】 链接
我这里用到的是基础板(免费的),自动申请Basic License,X-pack 的免费Auth和Node间的SSL。
1.创建三个Elasticsearch7.10的节点
在一个服务器上,创建三个节点。解压文件,复制一个es-slave01和es-slave02,其中一个命名为master节点,好区分。
2.配置TLS和身份验证文件
在安全的集群中,Elastic节点在与其他节点通信时使用证书来标识自己。这个集群必须验证这些证书的真实性。推荐的方法
是信任指定的CA身份认证文件,因此,当节点加入到集群中时,它只需都拥有相同的CA签署的证书,
这里第一步是生成证书,然后把证书分发到子节点(好区分),其中一个命名为master节点。
在这个过程中,我们需要证书让节点安全的通信,会用到elasticsearch-certutil
的命令,此命令可以很快的生成证书。
流程:
ca证书--》根据ca证书,生成node证书--》复制node证书到其他节点--》生成用户密码
1.master主节点生成node证书
- 在config目录下
[~choleen config]mkdir certs
- 在linux系统中,
cd
进入elastic的bin目录下,这个可以不启动执行,运行此命令
[~choleen bin]./elasticsearch-certutil cert -out elastic-certificates.p12 -pass ""
对于这个命令elasticsearch-certutil
,可以输入--help
来查看帮助,我们来看它给解释:
命令 | 含义 |
---|---|
elasticsearch-certutil | --help |
cert | 生成X.509的证书和密码 |
ca | 生成一个新本地认证文件,里面包含了证书和密钥 |
csr | 生成证书签名 |
http | 对于这个Elastcsearch的http接口生成一个新的认证 |
cert | --help |
ca | 指向已经生成的ca密钥文件 |
ca-cert | 指向存在的ca认证文件(节点之间认证) |
dns | 指定DNS域名 |
ip | 指定ip |
pass | 生成的私钥密码 |
out | 指定生成文件路径 |
name | 证书名字 |
执行之后,在根目录生成了elastic-certificates.p12 文件。
$ cd config
$ mkdir certs
$ mv ../elastic-certificates.p12 certs/
- 注意:
我这里没有使用$ /bin/elasticsearch-certutil ca -v
,只是为了快速的设置SSL
正常我们应该先生成ca证书,然后根据ca证书去生成node证书。
https://www.elastic.co/guide/en/elasticsearch/reference/current/configuring-tls.html
- 配置elasticsearch.yml
xpack.security.enabled: true
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
这里的verification_mode配置方式:
-
full
,认证证书是否通过信任的CA证书签发,同时认证server的hostname 或者 IP 地址是否匹配证书中配置的 -
cretificate
,只认证证书是否通过信任的CA证书签发的 -
none
,什么也不认证,相当于关闭了SSL/TLS认证,仅用于你非常相信的安全的环境
- 启动master节点,生成集群密码
$ bin/ elasticsearch-setup-passwords interactive
手动设置密码,elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user,都有这些用户。
登录时会用到。
- Elastic节点配置TLS
由于不是后台运行,打开一个新的终端,拷贝node证书(cert文件)到字节的的config/certs目录下。
节点中node.master: false,不能为true。
在其他节点中增加,就是xpck.security.*键设置为master一样。
$ echo "xpack.security.enabled: true" >> elasticsearch.yml
$ echo ''xpack.security.transport.ssl.enabled: true" >> elasticsearch.yml
$ echo ''xpack.security.transport.ssl.verification_mode: certificate" >> elasticsearch.yml
$ echo ''xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12" >> elasticsearch.yml
$ echo ''xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12" >> elasticsearch.yml
- 运行其他两个节点,
$ bin/elasticsearch
最后看其他两个节点加入进去没有。
- Kibana中设置安全
elasticsearch.username: "kibana"
elasticsearch.password: "admin123"
运行命令 bin/kibana --allow-root
打开浏览器,输入 http://localhost:5601
这里的密码,我们可以使用elastic超级用户进行登录,就是来自setup-password
命令。
- Kibana中可以设置Role和User
-
role
-
user
先生成证书
- 执行命令
$ bin/elasticsearch-certutil ca -v
- 其中
Please enter the desired output file [elastic-stack-ca.p12]: # 输入保存的ca文件名称
Enter password for elastic-stack-ca.p12 : # 输入证书密码,我们这里留空
- 在生成node证书时,使用
$ bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
- 其中
Enter password for CA (elastic-stack-ca.p12) : # 输入CA证书的密码,我们这里没有设置,直接回车
Please enter the desired output file [elastic-certificates.p12]: # 输入证书保存名称,保值默认直接回车
Enter password for elastic-certificates.p12 : # 输入证书的密码,留空,直接回车
这种根据CA证书签署生成的node证书elastic-certificates.p12,包含有node证书、CA证书、私钥
3. 查看节点命令
- 查看节点信息
$ curl localhost:9200/_cat/nodes?v
- 查看节点状态
$ curl localhost:9200/_cat/health
- 查看每台机器的属性
$ curl localhost:9200/_cat/nodeattrs