アプリケーションにおける脅威保護のためのデータ収集 - Amazon Cognito

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

アプリケーションにおける脅威保護のためのデータ収集

Amazon Cognito アダプティブ認証は、ユーザーのサインイン試行のコンテキスト詳細からアカウント乗っ取りを試みた場合のリスクレベルを評価します。アプリケーションは、Amazon Cognito 脅威保護がリスクをより正確に評価できるように、API リクエストにコンテキストデータを追加する必要があります。コンテキストデータは、ユーザーがユーザープールにどのように接続したかに関するコンテキスト情報を提供する、IP アドレス、ブラウザエージェント、デバイス情報、リクエストヘッダーなどの情報です。

このコンテキストを Amazon Cognito に送信するアプリケーションの主な責任は、ユーザープールへの認証リクエストの EncodedData パラメータです。このデータをリクエストに追加するには、この情報を自動的に生成する SDK を使用して Amazon Cognito を実装することも、このデータを収集する JavaScript、iOS、または Android 用のモジュールを実装することもできます。Amazon Cognito に直接リクエストを行うクライアント専用アプリケーションは、 AWS Amplify SDKsを実装する必要があります。中間サーバーまたは API コンポーネントを持つクライアントサーバーアプリケーションは、別の SDK モジュールを実装する必要があります。

次のシナリオでは、認証フロントエンドが、追加の設定なしでユーザーコンテキストのデータ収集を管理します。

  • マネージドログインは、コンテキストデータを自動的に収集し、脅威保護に送信します。

  • すべての AWS Amplify ライブラリには、認証方法に組み込まれたコンテキストデータ収集があります。

Amplify を使用したクライアント専用アプリケーションでのユーザーコンテキストデータの送信

Amplify アプリケーションでの脅威保護のためのデータ収集の概要。

Amplify SDK は、Amazon Cognito で直接認証するモバイルクライアントをサポートします。この種類のクライアントは、Amazon Cognito パブリック API オペレーションに直接 API リクエストを行います。Amplify クライアントは、デフォルトで脅威保護のためにコンテキストデータを自動的に収集します。

JavaScript を使用した Amplify アプリケーションは例外です。ユーザーコンテキストデータを収集する JavaScript モジュールを追加する必要があります。

通常、この設定のアプリケーションは、InitiateAuthRespondToAuthChallenge などの認証されていない API オペレーションを使用します。UserContextData オブジェクトは、これらのオペレーションのリスクをより正確に評価するのに役立ちます。Amplify SDK は、デバイスとセッション情報を UserContextDataEncodedData パラメータに追加します。

クライアントサーバーアプリケーションでのコンテキストデータの収集

一部のアプリケーションには、ユーザー認証データを収集するフロントエンド層と、Amazon Cognito に認証リクエストを送信するアプリケーションバックエンド層があります。これは、マイクロサービスベースのウェブサーバーとアプリケーションの一般的なアーキテクチャです。これらのアプリケーションでは、パブリックコンテキストデータ収集ライブラリをインポートする必要があります。

JavaScript の脅威保護コンテキストデータを使用したサーバー側の認証の概要。

通常、この設定のアプリケーションサーバーは、AdminInitiateAuthAdminRespondToAuthChallenge などの認証された API オペレーションを使用します。ContextData オブジェクトは、Amazon Cognito がこれらのオペレーションのリスクをより正確に評価するのに役立ちます。ContextData のコンテンツは、フロントエンドがサーバーに渡したエンコードされたデータと、ユーザーによる HTTP リクエストからサーバーへの追加の詳細です。HTTP ヘッダーや IP アドレスなど、これらの追加のコンテキストの詳細により、アプリケーションサーバーにユーザーの環境の特性が提供されます。

また、アプリケーションサーバーは、InitiateAuthRespondToAuthChallenge などの認証されていない API オペレーションでサインインする場合もあります。UserContextData オブジェクトは、これらのオペレーションで脅威保護リスク分析を通知します。利用可能なパブリックコンテキストデータ収集ライブラリ内のオペレーションは、認証リクエストの EncodedData パラメータにセキュリティ情報を追加します。さらに、追加のコンテキストデータを受け入れるようにユーザープールを設定し、ユーザーのソース IP を UserContextDataIpAddress パラメータに追加します。

クライアントサーバーアプリケーションにコンテキストデータを追加するには
  1. フロントエンドアプリケーションで、iOS、Android、または JavaScript モジュールを使用してクライアントからエンコードされたコンテキストデータを収集します。

  2. エンコードされたデータと認証リクエストの詳細をアプリケーションサーバーに渡します。

  3. アプリケーションサーバーで、HTTP リクエストから、ユーザーの IP アドレス、関連する HTTP ヘッダー、リクエストされたサーバー名、リクエストされたパスを抽出します。これらの値を Amazon Cognito への API リクエストの ContextData パラメータに入力します。

  4. SDK モジュールが収集したエンコードされたデバイスデータを使用して、API リクエストの ContextDataEncodedData パラメータを入力します。このコンテキストデータを認証リクエストに追加します。

クライアントサーバーアプリケーション用のコンテキストデータライブラリ

JavaScript

amazon-cognito-advanced-security-data.min.js モジュールは、アプリケーションサーバーに渡すことができる EncodedData を収集します。

amazon-cognito-advanced-security-data.min.js モジュールを JavaScript 設定に追加します。を、、us-east-1us-east-2、、us-west-2eu-west-1eu-west-2または AWS リージョン のリストから <region>に置き換えますeu-central-1

<script src="https://amazon-cognito-assets.<region>.amazoncognito.com/amazon-cognito-advanced-security-data.min.js"></script>

EncodedData パラメータで使用できる encodedContextData オブジェクトを生成するには、JavaScript アプリケーションソースに以下を追加します。

var encodedContextData = AmazonCognitoAdvancedSecurityData.getData(_username, _userpoolId, _userPoolClientId);

iOS/Swift

コンテキストデータを生成するには、iOS アプリケーションは、Mobile SDK for iOS モジュール AWSCognitoIdentityProviderASF を統合できます。

脅威保護のためにエンコードされたコンテキストデータを収集するには、次のスニペットをアプリケーションに追加します。

import AWSCognitoIdentityProviderASF let deviceId = getDeviceId() let encodedContextData = AWSCognitoIdentityProviderASF.userContextData( userPoolId, username: username, deviceId: deviceId, userPoolClientId: userPoolClientId) /** * Reuse DeviceId from keychain or generate one for the first time. */ func getDeviceId() -> String { let deviceIdKey = getKeyChainKey(namespace: userPoolId, key: "AWSCognitoAuthAsfDeviceId") if let existingDeviceId = self.keychain.string(forKey: deviceIdKey) { return existingDeviceId } let newDeviceId = UUID().uuidString self.keychain.setString(newDeviceId, forKey: deviceIdKey) return newDeviceId } /** * Get a namespaced keychain key given a namespace and key */ func getKeyChainKey(namespace: String, key: String) -> String { return "\(namespace).\(key)" }

Android

コンテキストデータを生成するには、Android アプリケーションは、Mobile SDK for Android モジュール aws-android-sdk-cognitoidentityprovider-asf を統合できます。

脅威保護のためにエンコードされたコンテキストデータを収集するには、次のスニペットをアプリケーションに追加します。

UserContextDataProvider provider = UserContextDataProvider.getInstance(); // context here is android application context. String encodedContextData = provider.getEncodedContextData(context, username, userPoolId, userPoolClientId);