在ELK7 以后已经直接将x-pack集成到ELK中不在需要单独安装,但是只有在7.1版本后才免费开放安全配置,否则需要付费使用。
参考网站:
https://www.elastic.co/cn/blog/getting-started-with-elasticsearch-security
https://www.elastic.co/cn/products/stack/security
上述文档只配置elasticsearch和kibana,还需要注意logstash和filebeat的配置。
配置 TLS 和身份验证
使用elasticsearch-certutil 生成证书
find / -name elasticsearch-certutil #找到命令在哪里
/usr/share/elasticsearch/bin/elasticsearch-certutil cert -out elastic-certificates.p12 -pass ""
生成的证书elastic-certificates.p12在/usr/share/elasticsearch下面。需要备份出来,给elasticsearch各个节点使用。将证书放到:/etc/elasticsearch/ 下面
在每个节点的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: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12
重启所有节点的elasticsearch。
在主节点上生成密码, 主节点开始运行,便可以为集群设置密码:
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
使用auto自动生成类似如下密码
(注意保存好密码后续会使用到) interactive 参数可以手动定义密码:
Changed password for user apm_system
PASSWORD apm_system = 8JuVCoVHL4OzCaitLNQp
Changed password for user kibana
PASSWORD kibana = 3DDh6fGRYp1HvxDfT12D
Changed password for user logstash_system
PASSWORD logstash_system = 6Tow5AxAcmWxSakUyNa4
Changed password for user beats_system
PASSWORD beats_system = 8PtRLrPzOE2te09WVFj4
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = h8HbgQYzut8iOgVuVu7R
Changed password for user elastic
PASSWORD elastic = RRCOfh9UudUIVZ4i954E
为 Kibana 用户添加密码
kibana.yml 文件。找到类似下面的代码行
#elasticsearch.username: "user"
#elasticsearch.password: "pass"
对 username 和 password 字段取消注释,方法是删除代码行起始部分的 # 符号。将 "user" 更改为 "kibana",然后将 "pass" 更改为 setup-passwords 命令告诉我们的任何 Kibana 密码。保存文件,重新启动 Kibana 了。
登录如下界面:输入超级用户和密码elastic = RRCOfh9UudUIVZ4i954E.可以在管理中新建角色和用户用来授权不同账号登录,查看不同内容。
设置密码后,之前设置logstash也需要修改output参数,否则是无法写入日志数据的。增加user和passwd字段,此处也可以设置低权限的账户用来写入数据,但需要设置好权限,否则也是无法写入的。
output { # 定义日志输出
if "nginx" in [tags]{
elasticsearch {
hosts => ["172.16.15.53:9200"] # 定义es服务器的ip
index => "nginx-%{+YYYY.MM.dd}" # 定义索引
user => "elastic"
password => "RRCOfh9UudUIVZ4i954E"
}}
else if "system" in [tags]{
elasticsearch {
hosts => ["172.16.15.53:9200"] # 定义es服务器的ip
index => "system-%{+YYYY.MM.dd}" # 定义索引
user => "elastic"
password => "RRCOfh9UudUIVZ4i954E"
}}
else if "tomcat-access" in [tags]{
elasticsearch {
hosts => ["172.16.15.53:9200"] # 定义es服务器的ip
index => "tomcat-access-%{+YYYY.MM.dd}" # 定义索引
user => "elastic"
password => "RRCOfh9UudUIVZ4i954E"
}}
else if "tomcat-catalina" in [tags]{
elasticsearch {
hosts => ["172.16.15.53:9200"] # 定义es服务器的ip
index => "tomcat-catalina-%{+YYYY.MM.dd}" # 定义索引
user => "elastic"
password => "RRCOfh9UudUIVZ4i954E"
}}
else {
elasticsearch {
hosts => ["172.16.15.53:9200"] # 定义es服务器的ip
index => "mysql-%{+YYYY.MM.dd}" # 定义索引
user => "elastic"
password => "RRCOfh9UudUIVZ4i954E"
}
}
}
如果设置的是filebeat直接输入到es集群中需要在filebeat.yml修改参数加入用户名和密码:
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["172.16.15.53:9200","172.16.15.26:9200"]
# Optional protocol and basic auth credentials.
#protocol: "https"
username: "elastic"
password: "changeme"
内置账户的含义:
elastic内置超级用户。请参阅内置角色。
kibana用户Kibana用于连接Elasticsearch并与之通信。
logstash_system:Logstash用户在Elasticsearch中存储监视信息时使用。
beats_system:eats在Elasticsearch中存储监控信息时使用的用户。
apm_system:APM服务器在Elasticsearch中存储监视信息时使用的用户。
remote_monitoring_user:Metricbeat用户在Elasticsearch中收集和存储监控信息时使用。它具有remote_monitoring_agent和 remote_monitoring_collector内置的角色。