

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

# Amazon Cognito 사용자 풀에서 로그 내보내기
<a name="exporting-quotas-and-usage"></a>

CloudWatch 로그 그룹과 AWS 서비스같은 일부 추가 활동에 대한 세부 로그를 다른에 보내도록 사용자 풀을 구성할 수 있습니다. 이러한 로그는의 로그보다 세분화되어 AWS CloudTrail있으며 사용자 풀 문제를 해결하고 [위협 방지](cognito-user-pool-settings-threat-protection.md)를 통해 사용자 로그인 활동을 분석하는 데 유용할 수 있습니다. SMS 및 이메일 알림 오류의 로그를 스트리밍하려는 경우 사용자 풀은 CloudWatch 로그 그룹에 `ERROR` 수준 로그를 보냅니다. 사용자 로그인 활동의 로그를 스트리밍하려는 경우 사용자 풀은 로그 그룹, Amazon Data Firehose 스트림 또는 Amazon S3 버킷에 `INFO` 수준 로그를 전송합니다. 사용자 풀에서 두 옵션을 결합할 수 있습니다.

**Topics**
+ [로그 내보내기에 대해 알아야 할 사항](#exporting-quotas-and-usage-things-to-know)
+ [이메일 및 SMS 메시지 전송 오류 내보내기](#exporting-quotas-and-usage-messages)
+ [위협 방지 사용자 활동 로그 내보내기](#exporting-quotas-and-usage-user-activity)

## 로그 내보내기에 대해 알아야 할 사항
<a name="exporting-quotas-and-usage-things-to-know"></a>

**비용 영향**  
Amazon Data Firehose, Amazon S3 및 CloudWatch Logs에는 데이터 수집 및 검색 비용이 발생합니다. 로깅 구성이 AWS 청구서에 영향을 미칠 수 있습니다. 자세한 내용은 다음을 참조하세요.  
+ *Amazon CloudWatch 요금*의 [벤딩된 로그](https://aws.amazon.com/cloudwatch/pricing/#Vended_Logs).
+ [Amazon Data Firehose 요금](https://aws.amazon.com/firehose/pricing/)
+ [Amazon S3 요금](https://aws.amazon.com/s3/pricing/)
사용자 활동 로그 내보내기에는 보안 평가가 포함되며 사용자 풀 [위협 방지](cognito-user-pool-settings-threat-protection.md)의 함수입니다. Amazon Cognito는 위협 방지가 **감사 전용** 또는 **전체 함수** 모드이고 사용자 풀이 Plus [기능 플랜](cognito-sign-in-feature-plans.md)에 있는 경우에만 이러한 로그를 생성합니다.

**사용자 활동 로그는 `INFO` 레벨입니다.**  
내보낸 사용자 활동 로그는 `INFO` 오류 레벨에만 있으며 인증 활동의 통계 및 보안 분석을 위한 정보를 제공합니다. 제한 오류와 같은 `WARNING` 및 `ERROR` 오류 레벨의 메시지는 내보낸 로그에 포함되지 않습니다.

**최선의 작업 제공**  
Amazon Cognito에서 로그를 전송하는 것은 최선의 작업을 기반으로 합니다. 사용자 풀이 제공하는 로그의 양과 CloudWatch Logs, Amazon S3 및 Firehose에 대한 서비스 할당량은 로그 제공에 영향을 미칠 수 있습니다.

**기존 외부 로그는 영향을 받지 않습니다.**  
이러한 로깅 옵션은 사용자 풀의 다음 로그 기능을 대체하거나 변경하지 않습니다.  

1. 가입 및 로그인과 같은 일상적인 사용자 활동의 CloudTrail 로그.

1. CloudWatch 지표를 사용한 대규모 사용자 활동 분석.
이와 별도로 CloudWatch 로그에서 [CloudWatch 콘솔에서 사용자 풀 가져오기 결과 보기](cognito-user-pools-using-import-tool.md#cognito-user-pools-using-import-tool-cloudwatch) 및 [Lambda 트리거를 사용하여 사용자 풀 워크플로 사용자 정의](cognito-user-pools-working-with-lambda-triggers.md)의 로그도 찾을 수 있습니다. Amazon Cognito와 Lambda는 사용자 로그에 지정한 로그 그룹과는 다른 로그 그룹에 이러한 로그를 저장합니다.

**사용자 풀에만 적용**  
ID 풀에는 로그 내보내기 기능이 없습니다.

**사용자 권한 및 서비스 연결 역할이 필요합니다.**  
로그 내보내기를 설정하는 AWS 보안 주체는 다음 주제에 설명된 대로 대상 리소스를 수정할 수 있는 권한이 있어야 합니다. Amazon Cognito는 사용자를 대신하여 [서비스 연결 역할](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)을 생성하고 대상 리소스에 로그를 전달하는 역할을 담당합니다.  
Amazon Cognito에서 로그를 보내기 위한 권한 부여 모델에 대한 자세한 내용은 *Amazon CloudWatch Logs 사용 설명서*의 [AWS 서비스에서 로깅 활성화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-vended-logs-permissions)를 참조하세요.

**로그 수준은 로그 유형에만 해당됩니다.**  
메시지 전송 로그는 `userNotification` 유형 및 `ERROR` 오류 수준의 로그입니다. 고급 보안 사용자 활동 로그는 `userAuthEvents` 유형 및 `INFO` 오류 수준입니다. `LogConfigurations`의 두 멤버, 즉 `userNotification`에서 CloudWatch Logs로, `userAuthEvents`에서 Firehose, Amazon S3 또는 CloudWatch Logs로 각각 다른 멤버를 결합할 수 있습니다.  
여러 대상으로 사용자 활동 로그를 보낼 수 없습니다. CloudWatch Logs 이외의 대상에는 사용자 알림 로그를 보낼 수 없습니다.

**다양한 구성 옵션**  
Amazon Cognito 사용자 풀 API 또는 AWS SDK를 통해서만 사용자 알림 로그를 구성할 수 있습니다. API를 사용하거나 Amazon Cognito 콘솔에서 고급 보안 사용자 활동 로그를 구성할 수 있습니다. 둘 다 설정하려면 [SetLogDeliveryConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetLogDeliveryConfiguration.html)의 예제 요청에 설명된 대로 API를 사용합니다.

**대규모 리소스 기반 정책에 필요한 추가 구성**  
리소스 정책 크기가 5,120자보다 큰 로그 그룹에 로그를 전송하려면 경로가 `/aws/vendedlogs`로 시작하는 로그 그룹을 구성합니다. 자세한 내용은 [특정 AWS 서비스에서 로깅 활성화](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html)를 참조하세요.

**Amazon S3에서 폴더 자동 생성**  
Amazon S3 버킷으로 위협 방지 로그 내보내기를 구성하면 Amazon Cognito가 버킷에 `AWSLogs` 폴더를 생성할 수 있습니다. 이 폴더는 모든 경우에 생성되지 않으며 구성은 생성하지 않고 성공할 수 있습니다.

## 이메일 및 SMS 메시지 전송 오류 내보내기
<a name="exporting-quotas-and-usage-messages"></a>

이메일 및 SMS 메시지 전송 오류의 경우 사용자 풀에서 **오류** 수준 사용자 알림 로그를 전달할 수 있습니다. 이 기능을 활성화하면 Amazon Cognito에서 로그를 전송할 로그 그룹을 선택할 수 있습니다. 사용자 알림 로깅은 사용자 풀이 Amazon SNS 및 Amazon SES를 통해 전송하는 이메일 및 SMS 메시지의 상태를 확인하려는 경우에 유용합니다. 이 로그 내보내기 옵션은 [사용자 활동 내보내기](#exporting-quotas-and-usage-user-activity.title)와 달리 Plus 기능 플랜이 필요하지 않습니다.

[SetLogDeliveryConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetLogDeliveryConfiguration.html) API 요청에서 Amazon Cognito 사용자 풀 API를 사용하여 세부 알림 로그를 구성할 수 있습니다. [GetLogDeliveryConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetLogDeliveryConfiguration.html) API 요청에서 사용자 풀의 로깅 구성을 볼 수 있습니다. 다음은 요청 본문의 예입니다.

```
{
   "LogConfigurations": [ 
      { 
         "CloudWatchLogsConfiguration": { 
            "LogGroupArn": "arn:aws:logs:us-west-2:123456789012:log-group:example-user-pool-exported"
         },
         "EventSource": "userNotification",
         "LogLevel": "ERROR"
      }
   ],
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

다음 권한이 있는 AWS 자격 증명으로 이러한 요청을 승인해야 합니다.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
            {
            "Sid": "ManageUserPoolLogs",
            "Action": [
                "cognito-idp:SetLogDeliveryConfiguration",
                "cognito-idp:GetLogDeliveryConfiguration"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "CognitoLog",
            "Action": [
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "CognitoLoggingCWL",
            "Action": [
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

다음은 사용자 풀의 이벤트 예시입니다. 이 로그 스키마는 변경될 수 있습니다. 일부 필드는 null 값으로 로깅될 수 있습니다.

```
{
    "eventTimestamp": "1687297330677",
    "eventSource": "USER_NOTIFICATION",
    "logLevel": "ERROR",
    "message": {
        "details": "String"
    },
    "logSourceId": {
        "userPoolId": "String"
    }
}
```

## 위협 방지 사용자 활동 로그 내보내기
<a name="exporting-quotas-and-usage-user-activity"></a>

Plus 기능 플랜과 위협 방지 기능을 갖춘 사용자 풀은 사용자 활동 이벤트(사용자 로그인, 로그아웃 및 사용자 풀의 기타 인증 작업에 대한 세부 정보와 보안 평가)를 기록합니다. 자체 로그 관리 시스템에서 사용자 활동 로그를 검토하거나 아카이브를 생성할 수 있습니다. 이 데이터를 Amazon CloudWatch Logs 로그 그룹, Amazon Data Firehose 스트림 또는 Amazon Simple Storage Service(Amazon S3) 버킷으로 내보낼 수 있습니다. 여기에서 이 데이터를 운영 프로세스에 맞는 방식으로 데이터를 분석, 정규화 또는 처리하는 다른 시스템에 수집할 수 있습니다. 이 유형의 데이터를 내보내려면 사용자 풀이 Plus 기능 플랜에 있어야 하며 사용자 풀에서 [위협 방지](cognito-user-pool-settings-threat-protection.md)가 활성화되어 있어야 합니다.

이러한 사용자 활동 로그의 정보를 사용하여 사용자 로그인 및 계정 관리 활동의 프로파일을 볼 수 있습니다. 기본적으로 Amazon Cognito는 사용자 풀을 기반으로 하는 스토리지에 이러한 이벤트를 캡처합니다. 다음 예제는 로그인하고 위험 요소가 없는 것으로 평가된 사용자를 위한 예제 이벤트입니다. `AdminListUserAuthEvents` API 작업을 사용하여 이 정보를 검색할 수 있습니다. 다음은 출력의 예제입니다.

```
{
    "AuthEvents": [
        {
            "EventId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
            "EventType": "SignIn",
            "CreationDate": "2024-06-27T10:49:59.139000-07:00",
            "EventResponse": "Pass",
            "EventRisk": {
                "RiskDecision": "NoRisk",
                "CompromisedCredentialsDetected": false
            },
            "ChallengeResponses": [
                {
                    "ChallengeName": "Password",
                    "ChallengeResponse": "Success"
                }
            ],
            "EventContextData": {
                "IpAddress": "192.0.2.1",
                "DeviceName": "Chrome 126, Windows 10",
                "Timezone": "-07:00",
                "City": "null",
                "Country": "United States"
            }
        }
    ],
    "NextToken": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222#2024-06-27T17:49:59.139Z"
}
```

Amazon Cognito 콘솔 또는 [SetLogDeliveryConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetLogDeliveryConfiguration.html) API 작업에서 사용자 활동에 대한 로그 내보내기를 활성화할 수 있습니다.

------
#### [ AWS Management Console ]

1. 사용하려는 버킷이 아직 없는 경우 [S3 버킷,](https://docs.aws.amazon.com/AmazonS3/latest/userguide/create-bucket-overview.html) [Firehose 스트림](https://docs.aws.amazon.com/firehose/latest/dev/basic-create.html) 또는 [CloudWatch 로그 그룹](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)을 생성합니다.

1. [Amazon Cognito 콘솔](https://console.aws.amazon.com/cognito/home)에 로그인합니다.

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

1. 목록에서 기존 사용자 풀을 선택하거나 [사용자 풀을 생성합니다](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

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

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

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

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

1. **변경 사항 저장**을 선택합니다.

------
#### [ 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 S3 ]

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ManageUserPoolLogs",
            "Action": [
                "cognito-idp:SetLogDeliveryConfiguration",
                "cognito-idp:GetLogDeliveryConfiguration"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "ManageLogsS3",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogDelivery",
                "s3:PutBucketPolicy",
                "s3:GetBucketPolicy"
            ],
            "Resource": "*"
        }
    ]
}
```

------

------
#### [ CloudWatch Logs ]

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ManageUserPoolLogs",
            "Action": [
                "cognito-idp:SetLogDeliveryConfiguration",
                "cognito-idp:GetLogDeliveryConfiguration"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "ManageLogsCWL",
            "Action": [
                "logs:CreateLogDelivery",
                "logs:GetLogDelivery",
                "logs:UpdateLogDelivery",
                "logs:DeleteLogDelivery",
                "logs:ListLogDeliveries",
                "logs:PutResourcePolicy",
                "logs:DescribeResourcePolicies",
                "logs:DescribeLogGroups"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        }
    ]
}
```

------

------
#### [ Amazon Data Firehose ]

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "ManageUserPoolLogs",
            "Action": [
                "cognito-idp:SetLogDeliveryConfiguration",
                "cognito-idp:GetLogDeliveryConfiguration"
            ],
            "Resource": [
                "*"
            ],
            "Effect": "Allow"
        },
        {
            "Sid": "ManageUserPoolLogsFirehose",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogDelivery",
                "iam:CreateServiceLinkedRole",
                "firehose:TagDeliveryStream"
            ],
            "Resource": "*"
        }
    ]
}
```

------

------

다음은 사용자 풀의 이벤트 예시입니다. 이 로그 스키마는 변경될 수 있습니다. 일부 필드는 null 값으로 로깅될 수 있습니다.

```
{
    "eventTimestamp": "1687297330677",
    "eventSource": "USER_ACTIVITY",
    "logLevel": "INFO",
    "message": {
        "version": "1",
        "eventId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
        "eventType": "SignUp",
        "userSub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
        "userName": "test-user",
        "userPoolId": "us-west-2_EXAMPLE",
        "clientId": "1example23456789",
        "creationDate": "Wed Jul 17 17:25:55 UTC 2024",
        "eventResponse": "InProgress",
        "riskLevel": "",
        "riskDecision": "PASS",
        "challenges": [],
        "deviceName": "Other, Other",
        "ipAddress": "192.0.2.1",
        "requestId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE33333",
        "idpName": "",
        "compromisedCredentialDetected": "false",
        "city": "Seattle",
        "country": "United States",
        "eventFeedbackValue": "",
        "eventFeedbackDate": "",
        "eventFeedbackProvider": "",
        "hasContextData": "true"
    },
    "logSourceId": {
        "userPoolId": "us-west-2_EXAMPLE"
    }
}
```