9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Redash で google login を有効にする方法。権限変更のためのmanage.pyが動かない時の代替案

Last updated at Posted at 2020-07-09

これは何

自分でAWSで提供されているAMIを使ってインストールした場合、google loginはデフォルトで無効になっていた。
最初はRedash独自の認証機構を使っていたが以下の問題があった。

  • 社内のRedashユーザが退職したケースに対応が面倒。毎回忘れずにユーザ削除をしないといけない
  • 多要素認証がない

Redash は google login を使えるので、導入して上記問題を解決したい。

Redash とは?というのは、他にもたくさん情報があるので割愛します。https://redash.io/
よくRe:dashと表記されているのでそれが正式名称なのかな?と思いましたが、公式サイトだとRedashの表記になっていたのでこの記事ではその表記に合わせます。

google login を入れた時に考えられる問題点

社内ドメインのアドレスのユーザだったら誰でもログインできる?

  • google login を有効にして、許可するドメインをかくと、そのドメインをもつメールアドレスのユーザが誰でもログインしてRedashを使ってQueryを書くことができる。センシティブなデータを扱っている場合、誰でも入れるというのは避けたい
  • 新規ユーザには default の group がデフォルトでつくようになっているが、その権限を制限できるか?

解決策?

真:解決策

  • default グループから権限を剥奪する
  • member グループとでも命名したものにデフォルト同様の権限をつける(新規作成でデフォルトの権限)。新たにRedashを使うユーザにはこのグループをGUIから操作して手動で割り当てる
  • 私の環境はでmanage.pyは全く応答しなかったので、データベースを直接いじることにした。これについてはハマりどころの章で説明します。

google login有効化まではこの通りにやればできる手順書

ハマりどころ(この記事のメインコンテンツ)

特にAWSのAMIを使った場合は内部的にdockerで動いているので、ちょっとだけハマったのでそれについてだけ補足説明を書いておきます。

docker-compose.yml と env のありか

サーバにsshログインすると以下のディレクトリに置かれているのがわかります。
envにpostgresのパスワードなどが書かれているので、中身見ておきましょう。

# pwd
/opt/redash
# ls
docker-compose.yml  env  postgres-data

サーバログインしてsudo su - で root になってディレクトリ移動し、dockerコンテナ全部再起動すると env 読み込みできる。うまくいかなければサーバ再起動でもOK。
dockerコンテナ再起動方法は以下のもの

$ docker-compose down
$ docker-compose up -d

group権限の書き換え

権限やクエリを保存している postgres に繋いで、 groups テーブルの default グループの permissions のところを書き換えて権限0にする。
AWS AMIから作ったインスタンスはデフォルトでローカルにpostgresコンテナが立っているようなので、ここに接続する。

# docker exec -it --user root redash_postgres_1 bash
// docker コンテナの中で以下のコマンド
// password はenv ファイルに書かれているものを使用
# psql -h localhost -U postgres -d postgres --password

postgres に入った後はMySQLとの対応コマンドリストを参照してみていく。神ドキュメント =>  https://qiita.com/aosho235/items/c657e2fcd15fa0647471

コンソールでグループを作った上で以下の作業を行う。グループ作成の時に空白を入れないこと。DBにそのまま保存されてしまう、whereで絞る時に苦労する。

postgres=# select * from groups;
 id | org_id |  type   |    name    |                                                                              permissions                                                                               |          created_at
----+--------+---------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------
  1 |      1 | builtin | admin      | {admin,super_admin}                                                                                                                                                    | 2020-06-30 05:12:08.756199+00
  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} | 2020-06-30 05:12:08.756199+00
  3 |      1 | regular | member     | {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} | 2020-07-01 09:44:08.588092+00
(3 rows)

# UPDATE groups SET permissions = '{}' WHERE name = 'default';
postgres=# select name, permissions from groups;
            name             |                                                                              permissions
-----------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 admin                       | {admin,super_admin}
 default                     | {}
 member                      | {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}

これで、このグループをつけたユーザがどうなるか?というところだが、自分のプロフィール以外実質何もできなくなったのでOK。一応ログインはできる。

インスタンスサイズが小さいと動かない

Redashに割り当てるインスタンスサイズは t2.micro だとnginxがエラー(確か internal server error?)を吐いてしまいました。おそらくメモリサイズが足りないのだろうと思って t3.small を割り当てると動きました。

9
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?