OneLoginとRedashのSAML連携方法
トリプル・ダブリュー・ジャパン株式会社でソフトウェアアーキテクトをしています西田です。ネット上では主にkbigwheelの名前で活動しています。
最近社内ではredashの重要性が増しており、同時にアカウント管理のコストが徐々に増えてきました。 すでに社内ではIDaaSとしてOneLoginが導入されており、redashとのSAML連携ができる環境ができていたのですが一方でSAML連携を一から設定することは難易度が高く、過去複数人が何度か設定に挑戦したものの今まで正しく設定できたことがありませんでした。 今回改めて時間を取って問題解決を図ったところ、どうすれば正しく連携できるかがわかりましたのでこちらで手順を残しておきます。
前提
以下の環境で作業を行いました。
- 2019/06/19時点でのOneLogin
- AMIから作成したredash入りのEC2インスタンス(redash.4.0.1.b4038)
- OneLogin, redash共に管理権限を持っている
連携手順
1. OneLoginでredash用のAppを追加
- OneLoginの管理画面に行く
- 「Apps」を選択
- 「Add Apps」を選択
- キーワード「saml」で検索
- 「SAML Test Connector (Advanced)」を選択して追加
- Display Nameを入力(何でも良いです)
- 「Save」を選択
2. SAML MetadataのURLを取得
- 先程作ったOneLogin上のredash用Appの設定画面を開く
- 「MORE ACTIONS」を選択
- 「SAML METADATA」を 左クリックせず右クリックからリンクをコピー
- コピーしたURLをどこかへ控えておく
3. redashにSAML MetadataのURLを設定
- redash管理画面のSettingsタブを開く ( https://{your_domain}/settings/organization )
- 「SAML enabled」をチェック
- 「SAML Metadata URL」へ先程控えたURLをペースト
- 右下に保存成功と出ることを確認
4. OneLogin上の自分自身のユーザーへOneLoginでredash用のApp実行権限を付与
以下のテストのため、自分自身のユーザーへ①で作成したAppの実行権限を付与します(付与方法は直接/Role経由/Group経由などどれでも良いです)。 付与したあとにoneloginのポータルに表示されていることを確認すると確実です。
4. OneLogin - Redash連携固有の問題を解決
ここまではマニュアル通りの手順でしたが、ここまで行った後にredashのログイン画面から「SAML Login」ボタンを押すとredashサーバ側で500 Internal Server Errorが発生しました。
以下の手順はredashサーバのエラーログから特定した問題の解決法になります。
4.1 redash側から要求されているパラメータrecipientの設定
redash用Appの設定画面のrecipientに次の文字列を設定
http://{your_domain}/saml/callback?org_slug=default
4.2 pyyml2の want_assertions_signed
オプションを無効化
ssh {redashのサーバ} sudo vim /opt/redash/redash.4.0.1.b4038/redash/authentication/saml_auth.py 46行目の 'want_assertions_signed': True, を 'want_assertions_signed': False, に書き換え
4.3 redash側から要求されている属性FirstName/LastNameの設定
RedashでSAML認証できるまで - Cybozu Inside Out | サイボウズエンジニアのブログにも書かれている通りredashは
認証応答メッセージ(Response)のSAMLアサーションの属性ステートメント(AttributeStatement)に、"FirstName"と"LastName"が含まれていることを期待している
です。 OneLoginはこのパラメータへユーザーごとに別の値を設定する仕組みを提供していますが、今回は動作確認のため私のFirstName/LastNameをそのまま固定値で書きました。
5. 動作確認
以上を行い再びredashのトップ画面から「SAML login」ボタンを押したところ、正常にログインすることができました。
6. ユースケースごとに適切な設定を行う
- redashへのアクセスを許可したい人に、OneLogin上のredash用のAppの実行権限を付与
- FirstName/LastNameへ適切な値を設定