적응형 인증 작업 - Amazon Cognito

적응형 인증 작업

조정 인증을 사용하면 의심스러운 로그인을 차단하거나 위험 수준이 높아졌을 때 두 번째 인증 요소를 추가하도록 사용자 풀을 구성할 수 있습니다. Amazon Cognito는 각 로그인 시도에 대해 손상된 소스로부터 로그인 요청이 나오게 될 가능성에 대해 위험 점수를 계산합니다. 이 위험 점수는 애플리케이션이 제공하는 디바이스 및 사용자 요인과 Amazon Cognito가 요청에서 파생된 기타 요인을 기반으로 합니다. Amazon Cognito의 위험 평가에 영향을 미치는 몇 가지 요인은 IP 주소 및 사용자 에이전트, 사용자 에이전트 및 다른 로그인 시도와의 지리적 거리입니다. 적응형 인증은 Amazon Cognito가 사용자 세션에서 위험을 감지하고 사용자가 아직 MFA 방법을 선택하지 않은 경우 사용자 풀의 사용자에 대해 다중 인증(MFA)을 켜거나 요구할 수 있습니다. 사용자에 대해 MFA를 활성화하면 적응형 인증이 구성된 방식과 관계없이 인증 중에 두 번째 요소를 제공하거나 설정하라는 인증 문제가 항상 수신됩니다. 사용자의 관점에서 보면 앱이 MFA 설정을 지원하며, 선택적으로 Amazon Cognito는 추가 요소를 구성할 때까지 사용자가 다시 로그인하지 못하도록 합니다.

Amazon Cognito는 로그인 시도, 위험 수준 및 실패한 챌린지에 대한 지표를 Amazon CloudWatch에 게시합니다. 자세한 내용은 위협 방지 지표 보기 단원을 참조하십시오.

사용자 풀에 조정 인증을 추가하는 방법은 사용자 풀 고급 보안 기능 섹션을 참조하세요.

조정 인증 개요

Amazon Cognito 콘솔의 고급 보안 탭에서 다양한 위험 수준에서 수행할 작업과 사용자에 대한 알림 메시지 사용자 지정을 포함하여 적응형 인증에 대한 설정을 선택할 수 있습니다. 모든 앱 클라이언트에 글로벌 고급 보안 구성을 할당할 수 있지만 개별 앱 클라이언트에는 클라이언트 수준 구성을 적용할 수 있습니다.

Amazon Cognito 조정 인증은 각 사용자 세션에 높음, 중간, 낮음 또는 위험 없음 위험 수준 중 하나를 할당합니다.

Enforcement method(적용 방법)를 Audit-only(감사 전용)에서 Full-function(전체 기능)으로 변경할 때는 옵션을 신중하게 고려하세요. 위험 수준에 적용하는 자동 응답은 Amazon Cognito가 동일한 특성을 가진 후속 사용자 세션에 할당하는 위험 수준에 영향을 줍니다. 예를 들어, Amazon Cognito가 처음에 고위험으로 평가한 사용자 세션에 조치를 취하지 않거나 Allow(허용)를 선택하면 Amazon Cognito는 유사한 세션을 위험이 낮은 것으로 간주합니다.

위험 수준별로 다음 옵션 중에서 선택할 수 있습니다.

옵션

작업

허용 사용자는 추가 팩터 없이 로그인할 수 있습니다.
선택 사항 MFA 두 번째 팩터가 구성된 사용자는 로그인을 위해 두 번째 팩터 문제를 완료해야 합니다. SMS 전화 번호 및 TOTP 소프트웨어 토큰이 사용 가능한 두 번째 팩터입니다. 두 번째 인증 요소를 구성하지 않은 사용자는 하나의 자격 증명 세트로만 로그인할 수 있습니다.
MFA 필요 두 번째 팩터가 구성된 사용자는 로그인을 위해 두 번째 팩터 문제를 완료해야 합니다. Amazon Cognito는 두 번째 팩터가 구성되지 않은 사용자의 로그인을 차단합니다.
차단 Amazon Cognito는 지정된 위험 수준의 모든 로그인 시도를 차단합니다.
참고

두 번째 인증 팩터인 SMS에 사용하기 위해 전화 번호를 인증할 필요가 없습니다.

API 요청에 사용자 디바이스 및 세션 데이터 추가

API를 사용하여 가입하고, 로그인하고, 암호를 재설정할 때 사용자의 세션 정보를 수집하여 Amazon Cognito 고급 보안으로 전달할 수 있습니다. 이 정보에는 사용자의 IP 주소와 고유 디바이스 식별자가 포함됩니다.

