前言
ES的基础认证功能已经永久免费, 正巧去试一下.
配置 transport TLS证书
如果要启动认证功能, 就必须在transport端口添加TLS. 如果不加密, 则密码将已明文的方式在传输中暴露.
注意,transport 和 http 端口是两个端口,一个是内部集群通信时的端口,一个是客户端的端口, 此次配置的是集群通信时的端口.
elasticsearch默认集成了一个命令来简化证书生成的过程 elasticsearch-certutil
1. 创建一个ca颁发机构的签名证书
1 | ./elasticsearch-certutil ca --out /root/elastic-stack-ca.p12 --pass mu77mu77 |
此命令创建了一个已PKCS#12格式的证书文件,该证书文件集成了CA证书和签名秘钥,创建完成以后,可以通过他来签名服务器证书.
2. 创建服务器证书
1 | ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --out /etc/elasticsearch/elastic-certificates.p12 --ca-pass mu77mu77 --pass "" |
为了方便, 我们创建了一个服务器证书, 并且没有指定CN和密码, 这样导致所有的服务器都可以共用一个证书文件。
当然, 如果使用ansible或者其他配置工具, 建议还是使用CN认证,比如:
1 | ./bin/elasticsearch-certutil cert \ |
3. 配置证书
1 | xpack.security.transport.ssl.enabled: true |
verification_mode 我们选择certificate,这个模式不会去检查证书的CN,只验证证书是否是信任机构签名的即可.
如果我们需要验证,并且配置了IP,则需要把这个模式该为full
如果证书是PEM格式,则使用下方配置
1 | xpack.security.transport.ssl.enabled: true |
4. 保存证书密码
如果生成的证书设置了密码,则需要将密码保存到keystore中
如果1
2bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password如果是PEM格式的证书,则使用
1
bin/elasticsearch-keystore add xpack.security.transport.ssl.secure_key_passphrase
5. 重启 Elasticsearch
为 Elasticsearch 设置认证
内置用户
elastic : 内置的超级用户kibana_system: 用户Kibana用于连接Elasticsearch并与之通信logstash_system: Logstash写入监控数据时所需要的ES权限用户beats_system: Beats写入监控数据时所需要的ES权限用户apm_system: APM写入监控数据时所需要的ES权限用户remote_monitoring_user: Metricbeat用户在Elasticsearch中收集和存储监视信息时使用。
这些用户都存储在 .security 索引当中.
启动这些用户的方法有两种, 第一种是用elasticsearch-setup-passwords内置命令来修改用户的密码,第二种是使用bootstrap.password 密码通过API的方式进行设置.
使用 elasticsearch-setup-passwords 设置密码
这个命令集成在elasticsearch中,直接交互式使用即可
1 | # 手动配置 |
使用 bootstrap.password
1 | bin/elasticsearch-keystore add "bootstrap.password" |
- 使用密码
1 | # 第一种 |
- 使用引导密码, 更改elastic密码
POST /_security/user/<username>/_password1
2
3
4
5curl -X POST --user elastic:pass "localhost:9200/_security/user/elastic/_password?pretty" -H 'Content-Type: application/json' -d'
{
"password" : "new-password"
}
'
更新以后即可使用上述接口,再次更新elasticsearch其他用户的密码
logstash监控信息配置
1 | xpack.monitoring.enabled: true |
kibana监控信息配置
1 | elasticsearch.username: "kibana_system" |
创建logstash集群角色
1 | curl -X POST --user elastic:pass "localhost:9200/_security/role/logstash?pretty" -H 'Content-Type: application/json' -d' |
创建logstash用户
POST /_security/user/<username>
1 | curl -X POST "localhost:9200/_security/user/logstash_internal?pretty" -H 'Content-Type: application/json' -d' |
创建成功返回
1 | { |
使用配置
1 | input { |