在Kibana(ELK)中,控制用户和组可见/不可见
总结
在 Kibana/Elasticsearch 中实现所谓的 RBAC 功能。
使用fluentd等工具从每台服务器发送日志到日志服务器,
日志服务器将其以适当的形式保存到数据库(Elasticsearch)中,
我认为很多公司都在实施在Kibana上进行可视化分析,
但是目前,Kibana默认情况下并未实现身份验证、授权和安全防护等功能。
因此,使用付费插件(如Shield)来弥补是常见的做法,但这次我们将使用免费的插件search-guard来基于策略来控制用户或组的显示/隐藏。
search-guard 是什么意思?
加强Kibana/Elasticsearch安全性的工具。
通过使用此功能,不仅可以实现基于角色的访问控制(RBAC),还可以实现LDAP认证。
然而,到2017年7月为止,该工具在日本几乎没有知名度,
并且几乎不存在日文文档。
前提
There is no need for a paraphrase in Chinese as “前提” already accurately translates to “premise” or “prerequisite” in English.
假设已经建立了ELK环境。
引入程序
引入Elasticsearch的插件。
根据环境的不同,安装插件的版本也不同,因此请适配Kibana/Elasticsearch的版本。
/usr/share/elasticsearch/bin/elasticsearch-plugin install -b com.floragunn:search-guard-5:5.4.2-12
cd /usr/share/elasticsearch/plugins/search-guard-5/tools
sh install_demo_configuration.sh
sh sgadmin_demo.sh
安装Kibana插件
cd /tmp/
wget https://github.com/floragunncom/search-guard-kibana-plugin/releases/download/v5.4.2-3/searchguard-kibana-5.4.2-3.zip
/usr/share/kibana/bin/kibana-plugin install file:///tmp/searchguard-kibana-5.4.2-3.zip
编辑Kibana插件。
在终端输入命令:vi /etc/kibana/kibana.yml,然后进行以下内容的添加。
elasticsearch.username: "kibanaserver"
elasticsearch.password: "kibanaserver"
elasticsearch.url: "https://localhost:9200"
elasticsearch.ssl.verificationMode: none
复制jks文件
cp -p /etc/elasticsearch/truststore.jks /etc/logstash/truststore.jks
在Elasticsearch中创建角色。
打开位于/usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_roles.yml的文件。
追加如下内容。
sg_readonly_nginx:
cluster:
- CLUSTER_COMPOSITE_OPS_RO
indices:
'messages-*':
'*':
- READ
'?kibana':
'*':
- INDICES_ALL
权限注册
创建一个组,并授予权限。
由于这只是一个例子,所以在此注册的组和权限如下所示。
可以通过索引单元来控制权限。
sg_readonly_nginx组只允许访问nginx-*的索引。
tsukada用户属于sg_readonly_nginx组。
创建用户
$ /usr/share/elasticsearch/plugins/search-guard-5/tools/hash.sh
[Password:]
$2a$12$MiyI73Dpa3qbajPW05ZYVOsSF93TdOBAfPciCTgwnbXS/fw2ok1YO
$
复制生成的哈希值,并将其添加到以下文件中:
vi /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_internal_users.yml
tsukada:
hash: $2a$12$MiyI73Dpa3qbajPW05ZYVOsSF93TdOBAfPciCTgwnbXS/fw2ok1YO
创建群组,设置用户
tsukada用户是属于sg_readonly_nginx组的。
在/usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_roles_mapping.yml文件中打开vi并进行以下追加操作。
sg_readonly_nginx:
users:
- tsukada
設定群組權限
可以通过索引来控制权限。
sg_readonly_nginx组
仅允许参考nginx-*索引。写入负载的组。
使用vi编辑器打开路径为”/usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_roles.yml”的文件,然后进行追加操作。
sg_readonly_nginx:
cluster:
- CLUSTER_COMPOSITE_OPS_RO
indices:
'nginx-*':
'*':
- READ
'?kibana':
'*':
- INDICES_ALL
表达
完成注册后,请执行以下脚本。
/usr/share/elasticsearch/plugins/search-guard-5/tools/sgadmin_demo.sh