프록시 서비스나 애플리케이션 서버와 같이 사용자와 Amazon Cognito 간에 중간 네트워크 디바이스가 있을 수 있습니다. 적응형 인증이 서버나 프록시 대신 사용자 엔드포인트의 특성을 기반으로 위험을 계산하도록 사용자의 컨텍스트 데이터를 수집하여 Amazon Cognito에 전달할 수 있습니다. 클라이언트측 앱이 Amazon Cognito API 작업을 직접 호출하는 경우 적응형 인증은 소스 IP 주소를 자동으로 기록합니다. 그러나 디바이스 지문을 수집하지 않는 한 user-agent와 같은 다른 디바이스 정보는 기록하지 않습니다.

Amazon Cognito 컨텍스트 데이터 수집 라이브러리로 이 데이터를 생성하여 ContextDataUserContextData 파라미터와 함께 Amazon Cognito 고급 보안에 제출합니다. 컨텍스트 데이터 수집 라이브러리는 AWS SDK에 포함되어 있습니다. 자세한 내용은 Amazon Cognito와 웹 및 모바일 앱 통합을 참조하세요. 사용자 풀에서 고급 보안 기능을 활성화한 경우 ContextData를 제출할 수 있습니다. 자세한 내용은 고급 보안 기능 구성을 참조하세요.

애플리케이션 서버에서 다음 Amazon Cognito 인증 API 작업을 호출할 때 사용자 디바이스의 IP를 ContextData 파라미터에 전달합니다. 또한 서버 이름, 서버 경로 및 인코딩된 디바이스 지문 데이터를 전달합니다.

Amazon Cognito에서 인증하지 않은 API 작업을 호출하면 UserContextData를 Amazon Cognito 고급 보안 기능에 제출할 수 있습니다. 이 데이터에는 EncodedData 파라미터에 디바이스 지문이 포함되어 있습니다. 다음 조건을 충족하는 경우 UserContextDataIpAddress 파라미터를 제출할 수도 있습니다.

앱은 다음 Amazon Cognito에서 인증하지 않은 API 작업의 인코딩된 디바이스 지문 데이터와 사용자 디바이스 IP 주소로 UserContextData 파라미터를 채울 수 있습니다.

추가 사용자 컨텍스트 데이터 수락(AWS Management Console)

추가 사용자 컨텍스트 데이터 허용(Accept additional user context data) 기능을 활성화하면 사용자 풀에서 UserContextData 파라미터의 IP 주소를 수락합니다. 다음과 같은 경우에는 이 기능을 활성화할 필요가 없습니다.

  • 사용자가 AdminInitiateAuth와 같은 인증 API 작업으로만 로그인하고, 본인은 ContextData 파라미터를 사용합니다.

  • 인증되지 않은 API 작업에서 IP 주소가 아닌 디바이스 지문만 Amazon Cognito 고급 보안 기능으로 전송하기를 원합니다.

Amazon Cognito 콘솔에서 다음과 같이 앱 클라이언트를 업데이트하여 추가 사용자 컨텍스트 데이터에 대한 지원을 추가합니다.

  1. Amazon Cognito 콘솔에 로그인합니다.

  2. 탐색 창에서 사용자 풀 관리(Manage your User Pools)를 선택한 다음 편집할 사용자 풀을 선택합니다.

  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 주소인지 확인합니다.

ContextDataUserContextData 리소스

사용자 이벤트 기록 보기 및 내보내기

Amazon Cognito는 고급 보안 위협 방지를 활성화하면 사용자가 각 인증 이벤트에 대한 로그를 생성합니다. 기본적으로 Amazon Cognito 콘솔의 사용자 탭 또는 AdminListUserAuthEvents API 작업에서 사용자 로그를 볼 수 있습니다. 이러한 이벤트를 CloudWatch Logs, Amazon S3 또는 Amazon Data Firehose와 같은 외부 시스템으로 내보낼 수도 있습니다. 내보내기 기능을 사용하면 애플리케이션의 사용자 활동에 대한 보안 정보를 자체 보안 분석 시스템에 더 쉽게 액세스할 수 있습니다.

사용자 이벤트 기록 보기(AWS Management Console)

사용자의 로그인 기록을 보려면 Amazon Cognito 콘솔의 Users(사용자) 탭에서 사용자를 선택합니다. Amazon Cognito는 사용자 이벤트 기록을 2년 동안 보관합니다.

