基于 ES 内置及自定义用户实现 kibana 和 filebeat 的认证
目录
▪ 用途
▪ 关闭服务
▪ Elasticsearch - 修改 Elasticsearch.YAML 配置
▪ Elasticsearch - 开启服务
▪ Elasticsearch - 建立本地内置用户
▪ kibana - 创建私钥库
▪ kibana-web 界面确认用户
▪ filebeat - 在 Web 界面创建角色及用户
▪ filebeat - 服务器上创建密钥库
▪ filebeat - 配置 filebeat.YAML
▪ 测试
▪ 附录
用途
前情提要:
在第一篇《EFK 教程 - 快速入门指南》中, 阐述了 EFK 的安装部署, 其中 ES 的架构为三节点, 即 master,ingest,data 角色同时部署在三台服务器上.
在第二篇《EFK 教程 - Elasticsearch 高性能高可用架构》中, 阐述了 EFK 的 data/ingest/master 角色的用途及分别部署三节点, 在实现性能最大化的同时保障高可用.
在第三篇《EFK 教程 (3) - Elasticsearch 冷热数据分离》中, 阐述了 ES 多实例部署, 将不同热度的数据存在不同的磁盘上, 实现了数据冷热分离, 资源合理分配.
在第四篇《EFK 教程 (4) - Elasticsearch 集群 TLS 加密通讯》中, 阐述了 ES 集群创建 CA,CERT 证书, 实现 Elasticsearch 集群之间数据通过 TLS 进行双向加密交互.
本文:
ES 集群开启内置用户和自定义用户
kibana 通过 ES 内置 kibana 用户连接 ES 集群
filebeat 通过 ES 自定义 test-filebeat 用户连接 ES 集群
关闭服务
在进行下面实验前, 请先关闭所有 Elasticsearch,kibana,filebeat 进程
Elasticsearch - 修改 Elasticsearch.YAML 配置
按以上表格对应的实例新增 conf 目录下 Elasticsearch.YAML 配置参数
- # 在所有实例上加上以下配置
- # 开启本地用户
- xpack.security.enabled: true
- # xpack 的版本
- xpack.license.self_generated.type: basic
Elasticsearch - 开启服务
开启所有 ES 服务
sudo -u Elasticsearch ./bin/Elasticsearch
Elasticsearch - 建立本地内置用户
本地内置 elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user 用户
- # 在其中一台 master 节点操作
- # interactive 自定密码 auto 自动生密码
- sudo -u Elasticsearch ./bin/Elasticsearch-setup-passwords interactive
- # 输入 elastic 密码
- # 输入 apm_system 密码
- # 输入 kibana 密码
- # 输入 logstash_system 密码
- # 输入 beats_system 密码
- # 输入 remote_monitoring_user 密码
测试内部用户
通过 base64 将 elastic 用户进行加密, 格式为 "elastic:elastic 的密码"
- # 例如以下格式
- curl -H "Authorization: Basic ZWxhc3RpYzplbGFzdGkxMjM0NTY3OA==" "http://192.168.1.31:9200/_cat/nodes?v"
如果不通过 Basic 访问或 base64 加密错误会报以下错误
kibana - 创建私钥库
在 192.168.1.21 创建私钥库
- cd /opt/kibana/
- # 创建密钥库
- sudo -u kibana ./bin/kibana-keystore create
- # 连接 ES 用户名, 这里输入 kibana
- sudo -u kibana ./bin/kibana-keystore add Elasticsearch.username
- # 连接 ES 密码, 这里输入刚刚设置 kibana 的密码
- sudo -u kibana ./bin/kibana-keystore add Elasticsearch.password
在 192.168.1.21 确认私钥库
sudo -u kibana ./bin/kibana-keystore list
启动服务
sudo -u kibana /opt/kibana/bin/kibana -c /opt/kibana/config/kibana.YAML
kibana-Web 界面确认用户
登入 kibana
在浏览器输入 192.168.1.21:5601, 用户名: elastic 密码: 之前输入 elastic 的密码
filebeat - 在 Web 界面创建角色及用户
创建自定义的 filebeat 角色
关于角色权限的说明请自行查阅附录链接
创建自定义的 filebeat 用户
filebeat - 服务器上创建密钥库
在 192.168.1.11 创建 filebeat 密钥库
- cd /opt/filebeat/
- # 创建密钥库
- ./filebeat keystore create
- # 创建 test-filebeat 用户私钥
- ./filebeat keystore add test-filebeat
确认 filebeat 密钥库
./filebeat keystore list
filebeat - 配置 filebeat.YAML
配置 filebeat.YAML
- # 文件输入
- filebeat.inputs:
- # 文件输入类型
- - type: log
- # 开启加载
- enabled: true
- # 文件位置
- paths:
- - /var/log/nginx/access.log
- # 自定义参数
- fields:
- type: nginx_access # 类型是 nginx_access, 和上面 fields.type 是一致的
- # 输出至 Elasticsearch
- output.Elasticsearch:
- # 连接 ES 集群的用户名
- username: test-filebeat
- # 连接 ES 集群的密码
- password: "${test-filebeat 密码}"
- # Elasticsearch 集群
- hosts: ["http://192.168.1.31:9200",
- "http://192.168.1.32:9200",
- "http://192.168.1.33:9200"]
- # 索引配置
- indices:
- # 索引名
- - index: "nginx_access_%{ yyy.MM}"
- # 当类型是 nginx_access 时使用此索引
- when.equals:
- fields.type: "nginx_access"
- # 关闭自带模板
- setup.template.enabled: false
- # 开启日志记录
- logging.to_files: true
- # 日志等级
- logging.level: info
- # 日志文件
- logging.files:
- # 日志位置
- path: /opt/logs/filebeat/
- # 日志名字
- name: filebeat
- # 日志轮转期限, 必须要 2~1024
- keepfiles: 7
- # 日志轮转权限
- permissions: 0600
启动 filebeat
/opt/filebeat/filebeat -e -c /opt/filebeat/filebeat.YAML -d "publish"
测试
写入一条数据
curl -I "http://192.168.1.11"
在 kibana 中查看
附录
kibana 角色权限相关文档链接
https://www.elastic.co/guide/en/elasticsearch/reference/7.3/security-privileges.html#privileges-list-cluster
来源: http://blog.51cto.com/cyent/2468357