レタスのかわをぜんぶむく

ぜんぶむきます

Redashでユーザーにクエリの閲覧と実行のみを許可する

Redashから出力したデータを監査等の別プロセスで利用する場合や、利用部門のリテラシが低い場合など
全ユーザーがなんでも出来てしまうと問題があるものの、ある程度制限した状態でRedashを利用してほしい場合がある。

そこで、用意されたパラメータつきクエリの閲覧と実行のみができるユーザーを作成したい。

tl;dr

  • Redashの権限管理は2種類ある
    • データソース毎の設定 (Full Access / View Only)
    • 実行できるアクションの設定
  • アクションへの設定は管理画面からは行えないのでCLIで行う必要がある
  • パラメータを都度取るようなクエリへの閲覧実行権限は後者でないと設定できない

環境

  • MacOS 10.14.6
  • docker desktop 2.1.0.5
  • Redash 8.0.0+b32245

検証にあたっては、id:kakku22さんのredash-hands-onリポジトリを利用した。
Dockerだけ入れていれば手元で試せるので、本家サイトの導入例よりとても手軽で最高。

github.com

解決したい課題

クエリ編集権限を与えずに、パラメータ付きクエリを閲覧実行できる権限をユーザーに設定したい。

Redash上から行える権限管理ではデータソースに対するFull AccessかView Onlyのどちらかしか設定できない。
単純にView Onlyになっている状態だと、パラメータ付きクエリにパラメータを渡して結果の絞り込みが行えない。
逆にFull Accessを与えてしまうとクエリの編集削除、その他諸々のことが行えてしまう。

そのため、新規クエリ発行・既存クエリ編集などをさせない状態で
既存のパラメータつきクエリを利用できる状態を用意したい。

権限モデル

Redashではグループに紐づく2種類の権限モデルが存在する。
https://redash.io/help/user-guide/users/permissions-groups

  • データソース毎の設定 (Full Access / View Only)
  • 実行できるアクションの設定

データソース毎の設定については右上のメニューGroups > [グループ名] > Data Sourcesから 以下のような画面で設定が行える。
Full Accessでは全機能が利用でき、View Onlyでは既に実行された結果のみが閲覧できる。

内部的にはdata_source_groupsというテーブル内に情報が格納されている。
adminグループへの設定レコードはdata_source_groupsに存在しない。

postgres=# select * from data_source_groups;
id | data_source_id | group_id | view_only
----+----------------+----------+-----------
  1 |              1 |        2 | f

後者のアクションへの権限はRedash上からは確認できないため
付属されているCLIツールのmanage.pyを利用するか、直接groupsテーブルを更新する必要がある。

postgres=# select id, org_id, type, name, permissions from groups;
 id | org_id |  type   |   name   |                                                                              permissions
----+--------+---------+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  1 |      1 | builtin | admin    | {admin,super_admin}
  2 |      1 | builtin | default  | {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}

permissionsカラムで列挙されている内容が、そのグループで実行できるアクションとなっている。
指定できるpermissionは10種類近くあるようだが、対応するドキュメントが公式にはないので試行錯誤する必要がある。

今回設定をしたかったクエリの閲覧実行のみを許可したい場合は
データソースへをFull Access, 許可するアクションを{view_query,execute_query}と設定することで実現出来た。

それぞれ、ViewOnly, ExecuteOnlyを用意して設定した後はこちら。

postgres=# select * from data_source_groups;
 id | data_source_id | group_id | view_only
----+----------------+----------+-----------
  1 |              1 |        2 | f
  2 |              1 |        3 | t
  3 |              1 |        4 | f
postgres=# select id, org_id, type, name, permissions from groups;
 id | org_id |  type   |   name   |                                                                              permissions
----+--------+---------+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  1 |      1 | builtin | admin    | {admin,super_admin}
  2 |      1 | builtin | default  | {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}
  3 |      1 | regular | ViewOnly | {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}
  4 |      1 | regular | ExecuteOnly | {view_query,execute_query}

後はユーザーをそれぞれのグループに所属させればグループに指定された権限を持つようになる。

なお、クエリはデータソースに紐付いているため
事前に利用したいクエリが存在するデータソースをグループに追加しておく必要がある。

設定毎のRedash上でのクエリの見え方

View Onlyのみ

固定クエリ

問題なく実行できる

クエリ自体の編集は保存時にエラー

パラメータ付きクエリ

表示するだけでエラー

ExecuteOnly (Full Access かつ {view_query, execute_query} )

固定クエリ

問題なく表示されているものの
許可されないアクションはリンク自体表示されていないため編集画面を出せない

パラメータ付きクエリ

問題なく表示される

パラメータを変更して再実行も可能