別の AWS アカウントの Amazon Cognito ユーザープールを通じてユーザーを認証するように Application Load Balancer を設定する方法を教えてください。

最終更新日: 2020 年 5 月 27 日

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 名を取得する

  1. アカウント B で、Amazon Elastic Compute Cloud (Amazon EC2) コンソールの [ロードバランサー] ページを開きます。
  2. ご使用の [Application Load Balancer] を選択します。
  3. [説明] タブで、ロードバランサーの DNS 名をコピーします。これは、後でテスト用にロードバランサーのエンドポイント URL にアクセスするために必要です。

アカウント A でユーザープールを作成して設定する

  1. アカウント A で、Amazon Cognito ユーザープールアプリクライアントを作成します。アプリクライアントの場合は、[クライアントシークレットを生成] チェックボックスを必ずオンにしてください。詳細については、Amazon Cognito を使用するための準備をご参照ください。
    注意: ユーザープールの作成時に、本稼働用の設定を行います。一部のユーザープール設定は、ユーザープールの作成後は変更できません。たとえば、ユーザー登録に必要な標準属性を変更することはできません
  2. Amazon Cognito コンソールで、ユーザープールの [全般設定] ページで、[プール ID] をメモします。これは、後でユーザープールの OIDC 設定の詳細を取得するために必要になります。
  3. 左のナビゲーションペインの [全般設定] で、[アプリクライアント] を選択します。
  4. [アプリクライアント] ページで、次の操作を行います。
    [詳細表示] を選択します。
    アプリクライアント IDアプリクライアントシークレットをコピーします。これらは、後でユーザー認証用に Application Load Balancer を設定するために必要です。
  5. 左側のナビゲーションペインで、[アプリ統合] の下にある [アプリクライアントの設定] を選択します。
  6. [アプリクライアント設定] ページで、次の操作を行います。
    有効な 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 スコープを選択します。
  7. [変更を保存] を選択します。
  8. 左側のナビゲーションペインで、[アプリ統合] の下にある [ドメイン名] を選択します。
  9. ユーザープールのドメイン名を追加します

詳細については、ユーザープールのアプリクライアント設定およびユーザープールへの OIDC ID プロバイダーの追加をご参照ください。

ユーザープールの OIDC 設定の詳細を取得する

ユーザープールの OIDC 設定エンドポイントにアクセスします。Application Load Balancer でユーザープールを OIDC IdP として設定するには、設定の詳細が必要です。

  1. ブラウザで、次の URL を入力します。
    https://cognito-idp.region.amazonaws.com/userPoolId/.well-known/openid-configuration
    注: ユーザープールの AWS リージョンでリージョンを置き換えます。(例: us-east-1) userPoolId を、前に書き留めたユーザープールの ID に置き換えます。
  2. ブラウザに表示される JSON レスポンスをコピーします。以下の値を書き留めます。
    authorization_endpoint
    発行者
    scopes_supported
    token_endpoint
    userinfo_endpoint

アカウント B で Application Load Balancer を設定する

  1. アカウント B で Amazon EC2 コンソールの [ロードバランサー] ページで、[Application Load Balancer] を選択します。
  2. [リスナー] タブの [ルール] で、HTTPS リスナーの [ルールの表示/編集] を選択します。
  3. メニューバーで、鉛筆アイコン (ルールを編集) を選択します。
  4. HTTPS リスナーでデフォルトルールの横にある鉛筆アイコン (ルールを編集) を選択します。
  5. [THEN] で、[アクションを追加] を選択して次の操作を行います。
    [認証] を選択します。
    [認証] で、[OIDC] を選択します。
    [発行者] に、ユーザープールの OIDC 構成からの発行者の値を入力します。
    [認証エンドポイント] に、authorization_endpoint 値を入力します。
    [トークンエンドポイント] に、token_endpoint 値を入力します。
    [ユーザー情報エンドポイント] に、userinfo_endpoint 値を入力します。
    [クライアント ID] に、Amazon Cognito コンソールから以前コピーしたアプリクライアント ID を入力します。
    [クライアントシークレット] に、以前コピーしたアプリクライアントシークレットを入力します。
    [詳細設定] を展開します。
    [スコープ] に、ユーザープールのアプリクライアント用に構成したスコープをスペースで区切って入力します。スコープは、ユーザープールの OIDC 設定で確認できます。たとえば、構成の scopes_supported 値が ["openid"、"email"、"phone"、"profile"] の場合、「openid email phone profile」と入力します。
    チェックマークアイコンを選択します。
  6. [THEN] で、[アクションを追加] を選択して次の操作を行います。
    注意: [アクションを追加] を選択できない場合は、ゴミ箱アイコンを使用して既存のルーティングアクション (Redirect to など) を削除してから、もう一度お試しください。
    [転送先] を選択します。
    [転送先] で、1 つ以上のターゲットグループを選択します。
    (オプション) [グループレベルの維持] を設定します。
    チェックマークアイコンを選択します。
  7. [更新] をクリックします。HTTPS リスナーのデフォルトルールが更新されます。

詳細については、ルールの編集をご参照ください。

セットアップをテストする

ブラウザで、次のいずれかの URL を入力します。

  • https://loadBalancerDNSName/
  • https://CNAME/

注意: loadBalancerDNSName を、Amazon EC2 コンソールから先ほどコピーした DNS 名に置き換えます。または、CNAME をカスタムドメインに置き換えます。

ユーザープールの Amazon Cognito でホストされるウェブ UI にリダイレクトされます。ユーザーがこちらにサインインし、ユーザープールによって認証されると、ターゲットにリダイレクトされます。