アダプティブ認証の使用 - Amazon Cognito

アダプティブ認証の使用

アダプティブ認証では、リスクレベルの上昇に対応して、疑わしいサインインをブロックする、または 2 番目の要素認証を追加するようにユーザープールを設定できます。Amazon Cognito はサインインの試行ごとに、サインインリクエストが侵害されたソースからのものである可能性についてリスクスコアを生成します。このリスクスコアは、デバイス、ユーザーまたは IP アドレスが新規かどうかなど、多くの要因に基づきます。アダプティブ認証は、ユーザーレベルで MFA タイプを有効にしていないユーザーに対し、リスクレベルに基づいて MFA を追加します。MFA タイプがユーザーレベルで有効になっている場合、アダプティブ認証の設定方法に関係なく、これらのユーザーは認証中常に 2 番目の要素チャレンジを受け取ります。

Amazon Cognito は、サインイン試行、試行のリスクレベル、および失敗したチャレンジを Amazon CloudWatch にパブリッシュします。詳細については、「アドバンストセキュリティのメトリクスの表示」を参照してください。

アダプティブ認証をユーザープールに追加するには、「ユーザープールにアドバンストセキュリティを追加する」を参照してください。

アダプティブ認証の概要

アダプティブ認証の設定は、Amazon Cognito コンソールの [Advanced security] (アドバンストセキュリティ) ページから選択できます。これには、異なるリスクレベルで実行するアクションの設定や、ユーザーへの通知メッセージのカスタマイズなどが含まれます。

リスクレベルごとに、以下のオプションから選択できます。

オプション

アクション

許可 ユーザーは、追加要素なしでサインインできます。
オプションの MFA 第 2 要素を設定しているユーザーは、サインインするために第 2 要素のチャレンジを完了する必要があります。SMS の電話番号と TOTP ソフトウェアトークンが利用可能な第 2 要素です。2 番目の要素が設定されていないユーザーは、1 つの認証情報のみでサインインできます。
MFA が必要 第 2 要素を設定しているユーザーは、サインインするために第 2 要素のチャレンジを完了する必要があります。Amazon Cognito は、第 2 要素が設定されていないユーザーのサインインをブロックします。
ブロック Amazon Cognito は、指定されたリスクレベルですべてのサインイン試行をブロックします。
注記

SMS を2 番目の認証要素として使用するために電話番号を検証する必要はありません。

API リクエストへのユーザーデバイスおよびセッションデータの追加

API を使用してサインアップ、サインイン、パスワードのリセットを行う際に、ユーザーのセッションに関する情報を収集し、Amazon Cognito のアドバンストセキュリティに渡すことができます。この情報には、ユーザーの IP アドレスと一意のデバイス識別子が含まれます。

ユーザーと Amazon Cognito の間に、プロキシサービスやアプリケーションサーバーなど、中間ネットワークデバイスがある場合があります。ユーザーのコンテキストデータを収集して Amazon Cognito に渡すことで、アダプティブ認証がサーバーやプロキシではなく、ユーザーエンドポイントの特性に基づいてリスクを計算できます。クライアント側アプリが Amazon Cognito API オペレーションを直接呼び出す場合、アダプティブ認証は送信元 IP アドレスを自動的に記録します。ただし、デバイスのフィンガープリントも収集しない限り、user-agent などの他のデバイス情報は記録されません。

Amazon Cognito コンテキストデータ収集ライブラリを使用してこのデータを生成し、ContextData パラメータと UserContextData パラメータで Amazon Cognito アドバンストセキュリティに送信します。コンテキストデータ収集ライブラリは、AWS SDK に含まれます。詳細については、「Amazon Cognito のウェブアプリケーションとモバイルアプリケーションとの統合」を参照してください。ユーザープールでアドバンストセキュリティ機能をアクティブ化している場合、ContextData を送信できます。詳細については、「アドバンストセキュリティ機能を設定する」を参照してください。

アプリケーションサーバーから以下の Amazon Cognito 認証 API オペレーションを呼び出す場合、ContextData パラメータにユーザーのデバイスの IP を渡します。また、サーバー名、サーバーパス、およびエンコードされたデバイスフィンガープリントデータを渡します。

Amazon Cognito の認証されていない API オペレーションを呼び出すと、Amazon Cognito のアドバンスドセキュリティ機能に UserContextData を送信できます。このデータには、EncodedData パラメータのデバイスフィンガープリントが含まれます。また、次の条件を満たす場合、UserContextDataIpAddress パラメータを送信できます。

アプリは、以下の Amazon Cognito の認証されていない API オペレーションで、UserContextData パラメータにエンコードされたデバイスフィンガープリントデータとユーザーのデバイスの IP アドレスを入力できます。

追加のユーザーコンテキストデータの受け入れ (AWS コンソール)

ユーザープールは [Accept additional user context data] (追加のユーザーコンテキストデータを受け入れる) 機能をアクティブ化すると、UserContextData パラメータで IP アドレスを受け入れます。次の場合は、この機能をアクティブ化する必要はありません。

  • ユーザーは、AdminInitiateAuth のような認証された API オペレーションでのみサインインし、ContextData パラメータを使用します。

  • 認証されていない API オペレーションから IP アドレスではなく、デバイスのフィンガープリントのみを Amazon Cognito のアドバンストセキュリティ機能に送信します。

