elastic5 searchguard实现权限控制日志收集

来源:互联网 发布:南昌高能金域名都 编辑:程序博客网 时间:2024/06/06 01:44

公司新上的项目要做日志检索 机器不太够 弄了一台给各个项目组用,为了各个项目组分开查看各自的日志,就重新装了一下,之前用的es2.4,刚好elastic5出来也有一段时间了,就想着搞一下
注:用的elastic 5.1.1

1.安装elk请自行百度,或者看我之前写的一篇简单的文章

2.安装searchguard
5.0以后不需要安装search-guard-ssl plugin searchguard里面包含有ssl配置
5.0的所有elk所有组建安装目录都在/usr/share/下
bin/elasticsearch-plugin install -b com.floragunn:search-guard-5:5.1.1-9
证书可以通过脚本生成活着网页生成,这里使用脚本自行生成。
使用https://github.com/floragunncom/search-guard-ssl提供的证书生成脚本,对于脚本的执行过程及原理请自行百度。
声称证书时需要修改gen_node_cert.sh中san的相关信息为你的节点信息。
使用了keytool进行san(Subject Alternative Name Certificate)证书生成。
具体参数含义请看:http://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html

3.配置search guard

es配置文件中添加

searchguard.ssl.transport.enabled: truesearchguard.ssl.transport.keystore_filepath: node0.jkssearchguard.ssl.transport.keystore_password:  yourpwdsearchguard.ssl.transport.truststore_filepath: truststore.jkssearchguard.ssl.transport.truststore_password: yourpwdsearchguard.ssl.transport.enforce_hostname_verification: falsesearchguard.ssl.transport.enable_openssl_if_available: falsesearchguard.ssl.http.enabled: truesearchguard.ssl.http.keystore_filepath: node0.jkssearchguard.ssl.http.keystore_password: yourpwdsearchguard.ssl.http.truststore_filepath: truststore.jkssearchguard.ssl.http.truststore_password: yourpwdsearchguard.audit.type: internal_elasticsearchsearchguard.authcz.admin_dn:  - CN=sgadmin  #这里为集群管理员  根据生成方式不同可能有所不同 

在安装的时候遇到了一些环境问题无法解决,因为不是新装的机器,假如有朋友遇到问题实在无法解决 可以使用官方提供的完整配置包(Search-Guard-Bundle )
https://github.com/floragunncom/search-guard/wiki/Search-Guard-Bundle  
tar -xzvf elasticsearch-<UUID>.tar.gz./elasticsearch./sgadmin.sh

假如启动正常至少证明环境是没问题的 就是自己的配置问题

3.配置角色
plugins/search-guard-5/sgconfig下包含角色 组,用户,角色,角色映射的配置文件
1).组可以被授予一系列权限
2).在用户文件中定义所属的组
3).在role配置文件中定义了某种角色被赋予的权限
4).在mapping文件中定义了用户和角色的映射关系
请更改系统默认用户的弱密码
plugins/search-guard-5/tools/hash.sh 进行密码生成
配置完成后使用sgadmin.sh将角色写入es

4.配置kibana使用searchguard
安装search guard插件
./kibana-plugin install https://github.com/floragunncom/search-guard-kibana-plugin/releases/download/v5.1.1-alpha/searchguard-kibana-alpha-5.1.1.zip

默认的kibanaserver用户已经有设置kibana所需的用户权限,如果新添加的用户无法认证则可以通过es的用户查看缺少什么权限进行添加
elasticsearch.url: "https://localhost:9200"elasticsearch.username: "kibanaserver"elasticsearch.password: "xxxx"elasticsearch.ssl.ca: CN=sgadmin.key.pemsearchguard.cookie.password: "xxxxxxxx"

如果之前配置的searchguard.ssl.http.enabled: false不开启则配置elasticsearch.ssl.verify: false 将https换为http
5.配置logstash 
output {    elasticsearch {       xxx       ssl => true       ssl_certificate_verification => true       truststore => "/path/to/elasticsearch-2.3.3/config/truststore.jks"       truststore_password => changeit    }}

6.权限划分
配置后则可以认证以及授权,为了让不同的人只查看自己的日志,则需要对索引活着type进行设置,为了分别存储在不同的索引,我配置的type都以项目名为开头
filebeat里面配置:
document_tyte: test-xxx
在searchguard授权文件授权索引为test-*
这是我的role配置
sg_testuser:  cluster:    - indices:*  indices:    'test-*':      '*':        - READ    '?kibana':      '*':        - indices:*

在logstash indexer中配置输出到es index为
index => "%{type}-%{+YYYY.MM.dd}"

在logstash 5.1.1中使用的启动脚本是upstart

initctl start logstash
kibana修改使用中文地图
tilemap.url: 'http://webrd01.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'
mysql的grok正则
"(?m)^#\s+User@Host:\s+%{USER:user}\[[a-zA-Z0-9._-]+\]\s@\s\s\[%{IPV4 :clientip}\]\s\sId:\s%{NUMBER:row_id}\n^#\sSchema:\s%{USERNAME:db_name}\s\sLast_errno:\s%{NUMBER:lasteerr_num}\s\sKilled:\s%{NUMBER:killed_num}\n^#\sQuery_time:\s%{BASE16FLOAT:query_time}\s\sLock_time:\s%{BASE16FLOAT:lock_time}\s\sRows_sent:\s%{NUMBER:rows_send}\s\sRows_examined:\s%{NUMBER:rows_examined}\s\sRows_affected:\s%{NUMBER:rows_affected}\n^#\sBytes_sent:\s%{NUMBER:bytes_sent}\n([a-z]+\s%{USERNAME:use_db};\n)?SET\stimestamp=%{NUMBER:log_date};\n(/\*\s(?<log_notes>(.*))\s\*/\s)?(?<sql_exec>(.*));(\s#\sTime:\s(?<notes_time>(.*)))?"
0 0
原创粉丝点击