LoginSignup
9
9

More than 3 years have passed since last update.

AWS ALBの認証機能でGoogleアカウント認証を設定する (OpenIDConnect)

Posted at

oidc.png

About

  • 社内用のシステムやリリース前の機能を限定公開したい場合新規にログイン機能を実装するのは非効率です。
  • AWSにはALBの認証機能としてOpenIDConnectをサポートしています。
  • Facebook,Yahoo,Googleなどを利用している場合、ALBをアプリケーションとして登録するだけで簡単に認証機能が実装できます。
  • リモートワークが推奨されている昨今、突然社内用の管理画面にログイン機能が必要になってお困りになっている方もいらっしゃるのではないでしょうか?
  • 今回はGoogleのOauthクライアントIDを利用してOIDCする方法を説明します。

利点

  • アプリケーション毎に管理機能を実装する必要がなくなる。

認証のフロー

  1. ALBにアクセス
  2. ログイン状態をGoogleAPIに問い合わせる
  3. 非ログイン状態であればGoogleの認証画面を表示、ログイン状態ならALBにリダイレクト
  4. ALBからはターゲットグループ(EC2など)にリクエストを振り分ける。
    X-Amzn-Oidc-DataヘッダーにALBによって署名されたJWTのトークンが入るので、
    アプリケーション側でペイロード(ユーザークレーム)を取得してユーザを判定する事も可能。
  5. EC2からアプリケーションのレスポンス
  6. ユーザからはどこのレイヤーで認証されているかを意識する事はないし、いつも使っているアカウントで入れて幸せ

認証設定

GoogleOauth2.0クライアントID を取得する

1. GoogleCloudPlatformにアクセス

2. Oauth同意画面設定

  • 左ナビから OAuth同意画面を選択(プロジェクトを作成していない場合は新規に作成)
  • UserType > 内部 > 作成
  • Oauth同意画面で下記項目を入力して保存
項目 内容
名前 任意
承認済みドメイン ALBのDNS名

3. 認証情報を作成

  • 左ナビから [認証情報] を選択
  • 画面上部の [認証情報を作成] > [OauthクライアントIDの作成]
  • 下記項目を入力して保存
項目 内容
アプリケーションの種類 ウェブアプリケーション
名前 任意
承認済みのリダイレクトURI https://ALBのDNS名/oauth2/idpresponse

スクリーンショット_2020-04-06_23_02_44.jpg
* 上記ダイアログが出るのでクライアントIDとクライアントシークレットをコピーしておく

AWSのロードバランサー上で認証の設定を行う

スクリーンショット_2020-04-06_23_22_45.jpg

1. ロードバランサーの設定画面

ALBは既に作成済みの前提

  • EC2 > ロードバランサー
  • 認証設定したいALBを選択
  • リスナータブを開いて [ルールの表示/編集] を選択
  • ルールの編集タブを選択 スクリーンショット 2020-04-06 23.31.23.png
  • デフォルトアクションの左のペン(編集ボタン)を選択
  • [アクションの追加] > [認証]
  • 下記項目を入力して更新
項目 内容
認証 OIDC
発行者 https://accounts.google.com
認証エンドポイント https://accounts.google.com/o/oauth2/v2/auth
トークンエンドポイント https://www.googleapis.com/oauth2/v4/token
ユーザー情報エンドポイント https://www.googleapis.com/oauth2/v3/userinfo
クライアントID 発行したクライアントID
クライアントシークレット 発行したクライアントシークレット

スクリーンショット_2020-04-06_23_37_53.jpg

ロードバランサーにアクセスする

  • Googleに非ログインの状態でロードバランサーにアクセスするとGoogleの認証画面にリダイレクト
  • 認証を行うとアクセスしたURLにリダイレクトされる

参考記事はこちら

9
9
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
9