LoginSignup
18
20

More than 5 years have passed since last update.

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

Posted at

概要

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

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

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

search-guardとは

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

前提

既に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
18
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
20