Amazon Cognito コンソールでアプリクライアントを次のように更新し、追加のユーザーコンテキストデータのサポートを追加します。

  1. Amazon Cognito コンソールにサインインします。

  2. ナビゲーションペインで [ユーザープールの管理] を選択してから、編集するユーザープールを選択します。

  3. [App integration] (アプリケーションの統合) タブを選択します。

  4. [App clients and analytics] (アプリクライアントと分析) で、アプリクライアントを選択または作成します。詳細については、「ユーザープールのアプリクライアントの設定」を参照してください。

  5. [App client information] (アプリのクライアント情報) コンテナから [Edit] (編集) を選択します。

  6. アプリクライアントの [Advanced authentication settings] (詳細な認証設定) で、[Accept additional user context data] (追加のユーザーコンテキストデータを受け入れる) を選択します。

  7. [Save changes] (変更の保存) をクリックします。

Amazon Cognito API でユーザーコンテキストデータを受け入れるようにアプリクライアントを設定するには、CreateUserPoolClient または UpdateUserPoolClient リクエストで EnablePropagateAdditionalUserContextDatatrue に設定します。ウェブまたはモバイルアプリからアドバンストセキュリティをアクティブ化する方法の詳細については、「アプリからユーザープールのアドバンストセキュリティを有効化する」を参照してください。アプリがサーバーから Amazon Cognito を呼び出すときに、クライアント側からユーザーコンテキストデータを収集します。以下は、JavaScript SDK メソッド getData 使用する例です。

var encodedData = AmazonCognitoAdvancedSecurityData.getData(username, userPoolId, clientId);

アダプティブ認証を使用するようにアプリを設計する場合は、最新の Amazon Cognito SDK をアプリに組み込むことをお勧めします。SDK の最新バージョンでは、デバイス ID、モデル、およびタイムゾーンなどのデバイスフィンガープリント情報を収集します。Amazon Cognito SDK の詳細については、「ユーザープール SDK のインストール」を参照してください。Amazon Cognito アドバンストセキュリティでは、アプリが正しい形式で送信したイベントにのみ保存され、リスクスコアが割り当てられます。Amazon Cognito がエラーレスポンスを返す場合は、リクエストに有効なシークレットハッシュが含まれていることと、IPaddress パラメータが、有効な IPv4 または IPv6 アドレスであることを確認します。

ユーザーイベント履歴の表示

注記

新しい Amazon Cognito コンソールでは、Users (ユーザー) タブよりイベント履歴が表示できます。

ユーザーのサインイン履歴を表示するには、Amazon Cognito コンソールの [Users and groups] (ユーザーとグループ) でユーザーを選択できます。Amazon Cognito は、ユーザーイベント履歴を 2 年間保持します。


            ユーザーイベント履歴

各サインインイベントにはイベント ID があります。イベントには、場所、デバイスの詳細、およびリスク検出結果など、対応するコンテキストデータもあります。Amazon Cognito API オペレーション AdminListUserAuthEvents または admin-list-user-auth-events を使用した AWS Command Line Interface (AWS CLI) でユーザーイベント履歴をクエリできます。

また、イベント ID を Amazon Cognito がイベントを記録した時点で発行したトークンと関連付けることができます。ID とアクセストークンには、ペイロードにこのイベント ID が含まれます。Amazon Cognito はまた、更新トークンの使用を元のイベント ID に関連付けます。元のイベント ID は、Amazon Cognito トークンの発行につながったサインインイベントのイベント ID まで追跡できます。システム内のトークンの使用は、特定の認証イベントまで追跡できます。詳細については、「ユーザープールでのトークンの使用」を参照してください。

イベントフィードバックを提供します

イベントフィードバックは、リアルタイムでリスクの評価に反映され、リスク評価アルゴリズムを経時的に向上させます。ユーザーは、Amazon Cognito コンソールおよび API を使用して、サインイン試行の妥当性に関するフィードバックを提供できます。

コンソールでは、[Users and groups] (ユーザーとグループ) タブにサインイン履歴が表示されます。エントリを選択すると、イベントを有効または無効としてマークできます。フィードバックは、ユーザープール API オペレーション AdminUpdateAuthEventFeedback、および AWS CLI コマンド admin-update-auth-event-feedback を通じて提供することもできます。

通知メッセージの送信

アドバンスドセキュリティ保護により、Amazon Cognito はユーザーにサインイン試行を通知できます。Amazon Cognito では、サインインが有効か無効かを示すリンクを選択するようユーザーに促すこともできます。Amazon Cognito はこのフィードバックを使用して、ユーザープールのリスク検出精度を向上させます。

アダプティブ認証で使用するには [How do you want to use adaptive authentication for sign-in attempts rated as low, medium and high risk?] (リスクが低、中、高と評価されたサインイン試行で、アダプティブ認証をどのように使用しますか?) セクションで、低、中、高リスクケースに [Notify Users] (ユーザーに通知) を選択します。


            ユーザーに通知する

通知 E メールメッセージをカスタマイズして、これらのメッセージのプレーンテキストと HTML の両バージョンを提供できます。[Adaptive authentication notification messages] (アダプティブ認証通知メッセージ) から [Customize] (カスタマイズ) をクリックして、E メール通知をカスタマイズします。E メールテンプレートの詳細については、「メッセージテンプレート」を参照してください。