概要
いわゆる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