Amazon Cognito ユーザープール経由の Amazon Cognito 認証を、Application Load Balancer で使用したいと考えているのですが、そのユーザープールは別の AWS アカウントに配置されています。
解決策
次の解決策において、アカウント B は Application Load Balancer を所有するアカウント、アカウント A はユーザープールを所有するアカウントを示します。
Application Load Balancer を作成する
Application Load Balancer を作成済みの場合は、次のセクションに進んでください。
作成済みでない場合は、HTTPS リスナーを含む Application Load Balancer を作成してください。
注: HTTPS リスナーのみが、ルールアクションタイプ authenticate-cognito および authenticate-oidc をサポートします。
アカウント B に属する Application Load Balancer の DNS 名を取得する
アカウント B で次の手順を実行します。
- Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開きます。
- ナビゲーションペインで [ロードバランサー] を選択します。
- 目的の Application Load Balancer を選択します。
- 後の手順で使用するために、[説明] タブに表示されるロードバランサーの DNS 名を書き留めます。
アカウント A でユーザープールを作成、構成する
もう一方のアカウントにユーザープールを作成済みの場合は、次のセクションに進んでください。
ユーザープールを作成済みでない場合は、アカウント A で次の手順を実行します。
- アプリクライアントで Amazon Cognito ユーザープールを作成する
注: アプリクライアントを作成する際、従来のウェブアプリ、シングルページアプリ、モバイルアプリ、M2M 認証という 4 通りのオプションから選択できます。従来のウェブアプリまたは M2M 認証を選択した場合、クライアントシークレットを含むアプリクライアントが生成されます。
- Amazon Cognito コンソールを開きます。
- 後の手順で使用するために、ユーザープールの [ユーザープールの概要] セクションに表示されるユーザープール ID を書き留めます。
- [ブランディング] タブで [ドメイン] を選択します。ユーザープールに Amazon Cognito ドメイン名を追加します。このドメイン名は、Cognito Hosted UI で必要となる一意のドメインプレフィックスです。
- [アプリケーション] で [アプリクライアント] を選択します。
- 更新するアプリクライアントを選択します。
- [アプリクライアント] ページで次の手順を実行します。
[クライアントシークレットを表示] をオンにします。
後の手順で使用するために、アプリクライアント ID およびアプリクライアントシークレットを書き留めます。
- [ホステッド UI] にコールバック URL https://load-balancer-dns-name/oauth2/idpresponse および https://custom-domain-name/oauth2/idpresponse を追加します。
- OAuth 2.0 の付与タイプには、[認証コードの付与] を選択します。
- OAuth 2.0 のスコープには、openid を選択します。
- [変更を保存] を選択します。
ユーザープールの OIDC 構成の詳細を取得する
Application Load Balancer でユーザープールを OpenID Connect (OIDC) ID プロバイダー (IdP) として設定するには、OIDC 構成エンドポイントの詳細を取得する必要があります。
構成の詳細を取得するには、次の手順を実行します。
- ブラウザに次の URL を入力します: https://cognito-idp.region.amazonaws.com/userPoolId/.well-known/openid-configuration
注: region をユーザープールが置かれたリージョン (例: us-east-1) に、userPoolId をユーザープール の ID に置き換えてください。
- ブラウザに表示される JSON 応答から、次のフィールド内の値を書き留めます。
authorization_endpoint
issuer
scopes_supported
token_endpoint
userinfo_endpoint
アカウント B で Application Load Balancer を構成する
アカウント B で次の手順を実行します。
- Amazon EC2 コンソールを開きます。
- 目的の Application Load Balancer を選択します。
- [リスナーとルール] タブで [HTTPS:443 のルール] を選択します。
- [ルールの管理] で [ルールを編集] を選択します。
- デフォルトルールを選択します。
- [アクション] で [ルールを編集] を選択します。
- [デフォルトアクション] で [ユーザーを認証] を選択します。
注: デフォルトでは、[OIDC ID プロバイダー] が選択されています。
- 書き留めた値を次のフィールドに入力します。
[発行元] に issuer の値を入力します。
[認証エンドポイント] に authorization_endpoint の値を入力します。
[トークンエンドポイント] に token_endpoint の値を入力します。
[ユーザー情報エンドポイント] に userinfo_endpoint の値を入力します。
[クライアント ID] にアプリクライアント ID を入力します。
[クライアントシークレット] にアプリのクライアントシークレットを入力します。
- [保存] を選択します。
設定をテストする
次の手順を実行します。
- ブラウザに Application Load Balancer の URL を入力します。
- Cognito ホステッド UI にリダイレクトされるかどうかを確認します。
- 有効なユーザー認証情報を使用してサインインします。
注: エラーを防ぐために、すべての URL で小文字を使用してください。
関連情報
Application Load Balancer の組み込み認証でログインを簡素化
Application Load Balancer を使用してユーザーを認証する
Application Load Balancer のリスナールール
OIDC ユーザープール IdP 認証フロー