AWS Application Load Balancer (ALB) と OpenID Connect (OIDC) を使用した認証システムを AWS Lambda で実装するためのものです。
このLambda関数は、ALBから転送されたOIDCトークン(JWT)を処理し、ユーザー情報を抽出して返します。ALBはOIDC認証プロバイダー(例:Amazon Cognito、Auth0、Okta)と連携して認証を行い、認証されたリクエストをこのLambda関数に転送します。 今回はGoogleを例に実装します。
- ユーザーがALBにアクセスすると、ALBはOIDCプロバイダーにリダイレクトして認証を行います
- 認証成功後、ALBはリクエストヘッダーに認証情報(x-amzn-oidc-data)を含めてLambda関数にリクエストを転送します
- Lambda関数は、ヘッダーからIDトークン(JWT)を抽出し、デコードしてユーザー情報を取得します
- 取得したユーザー情報(メールアドレス、名前、サブジェクト)をJSON形式で返します
参考
- 「Google Auth Platform」 → 「クライアント」→ 「CREATE CLIENT」
- OAuthクライアントIDを作成
- リダイレクトURI:
https://<domain>/oauth2/idpresponse
- リダイレクトURI:
- クライアントID, クライアントシークレットを保管(JSONでダンロード)
- AWSマネジメントコンソールでEC2サービスに移動します
- 左側のメニューから「ロードバランサー」を選択します
- 「ロードバランサーの作成」ボタンをクリックし、「Application Load Balancer」を選択します
- 基本的な設定(名前、リスナー、アベイラビリティゾーンなど)を行います
- セキュリティグループを設定します
- ターゲットグループを作成し、Lambda関数を指定します
- 「認証」タブで、「認証の追加」を選択します
- OIDCプロバイダーの情報を入力します:
- アイデンティティプロバイダー:
OIDC(OpenID Connect)
- 発行者のURL:
https://accounts.google.com
- 認証エンドポイント:
https://accounts.google.com/o/oauth2/v2/auth
- トークンエンドポイント:
https://oauth2.googleapis.com/token
- ユーザー情報エンドポイント:
https://openidconnect.googleapis.com/v1/userinfo
- クライアントID:
各自の値
- クライアントシークレット:
各自の値
- アイデンティティプロバイダー:
- 「作成」ボタンをクリックします
参考
- https://developers.google.com/identity/openid-connect/openid-connect?hl=ja
- https://accounts.google.com/.well-known/openid-configuration
- lambda関数を作成(例:oidc-with-alb-lambda)
- コードで
lambda_function.py
を作成し、同ファイルの内容をコピペ - コード → ランタイム設定 でハンドラを
lambda_function.handler
に設定する
Header, Payload, Signature の構成 Header:どのアルゴリズムで署名しているかなど。 Payload:ユーザー情報が入っている部分。Base64にエンコードされている。 Signature:上2つに署名をつけたもの。公開鍵で署名を検証できる。