从 Amazon Cognito 用户池导出日志 - Amazon Cognito

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

从 Amazon Cognito 用户池导出日志

您可以将用户池配置为将某些其他活动的详细日志发送给其他人(例如 CloudWatch 日志组)。 AWS 服务这些日志比中的日志更精细 AWS CloudTrail,可用于对用户池进行故障排除和使用高级安全功能分析用户登录活动。当您想要流式传输日志SMS和电子邮件通知错误时,您的用户池会向 CloudWatch 日志组发送ERROR级别日志。当您想要流式传输用户登录活动的日志时,您的用户池会将INFO级别日志发送到日志组、Amazon Data Firehose 流或 Amazon S3 存储桶。您可以在用户池中合并这两个选项。

关于日志导出的注意事项

成本影响

Amazon Data Firehose、Amazon S3 和 CloudWatch 日志会产生数据摄取和检索费用。您的日志配置可能会影响您的 AWS 账单。有关更多信息,请参阅下列内容:

用户活动日志导出包含安全评估,并且是用户池高级安全功能的功能。只有在高级安全功能处于活动状态时,Amazon Cognito 才会生成这些日志。这些功能会增加用户池中每个月活跃用户 (MAU) 的费用。有关更多信息,请参阅 Amazon Cognito 定价

尽力交付

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

现有的外部日志不受影响

这些日志记录选项不会取代或更改用户池的以下日志功能。

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

  2. 使用 CloudWatch 指标大规模分析用户活动。

另外,您还可以在 Logs 中查找日在 CloudWatch 控制台中查看用户池导入结果志,也可以在 Lo CloudWatch gs 使用 Lambda 触发器自定义用户池工作流 中查找日志。Amazon Cognito 和 Lambda 将这些日志存储在与您为用户活动日志指定的日志组不同的日志组中。

仅适用于用户池

身份池不存在日志导出功能。

需要用户权限和服务相关角色

设置日志导出的 AWS 委托人必须具有修改目标资源的权限,如以下主题所述。Amazon Cognito 代表您创建一个服务相关角色并担任向目标资源传输日志的角色。

有关从 Amazon Cognito 发送日志的授权模式的更多信息,请参阅《亚马逊日志用户指南 AWS 服务》中的启用 CloudWatch 日志记录。

日志级别仅限于日志类型

消息传递日志属于错误级别和userNotification错误级别。ERROR高级安全用户活动日志属于错误userAuthEvents级别和INFO错误级别。您可以合并两个成员,一个用于 CloudWatch 日志LogConfigurations,一个用于userNotification存储 Firehose、Amazon S3 或 CloudWatch 日志。userAuthEvents

您无法将用户活动日志发送到多个目的地。除了 “日志” 之外 CloudWatch ,您无法将用户通知日志发送到任何目的地。

不同的配置选项

您只能使用 Amazon Cognito 用户API池或配置用户通知日志。 AWS SDK您可以使用API或在 Amazon Cognito 控制台中配置高级安全用户活动日志。要同时设置两者,请使用中的示例请求API中所示的SetLogDeliveryConfiguration

基于资源的大型策略需要其他配置

要将日志发送到资源策略大小超过 5120 个字符的日志组,请使用以 /aws/vendedlogs 开头的路径配置日志组。有关更多信息,请参阅启用某些 AWS 服务的日志记录

导出电子邮件和SMS消息传送错误

对于电子邮件和SMS消息传送错误,您可以从用户池中传送错误级别的用户通知日志。激活此功能后,您可以选择希望 Amazon Cognito 将日志发送到哪个日志组。当您想了解您的用户池通过 Amazon 和 Amazon SNS 发送的电子邮件和SMS消息的状态时,用户通知记录非常有用SES。与用户活动导出不同,此日志导出选项不需要高级安全功能。

您可以在请求中使用 Amazon Cognito 用户池配置详细API的SetLogDeliveryConfigurationAPI通知日志。您可以在GetLogDeliveryConfigurationAPI请求中查看用户池的日志配置。以下是请求正文示例。

{ "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 证书来授权这些请求。

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

导出高级安全用户活动日志

具有高级安全功能的用户池记录用户活动事件:用户登录、注销以及用户池中其他身份验证操作的详细信息和安全评估。您可能需要在自己的日志管理系统中查看用户活动日志,或者创建档案。您可以将这些数据导出到亚马逊 CloudWatch 日志组、亚马逊数据 Firehose 流或亚马逊简单存储服务 (Amazon S3) 存储桶。从那里,您可以将这些数据摄取到其他系统中,这些系统以适合您的操作流程的方式分析、标准化或以其他方式处理数据。要导出此类数据,您的用户池中必须启用高级安全功能

利用这些用户活动日志中的信息,您可以查看用户登录和账户管理活动的概况。默认情况下,Amazon Cognito 会将这些事件捕获到基于您的用户池的存储中。以下示例是针对登录并被评估为没有风险因素的用户的事件示例。您可以通过AdminListUserAuthEventsAPI操作检索此信息。下面是一个示例输出:

{ "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 控制台中或通过操作激活用户活动的日志导出。SetLogDeliveryConfigurationAPI

AWS Management Console
  1. 如果您还没有要使用的存储桶,请创建 S3 存储桶Firehose 流CloudWatch日志组。

  2. 登录 Amazon Cognito 控制台

  3. 选择用户池

  4. 从列表中选择一个现有用户池,或创建一个用户池

  5. 选择 “高级安全” 选项卡。找到 “导出用户活动日志”,然后选择 “编辑”

  6. 在 “日志状态” 下,选中 “激活用户活动日志导出” 旁边的复选框。

  7. 日志目标下,选择要处理日志 AWS 服务 的:CloudWatch 日志组Amazon Data Firehose 流S3 存储桶。

  8. 您的选择将使用相应的资源类型填充资源选择器。从列表中选择日志组、流或存储桶。您也可以选择 “创建” 按钮,导航到 AWS Management Console 所选服务的,然后创建新资源。

  9. 选择保存更改

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
{ "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
{ "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
{ "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": "" }, "logSourceId": { "userPoolId": "us-west-2_EXAMPLE" } }