こんにちは。
@shin0higuchiです😊
最近Elasticsearch + Kibanaをマルチテナントで利用する方を多く見かけます。
そういったときに問題になってくるのが、セキュリティですね。
たとえば
など、色々とセキュリティ要件が発生するはずです。
この記事では、実際に上記のような設定ができるのか、どうやって設定するのかといったところを
改めて整理してみます。
※多少回りくどい検証過程を書いているので、「結局どうしたらいいの?」という部分のみ知りたい方は、後編にご期待ください。
バージョン情報など
macOS High Sierra version 10.13.2
Elasticsearch 6.1.1
Kibana 6.1.1
Logstash 6.1.1
x-packはElasticsearchとKibanaにインストールしています(試す場合はトライアル版で構いません)
下準備
まずは、今回の記事で使うサンプルデータについてです。
想定として、自分がkibanaによるログ可視化サービスを提供しており、クライアントとしてA社およびB社がいると仮定します。
さらにクライアントの中にも、管理者と一般ユーザーがいると仮定しましょう。
整理すると下のような4種類になります(厳密にはサービス自体の管理者を含むと5種類)
A社 | B社 | |
---|---|---|
admin | A社のダッシュボードを編集できる | B社のダッシュボードを編集できる |
一般社員 | A社のダッシュボードの閲覧のみ可能 | B社のダッシュボードの閲覧のみ可能 |
作成してあるダッシュボード
ダッシュボード名 | 使用index | 概要 |
---|---|---|
[A社]売り上げ推移 | company_a | A社の売り上げ推移を可視化したダッシュボード |
[B社]売り上げ推移 | company_b | B社の売り上げ推移を可視化したダッシュボード |
[管理者]売り上げ推移ダッシュボード | company_a, company_b | A社B社のデータを横断して推移を可視化したダッシュボード |
それぞれのダッシュボードは下の画像のようになっています。
(機能確認用のサンプルなので必要最低限の内容です)
- [A社]売り上げ推移
- [B社]売り上げ推移
- [管理者]売り上げ推移ダッシュボード
各ユーザーごとの権限は下記の通りです。
[A社]売り上げ推移 | [B社]売り上げ推移 | [管理者]売り上げ推移ダッシュボード | |
---|---|---|---|
admin | 編集可能 | 編集可能 | 編集可能 |
userA_admin | 編集可能 | 閲覧不可 | 閲覧のみ※ |
userA_general | 閲覧のみ | 閲覧不可 | 閲覧のみ※ |
userB_admin | 閲覧不可 | 編集可能 | 閲覧のみ※ |
userB_general | 閲覧不可 | 閲覧のみ | 閲覧のみ※ |
※自社データのみ閲覧可能
index毎に制御
まず、もっともシンプルなアクセス制御方法として、index毎の権限を設定する方法があります。
例えば「userA_adminにはcompany_a indexへのall権限」、「userB_generalにはcompany_b indexへのread権限のみ」といった具合です。
この部分は非常にシンプルですが、実際にKibanaで設定してみます。
既に使ったことのある方はご存じかと思いますが、
Elasticsearchのアクセス制御の仕組みは、Roleとして権限グループを作成し、そこにUserを結びつけることで実現します。
ではまず、A社のadminである「userA_admin」について見ていきます。
最初に、Roleとして「roleA_admin」を作成します。
Create roleを選択し...
Role名および権限を設定します。
ここではcompany_aというindexにall権限を付与しています。
※Cluster Privilegesに関する説明は本記事では割愛します。要望があれば別途まとめる....かもしれません。
次にroleA_adminのロールに紐付くユーザーとしてuserA_adminを作成します。
Create userを選択します。
userA_adminという名前のユーザーを作り、Roleとして、「roleA_admin」「kibana_user」を付与します。
(kibana_userについては後述します。kibanaを使うために必要な権限だと考えてください。)
userA_adminでログインして、ダッシュボードを確認してみます。
上がA社のダッシュボード、下がB社のダッシュボードです。
B社のダッシュボードは見えなくなっていますね。
※ただし、「B社のダッシュボードが存在すること」がわかってしまいます。この問題については後述します。
他のユーザーなども同様に作ります。
試しにuserA_generalも試してみます。
期待する挙動はA社ダッシュボードの閲覧のみができることです。
しかし....編集できてしまいました....
そうなんです。
Kibanaのダッシュボード自体の情報は、.kibanaというindexに保存されているので、
company_aのindexを制御しても、ダッシュボードの編集や削除ができてしまうのです。
B社のダッシュボードが一覧に表示されてしまったのもこのためです。
つまり、ダッシュボードの編集権限をカットするには、.kibana indexへの権限を制限する必要があります。
少し長くなってしまったので、その方法に関しては、後編で書くことにします。
ご期待ください☺️
Acroquest Technologyでは、キャリア採用を行っています。
- ビッグデータ(Hadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
- マイクロサービス、DevOpsなどの技術を使ったり、データ分析、機械学習などのスキルを活かしたい。
- 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
- 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
データ分析基盤Elasticsearchを使い倒したいエンジニア募集! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com