LoginSignup
0
0

[AWS]CDKを用いてALBにOIDC認証設定してみた

Posted at

はじめに

背景・目的

  • ALBでのOIDC認証について、CDKを用いた設定方法が気になったので、本記事に学習記録として残しておきます。

想定読者

  • CDKを用いたALB・ECS構築経験のある方

本記事は学習記録の側面が強く、割愛している部分があることをご理解ください。

設定の流れ

AWS公式ドキュメントを参考にしつつ、Googleアカウント認証済みユーザのみがALB背後のECSアプリにアクセスできるよう、CDKを用いて設定してみます。

Google OAuth 2.0 クライアントIDの設定

事前にGoogle Cloud Platformでプロジェクト作成が完了していることを想定しています。

  • Google Cloud PlatformのAPIとサービスにアクセスします。
  • 左メニューから認証情報を選択した後、認証情報を作成を押下します。
    image.png
  • OAuthクライアントIDの作成を選択し、必要な情報を入力します。
  • クライアント作成後に表示される、クライアントIDとシークレットを控えておきます。
  • クライアントシークレットはSecretsManagerに格納しておきます。
  • ディスカバリーエンドポイントhttps://accounts.google.com/.well-known/openid-configurationにアクセスし、ALB設定時に利用する値を控えておきます。
    • issuer
    • authorization_endpoint
    • token_endpoint
    • userinfo_endpoint

ALB・ECSの構築

本記事では詳細割愛します。

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の認証画面にリダイレクトされます。

image.png

  • Googleアカウントの認証情報を入力すると、https://ALBのドメイン名/oauth2/idpresponse へのリダイレクト(クエリ文字列に認可コードを含む認可コードレスポンス)を経て、無事にALB背後のECSアプリが表示されます!

image.png

注意事項

  • 本記事は万全を期して作成していますが、お気づきの点がありましたら、ご連絡よろしくお願いします。
  • なお、本記事の内容を利用した結果及び影響について、筆者は一切の責任を負いませんので、予めご了承ください。
0
0
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
0
0