別の AWS アカウントの Amazon Cognito ユーザープールを通じてユーザーを認証するように Application Load Balancer を設定する方法を教えてください。
最終更新日: 2021 年 7 月 21 日
Application Load Balancer で Amazon Cognito 認証を使用したいのですが、ユーザープールは別の AWS アカウントにあります。クロスアカウントのユーザープールを使用して認証できますか?
簡単な説明
現在、Application Load Balancer をユーザー認証用に設定する場合、同じアカウントの Amazon Cognito ユーザープールのみがデフォルトでサポートされています。ただし、回避策として、クロスアカウントのユーザープールを OpenID Connect (OIDC) ID プロバイダー (IdP) として設定できます。
次の手順通りに操作を行い、あるアカウント (「アカウント B」) の Application Load Balancer を、別のアカウント (「アカウント A」) のユーザープールによる認証用に設定します。
解決方法
Application Load Balancer を作成する
まだ行っていない場合は、アカウント B で HTTPS リスナーを使用して Application Load Balancer を作成します。
注意: authenticate-cognito および authenticate-oidc ルールのアクションタイプは、HTTPS リスナーでのみサポートされます。
アカウント B で Application Load Balancer の DNS 名を取得する
- アカウント B で、Amazon Elastic Compute Cloud (Amazon EC2) コンソールの [ロードバランサー] ページを開きます。
- ご使用の [Application Load Balancer] を選択します。
- [説明] タブで、ロードバランサーの DNS 名をコピーします。これは、後でテスト用にロードバランサーのエンドポイント URL にアクセスするために必要です。
アカウント A でユーザープールを作成して設定する
- アカウント A で、Amazon Cognito ユーザープールのアプリクライアントを作成します。アプリクライアントの場合は、[クライアントシークレットを生成] チェックボックスを必ずオンにしてください。詳細については、「Amazon Cognito を使用する準備を行う」をご参照ください。
注意: ユーザープールの作成時に、本稼働用の設定を行います。一部のユーザープール設定は、ユーザープールの作成後は変更できません。たとえば、ユーザー登録に必要な標準属性を変更することはできません。 - Amazon Cognito コンソールで、ユーザープールの [全般設定] ページで、[プール ID] をメモします。これは、後でユーザープールの OIDC 設定の詳細を取得するために必要になります。
- 左のナビゲーションペインの [全般設定] で、[アプリクライアント] を選択します。
- [アプリクライアント] ページで、次の操作を行います。
[詳細表示] を選択します。
アプリクライアント ID とアプリクライアントシークレットをコピーします。これらは、後でユーザー認証用に Application Load Balancer を設定するために必要です。 - 左側のナビゲーションペインで、[アプリ統合] の下にある [アプリクライアントの設定] を選択します。
- [アプリクライアント設定] ページで、次の操作を行います。
有効な ID プロバイダーの下で、Cognito ユーザープールのチェックボックスをオンにします。
コールバック URL には、https://loadBalancerDNSName/oauth2/idpresponse と入力します。または、CNAME レコードを使用してカスタムドメインをロードバランサーにマッピングした場合は、「https://CNAME/oauth2/idpresponse」と入力します。
注意: loadBalancerDNSName を、Amazon EC2 コンソールからコピーした DNS 名に置き換えます。CNAME レコードを使用している場合は、CNAME をカスタムドメインに置き換えます。
[ログアウト URL] には、ログアウト後にユーザーをリダイレクトする URL を入力します。テスト用に、https://example.com/ のように有効な URL を入力できます。
[許可されている OAuth フロー] で、[認証コード付与] チェックボックスを必ず選択します。
[許可されている OAuth 範囲] で、[openid] チェックボックスを必ず選択します。openid スコープは ID トークンを返します。必要に応じて、追加の OAuth スコープを選択します。 - [変更を保存] を選択します。
- 左側のナビゲーションペインで、[アプリ統合] の下にある [ドメイン名] を選択します。
- ユーザープールのドメイン名を追加します。
詳細については、「ユーザープールのアプリクライアントの設定」および「ユーザープールへの OIDC ID プロバイダーの追加」をご参照ください。
ユーザープールの OIDC 設定の詳細を取得する
ユーザープールの OIDC 設定エンドポイントにアクセスします。Application Load Balancer でユーザープールを OIDC IdP として設定するには、設定の詳細が必要です。
- ブラウザで、次の URL を入力します。
https://cognito-idp.region.amazonaws.com/userPoolId/.well-known/openid-configuration
注: ユーザープールの AWS リージョンでリージョンを置き換えます。(例: us-east-1) userPoolId を、前に書き留めたユーザープールの ID に置き換えます。 - ブラウザに表示される JSON レスポンスをコピーします。以下の値を書き留めます。
authorization_endpoint
発行者
scopes_supported
token_endpoint
userinfo_endpoint
アカウント B で Application Load Balancer を設定する
- アカウント B で Amazon EC2 コンソールの [ロードバランサー] ページで、[Application Load Balancer] を選択します。
- [リスナー] タブの [ルール] で、HTTPS リスナーの [ルールの表示/編集] を選択します。
- メニューバーで、鉛筆アイコン (ルールを編集) を選択します。
- HTTPS リスナーでデフォルトルールの横にある鉛筆アイコン (ルールを編集) を選択します。
- [THEN] で、[アクションを追加] を選択して次の操作を行います。
[認証] を選択します。
[認証] で、[OIDC] を選択します。
[発行者] に、ユーザープールの OIDC 構成からの発行者の値を入力します。
[認証エンドポイント] に、authorization_endpoint 値を入力します。
[トークンエンドポイント] に、token_endpoint 値を入力します。
[ユーザー情報エンドポイント] に、userinfo_endpoint 値を入力します。
[クライアント ID] に、前の手順で Amazon Cognito コンソールからコピーしたアプリクライアント ID を入力します。
[クライアントシークレット] に、前の手順でコピーしたアプリクライアントシークレットを入力します。
[詳細設定] を展開します。
[スコープ] に、ユーザープールのアプリクライアント用に構成したスコープをスペースで区切って入力します。スコープは、ユーザープールの OIDC 設定で確認できます。たとえば、構成の scopes_supported 値が ["openid"、"email"、"phone"、"profile"] の場合、「openid email phone profile」と入力します。
チェックマークアイコンを選択します。 - [THEN] で、[アクションを追加] を選択して次の操作を行います。
注意: [アクションを追加] を選択できない場合は、ゴミ箱アイコンを使用して既存のルーティングアクション (Redirect to など) を削除してから、もう一度お試しください。
[転送先] を選択します。
[転送先] で、1 つ以上のターゲットグループを選択します。
(オプション) [グループレベルの維持] を設定します。
チェックマークアイコンを選択します。 - [更新] をクリックします。HTTPS リスナーのデフォルトルールが更新されます。
詳細については、「ルールの編集」をご参照ください。
セットアップをテストする
ブラウザで、次のいずれかの URL を入力します。
- https://loadBalancerDNSName/
- https://CNAME/
注意: loadBalancerDNSName を、Amazon EC2 コンソールから先ほどコピーした DNS 名に置き換えます。または、CNAME をカスタムドメインに置き換えます。
ユーザープールの Amazon Cognito でホストされるウェブ UI にリダイレクトされます。ユーザーがこちらにサインインし、ユーザープールによって認証されると、ターゲットにリダイレクトされます。