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

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

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

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

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

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

  • ホストされた UI はコンテキストデータを自動的に収集し、高度なセキュリティ機能に送信します。

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

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

Amplify アプリケーションの高度なセキュリティ機能のデータ収集の概要。

Amplify は、Amazon Cognito で直接認証するモバイルクライアントSDKsをサポートしています。この種のクライアントは、Amazon Cognito パブリックAPIオペレーションに直接APIリクエストを行います。Amplify クライアントは、デフォルトで高度なセキュリティ機能のコンテキストデータを自動的に収集します。

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

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

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

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

の高度なセキュリティ機能コンテキストデータを使用したサーバー側の認証の概要 JavaScript。

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

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

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

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

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

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

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

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-2または のリストから eu-west-1<region>に置き換え AWS リージョン ます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として統合できます。

高度なセキュリティのためにエンコードされたコンテキストデータを収集するには、アプリケーションに次のスニペットを追加します。

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