※redashの権限指定に誤りがあったので修正(2018/01/18)※ Redash Advent Calendar 2017 の 22日目の記事です!
redashを使って可視化したら今度は、色々な人に公開したくなりますよね?
ただ、会社によっては、「あのデータを全員に見せるのは如何なものか?」勢が少なからずいるはず。
まぁ、なんでもかんでもデータを見せることで事業リスクなったり、インサイダーな重要事実を知っている扱いの人を不用意に増やすのもまた問題でもあります。
そういう訳で、必要な人に適度にデータを公開する為に、redashを使った取り組み事例のご紹介。
検証環境
- ホスト:Ubuntu 16.04 LTS
- redashは、Dockerイメージを使って構築(v3.0.0+b3134)
TLDR
- グループにパーミッション設定をつければ良いが、GUIでは指定不可。 CLIでは出来るようだが、今回はテーブル直接変更した。
- redashだけでは、クエリ単位のパーミッション設定は出来ない。 なので、ロール違いの同じデータベースなデータソースを複数用意して、ロールに応じて参照権限有/無でうまいこと切り分ける(かなり力技)。
はじめに
redash単体で可能なアクセス制御は以下の通り、ソース見るとパーミッション設定値がそのままなので、イメージが湧くと思います。
cf. redash/groups.py · getredash/redash
@option('--permissions', default=None, help="Comma separated list of permissions ('create_dashboard'," " 'create_query', 'edit_dashboard', 'edit_query', " "'view_query', 'view_source', 'execute_query', 'list_users'," " 'schedule_query', 'list_dashboards', 'list_alerts'," " 'list_data_sources') (leave blank for default).")
見難いので、整理するとこんな感じ
create_dashboard create_query edit_dashboard edit_query execute_query list_alerts list_dashboards list_data_sources list_users schedule_query view_query view_source
また、コードにもあるとおり、パーミッションはグループに付与するようです。
ここでは、CLI経由でグループ作成時に指定するようです。GUIでは指定出来ないので、CLIを使う事になりますが、イマイチわからないので、テーブルを直接書き換えちゃいます
前提条件
ユーザ | 所属グループ | パーミッション |
---|---|---|
member1 | member_group | すべての操作可能 |
manager1 | manager_group | ダッシュボードの選択と閲覧しか出来ない |
cf. ダッシュボードの用意には、id:kakku22 さんの kakakakakku/redash-hands-on: Redash study materials for beginners 📊 を活用させていただきました。
cf. testデータソース用のテーブルデータは、 Mockaroo を使ったダミーテーブルを作成しました
ユーザ及びグループの作成
まず、グループの作成、管理者ユーザでredashにログインし、グループを2つ作成し、ユーザを各々所属させます。
グループのパーミッションの変更
次に、redashのデータベースに入って、groupsテーブルを以下のようにいじります
グループ | パーミッション |
---|---|
'member_group' | '{"view_query","execute_query","list_dashboards"}' |
'manager_group' | '{"create_dashboard","create_query","edit_dashboard","edit_query","view_query","view_source","execute_query","list_users","schedule_query","list_dashboards","list_alerts","list_data_sources"}' |
※更新すると即時反映されます
変更結果
manager1の表示
デフォルトと特に変わりません
member1の表示
一方、memberの方は、クエリやアラートなどの表示が消えて選択できなくなっています。
また、ダッシュボードの作成も出来ません。
ダッシュボードも右端にあるはずの編集ボタンが消え、各クエリへのリンクもなくなっていることがわかります。
データソースを分ける
データベース test を作成して、ロール ope_1、ope_2を作成して、以下のように権限設定します。
テーブル名 | ope_1 | ope_2 |
---|---|---|
users | 参照可能 | 参照不可 |
play_list | 参照可能 | 参照可能 |
下記のようにデータソースを作成
ope_2が参照出来ない | ope_2で参照 |
---|---|
各グループに作成したデータソースを割り当て
グループ | 設定 |
---|---|
manager | |
member |
クエリを下記のように作成
上記2つのクエリをならべたダッシュボードを作成して、ユーザによって表示を確認
グループ | 表示 |
---|---|
manager | |
member |
まとめ
以上が現状までに考えた対策です。
ただ、これ非常にややこしい(特にデータソースで分ける辺り)。しかも、柔軟性に乏しいので、その場しのぎでしか無いです。
この方が楽だとか、あればぜひ教えてください!
明日は、 @katsuhisa__ さんです。お楽しみに。