사용자 이벤트 기록

각 로그인 이벤트에는 이벤트 ID가 있습니다. 이벤트에는 위치, 디바이스 세부 정보 및 위험 탐지 결과와 같은 해당 컨텍스트 데이터도 있습니다.

이벤트 ID를 이벤트를 기록한 시점에 Amazon Cognito가 발행한 토큰과 연관시킬 수도 있습니다. ID 및 액세스 토큰은 페이로드에 이 이벤트 ID를 포함합니다. Amazon Cognito는 새로 고침 토큰 사용을 원래 이벤트 ID와 연관시킵니다. 원래 이벤트 ID를 Amazon Cognito 토큰을 발급한 로그인 이벤트의 이벤트 ID로 다시 추적할 수 있습니다. 시스템 내에서 특정 인증 이벤트에 대한 토큰 사용을 추적할 수 있습니다. 자세한 내용은 사용자 풀 JSON 웹 토큰(JWT) 이해 단원을 참조하십시오.

사용자 이벤트 기록 보기(API/CLI)

Amazon Cognito API 작업 AdminListUserAuthEvents 또는 admin-list-user-auth-events와 함께 AWS Command Line Interface(AWS CLI)를 사용하여 사용자 이벤트 기록을 쿼리할 수 있습니다.

AdminListUserAuthEvents request

AdminListUserAuthEvents에 대한 다음 요청 본문은 한 사용자에 대한 최신 활동 로그를 반환합니다.

{ "UserPoolId": "us-west-2_EXAMPLE", "Username": "myexampleuser", "MaxResults": 1 }
admin-list-user-auth-events request

admin-list-user-auth-events에 대한 다음 요청은 한 사용자에 대한 최신 활동 로그를 반환합니다.

aws cognito-idp admin-list-user-auth-events --max-results 1 --username myexampleuser --user-pool-id us-west-2_EXAMPLE
Response

Amazon Cognito는 두 요청에 동일한 JSON 응답 본문을 반환합니다. 다음은 위험 요소를 포함하지 않은 호스팅 UI 로그인 이벤트에 대한 예시 응답입니다.

{ "AuthEvents": [ { "EventId": "[event ID]", "EventType": "SignIn", "CreationDate": "[Timestamp]", "EventResponse": "Pass", "EventRisk": { "RiskDecision": "NoRisk", "CompromisedCredentialsDetected": false }, "ChallengeResponses": [ { "ChallengeName": "Password", "ChallengeResponse": "Success" } ], "EventContextData": { "IpAddress": "192.168.2.1", "DeviceName": "Chrome 125, Windows 10", "Timezone": "-07:00", "City": "Bellevue", "Country": "United States" } } ], "NextToken": "[event ID]#[Timestamp]" }

사용자 인증 이벤트 내보내기

고급 보안 위협 방지에서 외부 시스템으로 사용자 이벤트를 내보내도록 사용자 풀을 구성합니다. 지원되는 외부 시스템인 Amazon S3, CloudWatch Logs 및 Amazon Data Firehose는 전송 또는 검색하는 데이터에 대한 비용을 사용자의 AWS 청구에 추가할 수 있습니다. 자세한 내용은 고급 보안 사용자 활동 로그 내보내기 단원을 참조하십시오.

AWS Management Console
  1. Amazon Cognito 콘솔에 로그인합니다.

  2. [사용자 풀(User Pools)]을 선택합니다.

  3. 목록에서 기존 사용자 풀을 선택하거나 사용자 풀을 생성합니다.

  4. 고급 보안 탭을 선택합니다. 사용자 활동 로그 내보내기를 찾아 편집을 선택합니다.

  5. 로깅 상태에서 사용자 활동 로그 내보내기 활성화 옆의 확인란을 선택합니다.

  6. 로깅 대상에서 로그를 처리할 AWS 서비스(CloudWatch 로그 그룹, Amazon Data Firehose 스트림 또는 S3 버킷)를 선택합니다.

  7. 선택하면 리소스 선택기가 해당 리소스 유형으로 채워집니다. 목록에서 로그 그룹, 스트림 또는 버킷을 선택합니다. 생성 버튼을 선택하여 선택한 서비스의 AWS Management Console로 이동하고 새 리소스를 생성할 수도 있습니다.

  8. 변경 사항 저장(Save changes)을 선택합니다.

API

사용자 활동 로그의 대상 유형 하나를 선택합니다.

다음은 Firehose 스트림을 로그 대상으로 설정하는 SetLogDeliveryConfiguration 요청 본문의 예입니다.

