Elasticsearch
kibana
ELK

kibana(ELK)でユーザーやグループ毎に見せる/見せないをコントロールする。

More than 1 year has passed since last update.

概要

いわゆるRBACの機能をKibana/Elasticsearchに実装する。

各サーバからfluentdなどを使い、各ログをログサーバに送り、
ログサーバで適切な形でDB(Elasticsearch)に保存、
Kibanaで可視化というのは非常に多くの会社で実装していると思うが、
Kibanaはデフォルトでは現状、認証・認可やセキュリティ対策のような機能は実装されていない。

その為、Shieldなど有償のプラグインを使って補う事が一般的だが、
今回は無料のプラグインであるsearch-guardを使ってポリシーベースで
ユーザーやグループに見せる/見せないをコントロールする。

search-guardとは

Kibana/Elasticsearchのセキュリティーを強化するツール。
この機能を使うことでRBACはもちろんLDAP認証も可能になる
ただし、2017年7月時点で日本での知名度はほぼなく、
日本語のドキュメントはほとんど存在しない。

https://floragunn.com/

前提

既にELK環境が構築できているものとする。

導入手順

elasticsearchのプラグインを導入

installするプラグインのバージョンは環境に寄って違うので適宜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でロールを作成

vi /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-*のインデックスのみ参照が可能なグループ。
sg_readonly_nginxグループにはtsukadaユーザーが属すこととする。

ユーザー作成

$ /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

グループ作成、ユーザー設定

sg_readonly_nginxグループにはtsukadaユーザーが属する。

vi /usr/share/elasticsearch/plugins/search-guard-5/sgconfig/sg_roles_mapping.yml
以下追加する

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