「社内システムをインターネットに公開したいが、セキュリティが不安」「手軽にログイン機能を実装したい」
そんな時に役立つのが、AWSのロードバランサー「ALB (Application Load Balancer)」と認証サービス「Amazon Cognito」の連携です。この記事では、ALBでのHTTPS化から、Cognitoを使ったユーザー認証、さらに外部IDプロバイダー(Entra IDなど)との連携設定までをステップバイステップで解説します。
1. ALB (Application Load Balancer) の設定
まずは、アプリケーションへの入り口となるロードバランサーを作成し、HTTPS通信を可能にします。
ALBの作成とHTTPS化
AWSコンソールからALBを作成します。ターゲットグループには、バックエンドとなるサーバー(例: Difyが稼働するEC2インスタンス)を指定します。
重要ポイント: Cognitoとの連携にはHTTPSが必須です。AWS Certificate Manager (ACM) でSSL/TLS証明書を発行し、ALBのリスナー設定でHTTPS (ポート443) を有効にしてください。
※ALB と EC2 の Security Group 設定例

セキュリティグループでは、EC2インスタンスがALBからの通信のみを許可するように設定することで、セキュリティを強化できます。
Route 53でのドメイン設定
発行した証明書を使用するため、Route 53で独自ドメインのAレコード(エイリアス)をALBに向けます。
※Route 53 設定例

2. Amazon Cognito の設定
次に、認証基盤となるCognitoユーザープールを作成し、ALBと連携させます。
ユーザープールの作成
Cognitoコンソールから「ユーザープールの作成」を選択します。サインインオプション(Eメール、ユーザー名など)や、パスワードポリシーを設定します。

IDプロバイダーとの連携設定(SAML)
社内システムなどで利用されるEntra ID (旧Azure AD) と連携する場合の設定例です。
- 属性マッピング: Entra IDから取得するEメールアドレスをCognitoの属性にマッピングします。SAML属性には以下を設定します。
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress


その他に要求できる属性は、以下のページを参考にしてください
- メタデータの登録: Azure側で発行された「フェデレーション メタデータ URL」をCognitoに入力します。

SES の構築方法は割愛します
※Cognito で E メールを送信を選択しても問題ないです


アプリクライアントとコールバックURLの設定
認証後のリダイレクト先となるコールバックURLを設定します。ALBと連携する場合、パスは必ず /oauth2/idpresponse となります。
https://{ALBのドメイン名}/oauth2/idpresponse
※メタデータドキュメントのエンドポイント URL を入力には、Azure でメモしておいたアプリのフェデレーション メタデータ URLを入力します

許可されているコールバック URL には、以下を設定します
https://ALBのDNS名/oauth2/idpresponse
3. ALBとCognitoの紐付け
最後に、ALBのリスナー設定を編集し、HTTPSリクエストに対して「認証」アクションを追加します。
- アクションの追加: リスナールールで「認証 (Authenticate)」を選択し、作成したCognitoユーザープールを指定します。
- 転送先: 認証成功後の転送先として、EC2のターゲットグループを指定します。

まとめ
これで、ALBにアクセスしたユーザーは自動的にCognitoのログイン画面にリダイレクトされ、認証成功後にのみアプリケーションを利用できるようになります。
アプリケーション側で認証ロジックを実装することなく、AWSのマネージドサービスだけで堅牢な認証機能を実装できるのがこの構成の大きなメリットです。


コメント