エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

Redash権限管理のための独自CLIツールを作りました

AI・機械学習チームの丸尾 @snowhorkです。

今回は業務改善(+趣味)で作ったRedash権限管理ツール rdiam について紹介したいと思います。

github.com

エムスリーにおけるRedashの利用

まずはこのツールができる以前のエムスリーにおけるRedash*1の活用の経緯を紹介したいと思います。

Redashは様々なデータソースに対して、SQLによる分析結果を可視化・共有ができるBIツールです。エムスリーではデータソースとして、ほぼBigQueryを対象にして活用しています。

背景としては、ここ数年で、オンプレのDB、AWSのDB、そのほか各種データソースをデータマートとしてBigQueryに集約していることがあります。現在では、エンジニアのみならず、ビジネスサイドのメンバーもRedash経由でSQLを書いたり、ダッシュボードでKPIの追跡したりしています。

Redashには、BigQuery経由でエムスリーのほぼ全てのデータがあるものの、データによっては、一部のユーザーしか見てはいけないものもあります。 そのため、ユーザーごとに権限を厳密に管理する必要がありました。

私の所属するAI・機械学習チームを中心としてBigQueryへのデータ連携の整備を進めている背景もあり、AI・機械学習チームが申請に基づいて権限設定をしました。

Redashの権限設定

Redashの権限設定にはいくつか大変なことがあるのですが、その前にRedashの権限構造について紹介します。実のところをいうと、我々の用途ではこの権限構造では若干複雑すぎるということがあります。

DataSourceの設定

まず、対象となるデータソースはBigQueryの場合は、GCPのService Account(SA)とひもづける必要があります。実際はRedashの管理画面で認証情報をアップロードします。

f:id:snowhork:20210514134418p:plain
DataSource管理画面

Queryの設定

次に、SQLでクエリを書く際は、どのDataSourceを用いるかを指定する必要があります。

f:id:snowhork:20210513150223p:plain
RedashのQuery編集画面

UserとGroupの設定

最後に、各UserはいくつかのGroupに所属して、GroupごとにどのDataSourceが利用可能なのかを設定できます。

以上のことをまとめた図がこちらになります。

f:id:snowhork:20210513160234p:plain
Redashの権限構造の全体像

Redashの権限設定の問題点

(1) UserをGroupに追加するのが手間

まずはUI上の問題です。RedashのGroup一覧画面は、下の図のような画面になりますが、以下の2点の問題があります:

  • Groupを名前で検索できず、ページネーションしつつ探さなければならない

  • 複数のUserを一括であるGroupに追加できない

  • あるUserを一括で複数のGroupに追加できない

f:id:snowhork:20210513150752p:plain
RedashのGroup一覧画面

特に複数のUserを一括追加できないことがクリティカルで、複数人の権限申請がまとめて来た際には、かなり面倒な作業になってしまいます。

(2) Queryに必要なGroupがわからない

ビジネスサイドのメンバー含め、利用者からすると、自分がどのGroupに属し、所望のテーブルを使うにはどのDataSourceが必要なのかを調べるのは困難です。 実際にそれを調べるのは管理画面からも困難で、DataSourceの管理ページを見ても、どのGroupに属していれば利用可能なのかはわかりません。なので、全てのGroupの設定を調べるか、別途ドキュメントを管理するしかありません。

rdiamの誕生

以上の理由から、Redash権限管理のCLIツールとしてrdiamが誕生しました。

Redashが公式に公開している権限操作のエンドポイントは見当たらなかったので*2、ブラウザの開発者ツールを使いつつ、内部的に使われてるであろうAPIを見つけて実装しました。(なので、Redashのバージョンが上がったらバグが出るかも...)

rdiamには2つのサブコマンドを実装して、上記の問題を解決しています。

how to install

# requirement: go version >= 1.16.0, Redash version >= 7.0.0
go install github.com/snowhork/rdiam@latest

rdiam add

対象のUserを対象のGroupに追加することができます。複数のUserを複数のGroupに1コマンドで追加できます。これにより、上で述べた(1)の問題を解決します。

# example usage
rdiam add -u user1@email.com,user2@email.com -g group_A,group_B

rdiam inspect

クエリのURLを指定することで、そのクエリを見るのに必要なGroupを表示します。これにより、上で述べた(2)の問題を解決します。

# example usage
rdiam inspect https://redash.mydomain.com/dashboard/my-dashboard
# example output
ID my-dashboard dashboard is: Awesome Dashboard
        ID 1025 query is: Weekly_Conversion
                ID 10 datasource is: my-bigquery
                        * full-access-group (FullAccess)
                        * read-only-group (Readonly)
        ID 1024 query is: Monthly_Conversion
                ID 10 datasource is: my-bigquery
                        * full-access-group (FullAccess)
                        * read-only-group (Readonly)

まとめ

Redash権限管理で、手動では手間だった作業をツール化しました。 Redashの運用をされている方で、自分の会社ではこういった運用をしている、こういった問題点がある、などがありましたら、是非コメントをください!

We are hiring!

エムスリーでは、Redash, Bigquery, Embulk, Digdag などデータ整備・データパイプラインを構築するエンジニアを募集しています!興味がある方は是非応募してみてください!

jobs.m3.com