OneLogin(OIDC)でALB認証機能を使ってみた
おはようございます、加藤です。今週4本目のブログです、前置きのネタが思い浮かびませんでした。気にせず本文行きます。
概要
【新機能】AWS ELBのApplication Load Balancer(ALB)の認証機能でWebアプリにGoogle認証を追加する
上記のブログのGoogle認証の部分をOneLoginに置き換えた構成です。本ブログを読む前にお読み頂くことを推奨します。
前提
AWS側で以下の構成が作成済みという前提で進めます。
- HTTPSでアクセスできるALB配下のWebサーバーが存在する
- 証明書がALBに割り当てられている
- ドメインがALBに割り当てられている
やってみた
OneLogin
Company Apps作成
OIDCを利用するために、Company Appsを作成します。
上部メニューから APPS → Add Apps と操作し、追加画面を開きます。
OIDC と入力して検索を行い、OpenID Connect をクリックして作成画面を開きます。
Display Name を任意の者に設定し SAVE をクリックして作成します。
作成が完了すると、メニューが追加されます。Configuration で Login Url, Redirect URI's を設定します。
Login Url はALBへアクセスすることができるUrlを設定してください。
Redirect URI's は設定した https://<ALBに設定するドメイン>/oauth2/idpresponse という形式で設定してください。
SSO でClient ID, Client Secret を確認してください。メモしておきましょう。Secret は Show client secret をクリックすると表示されます。
また、Token Endpoint を POST へ変更してください。最後に SAVE をクリックし保存します。
Key | リスナー設定との対応 |
Client ID | クライアントID |
Client Secret | クライアントのシークレット |
ユーザー作成
テスト用のユーザーを作成します。
Authentication で OpenID を確認しておきましょう。ALBにアクセスする際にはこれをユーザー名として使用します。
Applications でユーザーとアプリケーションを関連付けます。 + をクリックするとアプリケーションの選択を要求されるので、作成したOIDCを選びます。
何も変えずに CANCEL をクリックします。
最後にEndpointの為の情報を取得します。Terminalで以下のコマンドを実行します。見やすくするために jq を使っていますがインストールされていない環境では省いてテキストエディタ等で整形しましょう。
ブラウザでアクセスすることも可能です、環境に応じて方法は変更してください。
curl https://<OneLoginのサブドメイン>.onelogin.com/oidc/.well-known/openid-configuration | jq -r
取得したJSONから以下の物をメモしておきます。
Key | リスナー設定との対応 |
issuer | 発行者 |
authorization_endpoint | 認証エンドポイント |
token_endpoint | トークンエンドポイント |
userinfo_endpoint | ユーザー情報エンドポイント |
AWS(ALB)
ALBの設定は前述のブログと完全に同じです。OneLoginの項目で設定の対応は表にまとめているので、それを元に入力してください。
動作確認
ブラウザでアクセスすると、OneLoginのログイン画面が表示されます。
Email と Password を入力するように求められますが、入力するのは OpenID と Passwordです。
入力して LOG IN をクリックします。
無事にアクセスできました!(インスタンスIDが表示されるだけなので凄く地味です...)
わざとパスワードを間違ってみた
OpenID, Passwordは正しいが権限の無いユーザーでアクセスしてみた。
MFA(Google Authenticator)も付けてみました。一度、Open ID, Passwordで LOG IN をクリックした後この画面になります。
あとがき
OneLogin & ALBで認証付きWebサーバーを実現できました!
OneLoginには指定のグローバルIPアドレスからのアクセスの場合はMFAをスキップというもできるので、社内からはID, Passwordで社外からはMFAも必要など柔軟なポリシーが設定もできます。
以上です、読んで頂きありがとうございました!