Application Load Balancer を Amazon Cognito ユーザープールと統合してユーザー認証を行いたいと思っています。
簡単な説明
Application Load Balancer と Amazon Cognito ユーザープールを使用してユーザー認証を設定するには、次の手順を実行します。
- Application Load Balancer を作成します。
- Application Load Balancer の DNS 名を取得します。
- Amazon Cognito ユーザープールを作成して設定します。
- Application Load Balancer を設定します。
- セットアップをテストします。
解決策
Application Load Balancer を作成する
注: Application Load Balancer を設定済みの場合は、「Application Load Balancer の DNS 名を取得する」セクションに進んでください。
次の手順を実行します。
- Application Load Balancer を作成します。
- Application Load Balancer 用の HTTPS リスナーを作成します。
注: HTTPS リスナーのみが、authenticate-cognito および authenticate-oidc ルールアクションタイプをサポートします。
Application Load Balancer の DNS 名を取得する
次の手順を実行します。
- Amazon Elastic Compute Cloud (Amazon EC2) コンソールを開きます。
- ナビゲーションペインの [ロードバランシング] で、[ロードバランサー] を選択します。
- 使用する Application Load Balancer を選択します。
- 後のステップで使用するために、[詳細] タブでロードバランサーの DNS 名を書き留めてください。
Amazon Cognito ユーザープールを作成、設定する
次の手順を実行します。
- Amazon Cognito コンソールを開きます。
- ナビゲーションペインで [ユーザープールの作成] を選択します。
注: ユーザープールの作成時に、本番環境に必要な設定を構成してください。一部のユーザープール設定は、ユーザープールを作成した後は変更できません。詳細については、「Amazon Cognito ユーザープールの作成後に属性を変更する方法を教えてください」を参照してください。
- ユーザープール用のアプリクライアントを設定します。
アプリクライアントの設定時に、[クライアントシークレットを生成] ラジオボタンを選択します。詳細については、「Amazon Cognito を使用するための準備」を参照してください。
- ナビゲーションペインで [ユーザープール] を選択し、使用するユーザープールを選択します。後のステップで使用するために、ユーザープール ID を書き留めてください。
- ユーザープールの [アプリ統合] タブを選択し、ユーザープールのドメインを追加します。
- ユーザープールの [アプリ統合] タブ内で、[アプリクライアントと分析] セクションでアプリクライアントを選択します。
- 後のステップで使用するために、[アプリクライアント] ページの [アプリクライアント情報] でクライアント ID を書き留めてください。
- [ホストされた UI] セクションで [編集] を選択します。
- [コールバック URL を追加] を選択し、https://load-balancer-dns-name/oauth2/idpresponse と入力します (使用する DNS 名に置き換えてください)。CNAME レコードを使用してカスタムドメインをApplication Load Balancer にマッピングした場合は、https://CNAME/oauth2/idpresponse と入力します (使用するカスタムドメイン名に置き換えてください)。
注: DNS 名には、大文字を含めることはできません。
- [サインアウト URL の追加] を選択し、ユーザーがサインアウトした後にリダイレクトする URL を入力します。任意の有効な URL (例: https://example.com/) を入力すると、リダイレクトをテストできます。
- [ID プロバイダー] で [Cognito ユーザープール] を選択します。
- [OAuth 2.0 付与タイプ] で [認証コード付与] を選択します。ユースケースに応じて、追加の OAuth 付与タイプを選択してください。
- [OpenID Connect のスコープ] で [OpenID] を選択します。OpenID のスコープが ID トークンを返します。ユースケースに応じて、追加の OpenID Connect (OIDC) スコープを選択してください。
- [変更を保存] を選択します。
詳細については、「ユーザープールとアプリクライアント構成を更新する」および「サードパーティ ID プロバイダー経由でユーザープールにサインインする」を参照してください。
Application Load Balancer を設定する
次の手順を実行します。
- Amazon EC2 コンソールを開きます。
- ナビゲーションペインの [ロードバランシング] で、[ロードバランサー] を選択します。
- 使用する Application Load Balancer を選択します。
- [リスナーとルール] タブで HTTPS プロトコルを選択します。
- [ルールの管理] を選択し、[ルールを編集] を選択します。
- [リスナールール] セクションで更新するデフォルトルールを選択します。
- [アクション] を選択し、[ルールを編集] を選択します。
- HTTPS リスナーのデフォルトルールで次の設定を行います。
[認証] で [OpenID または Amazon Cognito を使用する] を選択します。
[ID プロバイダー] で、[Amazon Cognito] を選択します。
[ユーザープール] でユーザープール ID を選択します。
[アプリクライアント] でクライアント ID を選択します。
[認証の詳細設定] を展開します。
セッションクッキーに名前を付けます。
セッションタイムアウトを設定します。デフォルト値は 7 日です。
[スコープ] には、ユーザープールアプリクライアントに設定したスコープをスペースで区切って入力します。スコープは、ユーザープールの OIDC 設定に表示されます。たとえば、scopes_supported 値が ["openid","email","phone","profile"] の場合は、openid email phone profile と入力します。
[認証されていないリクエストに対するアクション] はデフォルト値から変更しないでください。
(オプション) [追加のリクエストパラメータ - オプション] を展開し、Cognito などの ID プロバイダーの認証時に使用するパラメータを追加します。たとえば、Cognito ユーザープール自体は、ID プロバイダーに Google を使用している場合は、パラメータ {Key: identity_provider, Value: Google} を追加します。リクエストパラメータの詳細については、「リクエストパラメータ」を参照してください。
[ルーティングアクション] で [ターゲットグループに転送] を選択し、ターゲットグループを選択します。
(オプション) ユースケースで必要な場合は、[ターゲットグループのスティッキネス] で [ターゲットグループのスティッキネスを有効にする] を選択します。
- 次のセキュアリスナー設定を構成します。
[セキュリティポリシー] で、ユースケースに適したセキュリティポリシーを選択します。
[デフォルトの SSL/TLS サーバー証明書] で証明書のソースを選択します。
- [変更を保存] を選択します。
設定をテストする
ウェブブラウザで、次の URL のいずれかを入力します。
- https://load-balancer-dns-name/
- https://CNAME/
注: 実際のものでそれぞれ、load-balancer-dns-name を DNS 名に、CNAME をカスタムドメインに置き換えてください。
URL を入力すると、ユーザープールの Amazon Cognito がホストするウェブ UI にリダイレクトされます。ユーザーがサインインし、ユーザープールがユーザーを認証すると、ユーザーはターゲットにリダイレクトされます。
関連情報
Application Load Balancer の開始
Application Load Balancer の組み込み認証でログインを簡素化する
Application Load Balancer のリスナールール
OIDC ユーザープール IdP 認証フロー