スキップしてコンテンツを表示

Application Load Balancer で設定を行い、別の AWS アカウントに配置した Amazon Cognito ユーザープール経由でユーザーを認証する方法を教えてください。

所要時間2分
0

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 で次の手順を実行します。

  1. Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開きます。
  2. ナビゲーションペインで [ロードバランサー] を選択します。
  3. 目的の Application Load Balancer を選択します。
  4. 後の手順で使用するために、[説明] タブに表示されるロードバランサーの DNS 名を書き留めます。

アカウント A でユーザープールを作成、構成する

もう一方のアカウントにユーザープールを作成済みの場合は、次のセクションに進んでください。

ユーザープールを作成済みでない場合は、アカウント A で次の手順を実行します。

  1. アプリクライアントAmazon Cognito ユーザープールを作成する
    注: アプリクライアントを作成する際、従来のウェブアプリ、シングルページアプリ、モバイルアプリ、M2M 認証という 4 通りのオプションから選択できます。従来のウェブアプリまたは M2M 認証を選択した場合、クライアントシークレットを含むアプリクライアントが生成されます。
  2. Amazon Cognito コンソールを開きます。
  3. 後の手順で使用するために、ユーザープールの [ユーザープールの概要] セクションに表示されるユーザープール ID を書き留めます。
  4. [ブランディング] タブで [ドメイン] を選択します。ユーザープールに Amazon Cognito ドメイン名を追加します。このドメイン名は、Cognito Hosted UI で必要となる一意のドメインプレフィックスです。
  5. [アプリケーション][アプリクライアント] を選択します。
  6. 更新するアプリクライアントを選択します。
  7. [アプリクライアント] ページで次の手順を実行します。
    [クライアントシークレットを表示] をオンにします。
    後の手順で使用するために、アプリクライアント ID およびアプリクライアントシークレットを書き留めます。
  8. [ホステッド UI] にコールバック URL https://load-balancer-dns-name/oauth2/idpresponse および https://custom-domain-name/oauth2/idpresponse を追加します。
  9. OAuth 2.0 の付与タイプには、[認証コードの付与] を選択します。
  10. OAuth 2.0 のスコープには、openid を選択します。
  11. [変更を保存] を選択します。

ユーザープールの OIDC 構成の詳細を取得する

Application Load Balancer でユーザープールを OpenID Connect (OIDC) ID プロバイダー (IdP) として設定するには、OIDC 構成エンドポイントの詳細を取得する必要があります。

構成の詳細を取得するには、次の手順を実行します。

  1. ブラウザに次の URL を入力します: https://cognito-idp.region.amazonaws.com/userPoolId/.well-known/openid-configuration
    注: region をユーザープールが置かれたリージョン (例: us-east-1) に、userPoolId をユーザープール の ID に置き換えてください。
  2. ブラウザに表示される JSON 応答から、次のフィールド内の値を書き留めます。
    authorization_endpoint
    issuer
    scopes_supported
    token_endpoint
    userinfo_endpoint

アカウント B で Application Load Balancer を構成する

アカウント B で次の手順を実行します。

  1. Amazon EC2 コンソールを開きます。
  2. 目的の Application Load Balancer を選択します。
  3. [リスナーとルール] タブで [HTTPS:443 のルール] を選択します。
  4. [ルールの管理][ルールを編集] を選択します。
  5. デフォルトルールを選択します。
  6. [アクション][ルールを編集] を選択します。
  7. [デフォルトアクション][ユーザーを認証] を選択します。
    注: デフォルトでは、[OIDC ID プロバイダー] が選択されています。
  8. 書き留めた値を次のフィールドに入力します。
    [発行元] に issuer の値を入力します。
    [認証エンドポイント] に authorization_endpoint の値を入力します。
    [トークンエンドポイント] に token_endpoint の値を入力します。
    [ユーザー情報エンドポイント] に userinfo_endpoint の値を入力します。
    [クライアント ID] にアプリクライアント ID を入力します。
    [クライアントシークレット] にアプリのクライアントシークレットを入力します。
  9. [保存] を選択します。

設定をテストする

次の手順を実行します。

  1. ブラウザに Application Load Balancer の URL を入力します。
  2. Cognito ホステッド UI にリダイレクトされるかどうかを確認します。
  3. 有効なユーザー認証情報を使用してサインインします。

注: エラーを防ぐために、すべての URL で小文字を使用してください。

関連情報

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

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

Application Load Balancer のリスナールール

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

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