About
- 社内用のシステムやリリース前の機能を限定公開したい場合新規にログイン機能を実装するのは非効率です。
- AWSにはALBの認証機能としてOpenIDConnectをサポートしています。
- Facebook,Yahoo,Googleなどを利用している場合、ALBをアプリケーションとして登録するだけで簡単に認証機能が実装できます。
- リモートワークが推奨されている昨今、突然社内用の管理画面にログイン機能が必要になってお困りになっている方もいらっしゃるのではないでしょうか?
- 今回はGoogleのOauthクライアントIDを利用してOIDCする方法を説明します。
利点
- アプリケーション毎に管理機能を実装する必要がなくなる。
認証のフロー
- ALBにアクセス
- ログイン状態をGoogleAPIに問い合わせる
- 非ログイン状態であればGoogleの認証画面を表示、ログイン状態ならALBにリダイレクト
- ALBからはターゲットグループ(EC2など)にリクエストを振り分ける。
X-Amzn-Oidc-DataヘッダーにALBによって署名されたJWTのトークンが入るので、
アプリケーション側でペイロード(ユーザークレーム)を取得してユーザを判定する事も可能。
- EC2からアプリケーションのレスポンス
- ユーザからはどこのレイヤーで認証されているかを意識する事はないし、いつも使っているアカウントで入れて幸せ
認証設定
GoogleOauth2.0クライアントID を取得する
1. GoogleCloudPlatformにアクセス
2. Oauth同意画面設定
- 左ナビから OAuth同意画面を選択(プロジェクトを作成していない場合は新規に作成)
- UserType > 内部 > 作成
- Oauth同意画面で下記項目を入力して保存
項目 |
内容 |
名前 |
任意 |
承認済みドメイン |
ALBのDNS名 |
3. 認証情報を作成
- 左ナビから [認証情報] を選択
- 画面上部の [認証情報を作成] > [OauthクライアントIDの作成]
- 下記項目を入力して保存
* 上記ダイアログが出るのでクライアントIDとクライアントシークレットをコピーしておく
AWSのロードバランサー上で認証の設定を行う
1. ロードバランサーの設定画面
ALBは既に作成済みの前提
-
EC2 > ロードバランサー
- 認証設定したいALBを選択
- リスナータブを開いて [ルールの表示/編集] を選択
- ルールの編集タブを選択
- デフォルトアクションの左のペン(編集ボタン)を選択
- [アクションの追加] > [認証]
- 下記項目を入力して更新
ロードバランサーにアクセスする
- Googleに非ログインの状態でロードバランサーにアクセスするとGoogleの認証画面にリダイレクト
- 認証を行うとアクセスしたURLにリダイレクトされる
参考記事はこちら。