{ "LogConfigurations": [ { "EventSource": "userAuthEvents", "FirehoseConfiguration": { "StreamArn": "arn:aws:firehose:us-west-2:123456789012:deliverystream/example-user-pool-activity-exported" }, "LogLevel": "INFO" } ], "UserPoolId": "us-west-2_EXAMPLE" }

다음은 Amazon S3 버킷을 로그 대상으로 설정하는 SetLogDeliveryConfiguration 요청 본문의 예입니다.

{ "LogConfigurations": [ { "EventSource": "userAuthEvents", "S3Configuration": { "BucketArn": "arn:aws:s3:::amzn-s3-demo-logging-bucket" }, "LogLevel": "INFO" } ], "UserPoolId": "us-west-2_EXAMPLE" }

다음은 CloudWatch 로그 그룹을 로그 대상으로 설정하는 SetLogDeliveryConfiguration 요청 본문의 예입니다.

{ "LogConfigurations": [ { "EventSource": "userAuthEvents", "CloudWatchLogsConfiguration": { "LogGroupArn": "arn:aws:logs:us-west-2:123456789012:log-group:DOC-EXAMPLE-LOG-GROUP" }, "LogLevel": "INFO" } ], "UserPoolId": "us-west-2_EXAMPLE" }

이벤트 피드백 제공

이벤트 피드백은 실시간으로 위험 평가에 영향을 미치고 시간이 지남에 따라 위험 평가 알고리즘을 개선합니다. 또한 Amazon Cognito 콘솔 및 API 작업을 통해 로그인 시도의 유효성에 대한 피드백을 제공할 수 있습니다.

참고

이벤트 피드백은 Amazon Cognito가 동일한 특성을 가진 후속 사용자 세션에 할당하는 위험 수준에 영향을 미칩니다.

Amazon Cognito 콘솔의 Users(사용자) 탭에서 사용자를 선택하고 Provide event feedback(이벤트 피드백 제공)을 선택합니다. 이벤트 세부 정보를 검토하고 Set as valid(유효한 것으로 설정) 또는 Set as invalid(잘못된 것으로 설정)를 선택할 수 있습니다.

콘솔의 사용자 및 그룹(Users and groups) 탭에 로그인 기록이 나열됩니다. 항목을 선택한 경우 이벤트를 유효하거나 유효하지 않음으로 표시할 수 있습니다. 사용자 풀 API 작업 AdminUpdateAuthEventFeedback 및 AWS CLI admin-update-auth-event-feedback 명령을 통해 피드백을 제공할 수도 있습니다.

Amazon Cognito 콘솔에서 Set as valid(유효한 것으로 설정)를 선택하거나 API에서 valid FeedbackValue 값을 제공하면 Amazon Cognito가 일정 수준의 위험을 평가한 사용자 세션을 신뢰한다고 Amazon Cognito에 알리는 것입니다. Amazon Cognito 콘솔에서 Set as invalid(잘못된 것으로 설정)를 선택하거나 API에서 invalid FeedbackValue 값을 제공하면 사용자 세션을 신뢰하지 않거나 Amazon Cognito가 충분히 높은 수준의 위험을 평가했다고 믿지 않는다고 Amazon Cognito에 알리는 것입니다.

알림 메시지 전송

고급 보안 보호를 통해 Amazon Cognito는 사용자에게 위험한 로그인 시도를 알릴 수 있습니다. 또한 Amazon Cognito는 사용자에게 로그인이 유효한지 여부를 나타내는 링크를 선택하라는 메시지를 표시할 수 있습니다. Amazon Cognito는 이 피드백을 사용하여 사용자 풀의 위험 탐지 정확도를 개선합니다.

Automatic risk response(자동 위험 대응) 섹션에서 낮음, 중간 또는 높은 위험 사례에 대해 Notify Users(사용자 알림)를 선택합니다.

사용자 알림

Amazon Cognito는 이메일 주소 확인 여부와 관계없이 사용자에게 이메일 알림을 보냅니다.

알림 이메일 메시지를 사용자 지정하고, 이러한 메시지의 일반 텍스트 버전과 HTML 버전을 모두 제공할 수 있습니다. 이메일 알림을 사용자 지정하려면 고급 보안 구성의 Adaptive authentication messages(적응형 인증 메시지)에서 Email templates(이메일 템플릿)를 엽니다. 이메일 템플릿에 대한 자세한 내용은 메시지 템플릿 섹션을 참조하세요.