はじめに
背景・目的
- ALBでのOIDC認証について、CDKを用いた設定方法が気になったので、本記事に学習記録として残しておきます。
想定読者
- CDKを用いたALB・ECS構築経験のある方
本記事は学習記録の側面が強く、割愛している部分があることをご理解ください。
設定の流れ
AWS公式ドキュメントを参考にしつつ、Googleアカウント認証済みユーザのみがALB背後のECSアプリにアクセスできるよう、CDKを用いて設定してみます。
Google OAuth 2.0 クライアントIDの設定
事前にGoogle Cloud Platformでプロジェクト作成が完了していることを想定しています。
- Google Cloud Platformの
APIとサービス
にアクセスします。 - 左メニューから
認証情報
を選択した後、認証情報を作成
を押下します。
-
OAuthクライアントIDの作成
を選択し、必要な情報を入力します。- アプリケーションの種類:
ウェブアプリケーション
- 名前:任意の名前を入力
- 承認済みのリダイレクトURI:
https://ALBのドメイン名/oauth2/idpresponse
- アプリケーションの種類:
- クライアント作成後に表示される、クライアントIDとシークレットを控えておきます。
- クライアントシークレットはSecretsManagerに格納しておきます。
- ディスカバリーエンドポイントhttps://accounts.google.com/.well-known/openid-configurationにアクセスし、ALB設定時に利用する値を控えておきます。
- issuer
- authorization_endpoint
- token_endpoint
- userinfo_endpoint
ALB・ECSの構築
- BLEAのblea-guest-ecs-app-sampleやCDK API Referenceを参考に、ALB及びECS資源構築用CDKコードを用意します。
本記事では詳細割愛します。
ALBリスナー ルールに認証を追加
-
AuthenticateOidcOptionsのExampleを参考に、ALBリスナールールにOIDC認証設定を追加します。
- Google OAuth 2.0 クライアントIDの設定で控えた値をパラメータに指定してください。
- クライアントシークレットはSecrets Managerから参照します。
- 認証に成功した場合にはターゲットグループ(ECS)に転送するように設定しています。
// ALBにOIDC認証を追加
albListener.addAction('DefaultAction', {
action: elbv2.ListenerAction.authenticateOidc({
authorizationEndpoint: props.oidc.authorizationEndpoint,
clientId: props.oidc.clientId,
clientSecret: SecretValue.secretsManager(props.oidc.secretsName, { jsonField: props.oidc.secretsJsonField }),
issuer: props.oidc.issuer,
tokenEndpoint: props.oidc.tokenEndpoint,
userInfoEndpoint: props.oidc.userInfoEndpoint,
next: elbv2.ListenerAction.forward([appTargetGroup]),
})
})
動作確認
- ブラウザからALBにアクセスしてみると、Googleの認証画面にリダイレクトされます。
- Googleアカウントの認証情報を入力すると、
https://ALBのドメイン名/oauth2/idpresponse
へのリダイレクト(クエリ文字列に認可コードを含む認可コードレスポンス)を経て、無事にALB背後のECSアプリが表示されます!
注意事項
- 本記事は万全を期して作成していますが、お気づきの点がありましたら、ご連絡よろしくお願いします。
- なお、本記事の内容を利用した結果及び影響について、筆者は一切の責任を負いませんので、予めご了承ください。