AI・機械学習チームの丸尾 @snowhorkです。
今回は業務改善(+趣味)で作ったRedash権限管理ツール rdiam について紹介したいと思います。
エムスリーにおける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の管理画面で認証情報をアップロードします。
Queryの設定
次に、SQLでクエリを書く際は、どのDataSourceを用いるかを指定する必要があります。
UserとGroupの設定
最後に、各UserはいくつかのGroupに所属して、GroupごとにどのDataSourceが利用可能なのかを設定できます。
以上のことをまとめた図がこちらになります。
Redashの権限設定の問題点
(1) UserをGroupに追加するのが手間
まずはUI上の問題です。RedashのGroup一覧画面は、下の図のような画面になりますが、以下の2点の問題があります:
Groupを名前で検索できず、ページネーションしつつ探さなければならない
複数のUserを一括であるGroupに追加できない
あるUserを一括で複数の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 などデータ整備・データパイプラインを構築するエンジニアを募集しています!興味がある方は是非応募してみてください!