애플리케이션의 고급 보안 데이터 수집 - Amazon Cognito

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

애플리케이션의 고급 보안 데이터 수집

Amazon Cognito 적응형 인증은 사용자의 로그인 시도에 대한 컨텍스트 세부 정보를 바탕으로 계정 도용 시도에 대한 위험 수준을 평가합니다. Amazon Cognito 고급 보안이 위험을 보다 정확하게 평가할 수 있도록 애플리케이션은 API 요청에 컨텍스트 데이터를 추가해야 합니다. 컨텍스트 데이터는 IP 주소, 브라우저 에이전트, 디바이스 정보, 요청 헤더와 같은 정보로, 사용자가 사용자 풀에 어떻게 연결했는지에 대한 컨텍스트 정보를 제공합니다.

Amazon Cognito에 이 컨텍스트를 제출하는 애플리케이션의 주요 책임은 사용자 풀에 대한 인증 요청의 파라미터입니다EncodedData. 이 데이터를 요청에 추가하려면 이 정보를 자동으로 생성하는 SDK로 Amazon Cognito를 구현하거나 이 데이터를 수집하는 JavaScript iOS 또는 Android용 모듈을 구현하면 됩니다. Amazon Cognito에 직접 요청하는 클라이언트 전용 애플리케이션은 SDK를 구현해야 합니다. AWS Amplify 중간 서버 또는 API 구성 요소가 있는 클라이언트-서버 애플리케이션은 별도의 SDK 모듈을 구현해야 합니다.

다음 시나리오에서는 인증 프런트 엔드가 추가 구성 없이 사용자 컨텍스트 데이터 수집을 관리합니다.

  • 호스팅된 UI는 컨텍스트 데이터를 자동으로 수집하여 고급 보안 기능에 제출합니다.

  • 모든 AWS Amplify 라이브러리에는 인증 방법에 컨텍스트 데이터 수집이 내장되어 있습니다.

Amplify를 사용하여 클라이언트 전용 애플리케이션에서 사용자 컨텍스트 데이터 제출

Amplify 애플리케이션의 고급 보안 기능을 위한 데이터 수집 개요

Amplify SDK는 Amazon Cognito로 직접 인증하는 모바일 클라이언트를 지원합니다. 이러한 종류의 클라이언트는 Amazon Cognito 퍼블릭 API 작업에 직접 API 요청을 보냅니다. Amplify 클라이언트는 기본적으로 고급 보안 기능을 위한 컨텍스트 데이터를 자동으로 수집합니다.

Amplify JavaScript 애플리케이션은 예외입니다. 이를 위해서는 사용자 컨텍스트 데이터를 수집하는 JavaScript 모듈을 추가해야 합니다.

일반적으로 이 구성의 애플리케이션은 및 와 같은 InitiateAuth인증되지 않은 API 작업을 사용합니다. RespondToAuthChallenge UserContextData객체를 사용하면 이러한 작업에 대한 위험을 보다 정확하게 평가할 수 있습니다. Amplify SDK는 장치 및 세션 정보를 의 EncodedData 파라미터에 추가합니다. UserContextData

클라이언트-서버 애플리케이션에서 컨텍스트 데이터 수집

일부 애플리케이션에는 사용자 인증 데이터를 수집하는 프런트엔드 티어와 Amazon Cognito에 인증 요청을 제출하는 애플리케이션 백엔드 티어가 있습니다. 이는 마이크로서비스가 지원하는 웹 서버와 애플리케이션의 일반적인 아키텍처입니다. 이러한 애플리케이션에서는 퍼블릭 컨텍스트 데이터 수집 라이브러리를 가져와야 합니다.

고급 보안 기능을 갖춘 서버 측 인증에 대한 개요는 컨텍스트 데이터를 참조하십시오. JavaScript

일반적으로 이 구성의 애플리케이션 서버는 및 와 같은 인증된 API 작업을 사용합니다. AdminInitiateAuthAdminRespondToAuthChallengeContextData객체는 Amazon Cognito가 이러한 작업에 대한 위험을 더 정확하게 평가하는 데 도움이 됩니다. ContextData콘텐츠는 프런트 엔드가 서버로 전달한 인코딩된 데이터와 서버에 대한 사용자의 HTTP 요청에서 얻은 추가 세부 정보입니다. HTTP 헤더 및 IP 주소와 같은 이러한 추가 컨텍스트 세부 정보는 애플리케이션 서버에 사용자 환경의 특성을 제공합니다.

애플리케이션 서버가 및 와 같은 인증되지 않은 API 작업을 사용하여 로그인할 수도 있습니다. InitiateAuthRespondToAuthChallengeUserContextData객체는 이러한 작업의 고급 보안 위험 분석을 알려줍니다. 사용 가능한 퍼블릭 컨텍스트 데이터 수집 라이브러리의 작업은 인증 요청의 EncodedData 매개변수에 보안 정보를 추가합니다. 또한 추가 컨텍스트 데이터를 허용하도록 사용자 풀을 구성하고 IpAddress 매개 변수에 사용자의 소스 IP를 추가합니다UserContextData.

클라이언트-서버 응용 프로그램에 컨텍스트 데이터를 추가하려면
  1. 프런트 엔드 애플리케이션에서 iOS, Android 또는 모듈을 사용하여 클라이언트로부터 인코딩된 컨텍스트 데이터를 수집합니다. JavaScript

  2. 인코딩된 데이터와 인증 요청의 세부 정보를 애플리케이션 서버에 전달합니다.

  3. 애플리케이션 서버에서 HTTP 요청에서 사용자의 IP 주소, 관련 HTTP 헤더, 요청된 서버 이름, 요청된 경로를 추출합니다. Amazon Cognito에 대한 API 요청의 ContextData파라미터에 이 값을 채웁니다.

  4. API 요청의 EncodedData 파라미터를 ContextData SDK 모듈에서 수집한 인코딩된 디바이스 데이터로 채웁니다. 이 컨텍스트 데이터를 인증 요청에 추가합니다.

클라이언트-서버 애플리케이션을 위한 컨텍스트 데이터 라이브러리

JavaScript

amazon-cognito-advanced-security-data.min.js모듈은 애플리케이션 서버에 전달할 수 EncodedData 있는 데이터를 수집합니다.

amazon-cognito-advanced-security-data.min.js모듈을 JavaScript 구성에 추가합니다. us-east-1,,, us-east-2 us-west-2 eu-west-1eu-west-2, 또는 목록에 <region> 있는 것으로 eu-central-1 바꾸십시오. AWS 리전

<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/스위프트

컨텍스트 데이터를 생성하기 위해 iOS 애플리케이션은 iOS용 모바일 SDK 모듈을 통합할 수 있습니다. 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 애플리케이션은 Android용 모바일 SDK aws-android-sdk-cognitoidentityprovider 모듈 -asf를 통합할 수 있습니다.

고급 보안을 위해 인코딩된 컨텍스트 데이터를 수집하려면 애플리케이션에 다음 스니펫을 추가하세요.

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