

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 从 Amazon Cognito 用户池导出日志
<a name="exporting-quotas-and-usage"></a>

您可以将用户池配置为将某些其他活动的详细日志发送给其他人（例如 CloudWatch 日志组）。 AWS 服务[这些日志的粒度比中的日志更精细 AWS CloudTrail，可用于对用户池进行故障排除和使用威胁防护分析用户登录活动。](cognito-user-pool-settings-threat-protection.md)当您想要流式传输短信和电子邮件通知错误的日志时，您的用户池会向 CloudWatch 日志组发送`ERROR`级别日志。当您想要流式传输用户登录活动的日志时，您的用户池会将 `INFO` 级别日志发送到日志组、Amazon Data Firehose 流或 Amazon S3 存储桶。您可以将这两个选项合并到一个用户池中。

**Topics**
+ [

## 有关日志导出的需知信息
](#exporting-quotas-and-usage-things-to-know)
+ [

## 导出电子邮件和短信消息传输错误
](#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 日志会产生数据摄取和检索费用。您的日志配置可能会影响您的 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 仅在威胁防护处于**仅限审计**或**全功能**模式，并且您的用户池使用的是增值版[功能计划](cognito-sign-in-feature-plans.md)时，才会生成这些日志。

**用户活动日志为 `INFO` 级别**  
导出的用户活动日志仅包含 `INFO` 错误级别的日志，用于为针对身份验证活动的统计和安全分析提供信息。`WARNING` 和 `ERROR` 错误级别的消息（例如节流错误）不包含在导出的日志中。

**尽力传输**  
从 Amazon Cognito 传输日志将尽力而为。您的用户池提供的日志量以及日 CloudWatch 志、Amazon S3 和 Firehose 的服务配额可能会影响日志的传输。

**现有的外部日志不受影响**  
这些日志记录选项不会取代或更改用户池的以下日志功能。  

1. CloudTrail 常规用户活动日志，例如注册和登录。

1. 使用 CloudWatch 指标大规模分析用户活动。
另外，您还可以在 Logs 中查找日[在 CloudWatch 控制台中查看用户池导入结果](cognito-user-pools-using-import-tool.md#cognito-user-pools-using-import-tool-cloudwatch)志，也可以在 Lo CloudWatch gs [使用 Lambda 触发器自定义用户池工作流](cognito-user-pools-working-with-lambda-triggers.md) 中查找日志。Amazon Cognito 和 Lambda 将这些日志存储在与您为用户活动日志指定的日志组不同的日志组中。

**仅适用于用户池**  
身份池没有日志导出功能。

**需要用户权限和服务相关角色**  
设置日志导出的 AWS 委托人必须具有修改目标资源的权限，如以下主题所述。Amazon Cognito 代表您创建一个[服务相关角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html)并代入角色，以便向目标资源传输日志。  
有关从 Amazon Cognito 发送日志的授权模式的更多信息，请参阅《*亚马逊[日志用户指南 AWS 服务》中的启用](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html#AWS-vended-logs-permissions) CloudWatch 日志*记录。

**每种日志类型的日志级别是特定的**  
消息传递日志为 `userNotification` 类型和 `ERROR` 错误级别。高级安全用户活动日志为 `userAuthEvents` 类型和 `INFO` 错误级别。您可以合并两个成员，一个用于 CloudWatch 日志`LogConfigurations`，一个用于`userNotification`存储 Firehose、Amazon S3 或 CloudWatch 日志。`userAuthEvents`  
不能将用户活动日志发送到多个目的地。除了 “日志” 之外 CloudWatch ，您无法将用户通知日志发送到任何目的地。

**不同的配置选项**  
您只能使用 Amazon Cognito 用户池 API 或 AWS SDK 配置用户通知日志。您可以使用 API 或在 Amazon Cognito 控制台中配置高级安全用户活动日志。要同时设置两者，请使用 API，如中的示例请求所示[SetLogDeliveryConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetLogDeliveryConfiguration.html)。

**基于大型资源的策略需要其他配置**  
要将日志发送到资源策略大小超过 5120 个字符的日志组，请使用以 `/aws/vendedlogs` 开头的路径配置日志组。有关更多信息，请参阅[启用某些 AWS 服务的日志记录](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AWS-logs-and-resource-policy.html)。

**在 Amazon S3 中自动创建文件夹**  
当您将威胁防护日志导出配置到 Amazon S3 存储桶时，Amazon Cognito 可能会在您的存储桶中创建一个 `AWSLogs` 文件夹。该文件夹并非在所有情况下都会创建，且即使未创建，配置操作仍可成功完成。

## 导出电子邮件和短信消息传输错误
<a name="exporting-quotas-and-usage-messages"></a>

对于电子邮件和短信消息传输错误，您可以从用户池中传输 **Error** 级别的用户通知日志。激活此功能后，您可以选择希望 Amazon Cognito 将日志发送到哪个日志组。当您想了解您的用户池通过 Amazon SNS 和 Amazon SES 传递的电子邮件和短信消息的状态时，用户通知日志记录非常有用。与[用户活动导出](#exporting-quotas-and-usage-user-activity.title)不同，此日志导出选项不需要增值版功能计划。

您可以在 API 请求中使用 Amazon Cognito 用户池 API 配置详细的[SetLogDeliveryConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetLogDeliveryConfiguration.html)通知日志。您可以在 [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"
        }
    ]
}
```

------

以下是用户池中的一个示例事件。此日志架构可能会发生变化。某些字段可能记录为空值。

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

## 导出威胁防护用户活动日志
<a name="exporting-quotas-and-usage-user-activity"></a>

使用增值版功能计划并启用了威胁防护的用户池会记录用户活动事件：包括用户登录、注销以及与您的用户池进行的其他身份验证操作的详细信息和安全评估。您可能想要在自己的日志管理系统中查看用户活动日志，或者创建归档。您可以将这些数据导出到亚马逊 CloudWatch 日志组、亚马逊数据 Firehose 流或亚马逊简单存储服务 (Amazon S3) 存储桶。在这里，您可以将这些数据摄取到其他系统中，这些系统以适合您的操作流程的方式分析、标准化或以其他方式处理数据。要导出此类数据，您的用户池必须使用增值版功能计划，并且必须启用[威胁防护](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 管理控制台 ]

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. 选择**用户池**。

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 管理控制台 所选服务的，然后创建新资源。

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": "*"
        }
    ]
}
```

------

------

以下是用户池中的一个示例事件。此日志架构可能会发生变化。某些字段可能记录为空值。

```
{
    "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"
    }
}
```