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

所要時間3分
0

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-cognitoauthenticate-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. [アプリ統合] タブの [ドメイン] に移動します。ユーザープールに Amazon Cognito ドメイン名を追加します。これは、Cognito でホストされている UI に必要な固有のドメインプレフィックスです。
  4. [アプリ統合] タブで、[アプリクライアント] リストに移動します。
  5. 更新するアプリクライアントを選択します。[アプリクライアント] ページで、次の手順を実行します。
    [クライアントシークレットを表示] をオンにします。
    アプリクライアント IDアプリクライアントシークレットをコピーします。Application Load Balancer をユーザー認証用に設定するには、これらの値が必要です。
  6. [アプリクライアント] ページで、[ホストされている UI] セクションに移動し**、** [編集] をクリックします。
  7. [ホストされている UI の編集] ページで、次の手順を実行します。
    [ID プロバイダー] で、[Cognito ユーザープール] を選択します。
    [コールバック URL を追加] には、https://loadBalancerDNSName/oauth2/idpresponse と入力します。または、CNAME レコードを使用してカスタムドメインをロードバランサーにマッピングした場合は、https://CNAME/oauth2/idpresponse と入力します。
    注: loadBalancerDNSName を Amazon EC2 コンソールからコピーした DNS 名に置き換えます。CNAME レコードを使用している場合は、CNAME をカスタムドメインに置き換えてください。URL の値が小文字であることを確認してください。小文字でないと、エラーが表示されます。
    [サインアウト URL の追加] に、サインアウト後にユーザーをリダイレクトする URL を入力します。テストでは、**https://www.example.com/**などの有効な URL を入力します。
    [OAuth 2.0 の付与タイプ] では、[認証コード付与] を選択します。
    [OpenID Connect のスコープ] では、[OpenID] を選択します。openid スコープが ID トークンを返します。
    ユースケースの必要に応じて、その他の OAuth スコープを入力します。
  8. [変更を保存] を選択します。

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

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

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

  1. ブラウザで、URL「** https://cognito-idp.region.amazonaws.com/userPoolId/.well-known/openid-configuration** 」と入力します。 注: region は、ユーザープールの AWS リージョンで置き換えてください(us-east-1 など)。 userPoolId は、先にメモしておいたユーザープールの ID に置き換えてください。
  2. ブラウザに表示される JSON レスポンスをコピーします。以下のフィールドの値に注意してください。
    authorization_endpoint
    issuer
    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 メール電話プロファイルを入力します。
    次に、チェックマークアイコンを選択します。
  6. [THEN] で [アクションを追加] を選択して、次の手順を実行します。
    注: [アクションを追加] を選択できない場合は、現在のルーティングアクション ([リダイレクト先] など) を削除します。その後、もう一度お試しください。
    [転送先] を選択します。
    [転送先] で、1 つ以上のターゲットグループを選択します。
    (オプション) [グループレベルの維持設定] を設定します。
    次に、チェックマークアイコンを選択します。
  7. [更新] を選択します。HTTPS リスナーのデフォルトルールが更新されます。

詳細については、「ルールを編集する」を参照してください。

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

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

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

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

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

関連情報

Application Load Balancer の開始

Application Load Balancer の組み込み認証でログインを簡素化

Application Load Balancer を使用してユーザーを認証する

Application Load Balancer のリスナールール

OIDC ユーザープール IdP 認証フロー

AWS公式
AWS公式更新しました 8ヶ月前
コメントはありません

関連するコンテンツ