「社内のMicrosoftアカウント(Entra ID)を使って、AWS上の社内システムにログインさせたい」
これを実現するには、IDプロバイダー(IdP)であるMicrosoft Entra IDと、サービスプロバイダー(SP)となるAmazon Cognitoを連携させる必要があります。この記事では、両者をSAML認証で接続し、AWS ALB(ロードバランサー)経由でのシングルサインオン(SSO)を完成させる手順を解説します。
前提条件と構成
本記事は、以下の設定が完了していることを前提としています。
- Azure側: エンタープライズアプリケーションの作成とSAML設定の準備 (参照:Azure (Entra ID) 側の設定手順)
- AWS側: ALBとCognitoユーザープールの作成 (参照:AWS (ALB & Cognito) 側の設定手順)
1. Azure (Entra ID) 側の仕上げ設定
Azureのエンタープライズアプリケーション設定画面に戻り、AWS Cognitoと連携するための識別子とURLを設定します。
識別子と応答URLの入力
「基本的なSAML構成」の編集画面を開き、以下のフォーマットで入力します。これにより、Azureは「どのCognitoユーザープールに対して認証情報を渡せばよいか」を認識します。
| 項目 | 入力値のフォーマット | 例 |
|---|---|---|
| 識別子 (エンティティ ID) | urn:amazon:cognito:sp:{CognitoユーザープールID} | urn:amazon:cognito:sp:ap-northeast-1_xxxxxxx |
| 応答 URL (ACS URL) | https://{Cognitoドメイン}/saml2/idpresponse | https://auth.example.com/saml2/idpresponse |

属性とクレームの確認
Cognito側でユーザーのメールアドレスなどを正しく受け取るために、「属性とクレーム」の設定を確認します。Eメールアドレスなどが正しくマッピングされているか確認してください。

接続テスト
設定が完了したら、Azureの画面下部にある「テスト」ボタンをクリックし、現在ログインしているユーザーでサインインを試行します。成功すると、トークンに含まれる属性情報が表示されます。

2. AWS ALBとCognitoの最終連携
Azure側の設定が完了したので、AWS側でこれを受け入れる設定を有効化します。

ALBリスナールールの設定
EC2インスタンスの前段にあるALB(Application Load Balancer)のリスナールールを編集します。
HTTPS (443) リスナーのルールで、認証アクションとして作成済みのCognitoユーザープールを指定します。
- アクションの追加: 認証 (Authenticate)
- 認証プロバイダー: Amazon Cognito
- ユーザープール: (作成したプールを選択)
- アプリクライアント: (作成したアプリクライアントを選択)

3. 動作確認
全ての設定が完了しました。実際にブラウザからALBのドメイン(例:https://app.example.com)にアクセスしてみましょう。
- ALBのURLにアクセスすると、Cognitoのログイン画面(またはAzureのログイン画面)にリダイレクトされます。
- Azure(Microsoftアカウント)でログインを行います。
- 認証が成功すると、ALB配下のEC2(Difyなどのアプリケーション)の画面が表示されます。

まとめ
これで、Azure AD (Entra ID) で管理されているユーザーアカウントを使って、AWS上のアプリケーションにセキュアにアクセスできる環境が整いました。
この構成により、ユーザーは新たなID/パスワードを覚える必要がなくなり、管理者はAzure側でアカウントを一元管理できるため、利便性とセキュリティの両方が向上します。


コメント