在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