从 Amazon Cognito 用户池导出日志
您可以将您的用户池配置为向另一个 Amazon Web Services 服务(例如,CloudWatch 日志组)发送一些其他活动的详细日志。这些日志的精细度比 Amazon CloudTrail 中的日志要更高,对于排查用户池的问题以及使用威胁防护功能分析用户登录活动可能很有用。当您想要流式传输短信和电子邮件通知错误的日志时,您的用户池会向 CloudWatch 日志组发送 ERROR 级别日志。当您想要流式传输用户登录活动的日志时,您的用户池会将 INFO 级别日志发送到日志组、Amazon Data Firehose 流或 Amazon S3 存储桶。您可以将这两个选项合并到一个用户池中。
有关日志导出的需知信息
- 成本影响
-
Amazon Data Firehose、Amazon S3 和 CloudWatch Logs 会产生数据摄取和检索费用。您的日志配置可能会影响 Amazon 账单。有关更多信息,请参阅下列内容:
-
Amazon CloudWatch 定价中的已出售日志
。
用户活动日志导出包含安全评估,并且是用户池威胁防护的一项功能。Amazon Cognito 仅在威胁防护处于仅限审计或全功能模式,并且您的用户池使用的是增值版功能计划时,才会生成这些日志。
-
- 用户活动日志为
INFO级别 -
导出的用户活动日志仅包含
INFO错误级别的日志,用于为针对身份验证活动的统计和安全分析提供信息。WARNING和ERROR错误级别的消息(例如节流错误)不包含在导出的日志中。 - 尽力传输
-
从 Amazon Cognito 传输日志将尽力而为。您的用户池传输的日志量以及 CloudWatch Logs、Amazon S3 和 Firehose 的服务配额可能会影响日志的传输。
- 现有的外部日志不受影响
-
这些日志记录选项不会取代或更改用户池的以下日志功能。
-
CloudTrail 记录了常规用户活动,例如注册和登录。
-
使用 CloudWatch 指标大规模分析用户活动。
另外,您还可以在 CloudWatch Logs 中找到来自 在 CloudWatch 控制台中查看用户池导入结果 和 使用 Lambda 触发器自定义用户池工作流 的日志。Amazon Cognito 和 Lambda 将这些日志存储在与您为用户活动日志指定的日志组不同的日志组中。
-
- 仅适用于用户池
-
身份池没有日志导出功能。
- 需要用户权限和服务相关角色
-
设置日志导出的 Amazon 主体必须具有修改目标资源的权限,如以下主题所述。Amazon Cognito 代表您创建一个服务相关角色并代入角色,以便向目标资源传输日志。
有关从 Amazon Cognito 发送日志的授权模式的更多信息,请参阅《Amazon CloudWatch Logs 用户指南》中的启用从 Amazon Web Services 服务进行日志记录。
- 每种日志类型的日志级别是特定的
-
消息传递日志为
userNotification类型和ERROR错误级别。高级安全用户活动日志为userAuthEvents类型和INFO错误级别。您可以合并LogConfigurations的两个成员,一个成员为userNotification,用于 CloudWatch Logs,另一个成员为userAuthEvents,用于 Firehose、Amazon S3 或 CloudWatch Logs。不能将用户活动日志发送到多个目的地。不能将用户通知日志发送到除 CloudWatch Logs 之外的任何其他目的地。
- 不同的配置选项
-
您只能使用 Amazon Cognito 用户池 API 或 Amazon SDK 配置用户通知日志。您可以使用 API 或在 Amazon Cognito 控制台中配置高级安全用户活动日志。要同时设置两者,请使用 API,如 SetLogDeliveryConfiguration 中的示例请求所示。
- 基于大型资源的策略需要其他配置
-
要将日志发送到资源策略大小超过 5120 个字符的日志组,请使用以
/aws/vendedlogs开头的路径配置日志组。有关更多信息,请参阅从某些 Amazon 服务启用日志记录。 - 在 Amazon S3 中自动创建文件夹
-
当您将威胁防护日志导出配置到 Amazon S3 存储桶时,Amazon Cognito 可能会在您的存储桶中创建一个
AWSLogs文件夹。该文件夹并非在所有情况下都会创建,且即使未创建,配置操作仍可成功完成。
导出电子邮件和短信消息传输错误
对于电子邮件和短信消息传输错误,您可以从用户池中传输 Error 级别的用户通知日志。激活此功能后,您可以选择希望 Amazon Cognito 将日志发送到哪个日志组。当您想了解您的用户池通过 Amazon SNS 和 Amazon SES 传递的电子邮件和短信消息的状态时,用户通知日志记录非常有用。与用户活动导出不同,此日志导出选项不需要增值版功能计划。
您可以在 SetLogDeliveryConfiguration API 请求中使用 Amazon Cognito 用户池 API 配置详细的通知日志。您可以在 GetLogDeliveryConfiguration 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" }
您必须使用具有以下权限的 Amazon 凭证来对这些请求进行授权。
以下是用户池中的一个示例事件。此日志架构可能会发生变化。某些字段可能记录为空值。
{ "eventTimestamp": "1687297330677", "eventSource": "USER_NOTIFICATION", "logLevel": "ERROR", "message": { "details": "String" }, "logSourceId": { "userPoolId": "String" } }
导出威胁防护用户活动日志
使用增值版功能计划并启用了威胁防护的用户池会记录用户活动事件:包括用户登录、注销以及与您的用户池进行的其他身份验证操作的详细信息和安全评估。您可能想要在自己的日志管理系统中查看用户活动日志,或者创建归档。您可以将此数据导出至 Amazon CloudWatch Logs 日志组、Amazon Data Firehose 流或 Amazon Simple Storage Service(Amazon S3)存储桶。在这里,您可以将这些数据摄取到其他系统中,这些系统以适合您的操作流程的方式分析、标准化或以其他方式处理数据。要导出此类数据,您的用户池必须使用增值版功能计划,并且必须启用威胁防护。
利用这些用户活动日志中的信息,您可以查看用户登录和账户管理活动的概况。默认情况下,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 API 操作为用户活动激活日志导出。
配置日志传送的用户必须是用户池管理员并具有以下额外权限:
以下是用户池中的一个示例事件。此日志架构可能会发生变化。某些字段可能记录为空值。
{ "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" } }