Amazon CloudTrail 中的 Amazon Cognito 日志记录
Amazon Cognito 与 Amazon CloudTrail 集成,后者是一项服务,提供 Amazon Cognito 中由用户、角色或Amazon服务所采取操作的记录。CloudTrail 将对 Amazon Cognito 的 API 调用子集作为事件捕获,包括来自 Amazon Cognito 控制台的调用和对 Amazon Cognito API 操作的代码调用。如果您创建跟踪,则可以选择将 CloudTrail 事件传送到 Amazon S3 存储桶,包括 Amazon Cognito 的事件。如果您不配置跟踪,则仍可在 CloudTrail 控制台中的事件历史记录中查看最新事件。使用 CloudTrail 收集的信息,您可以确定向 Amazon Cognito 发出了什么请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间以及其他详细信息。
要了解有关 CloudTrail 的更多信息(包括如何对其进行配置和激活),请参阅《Amazon CloudTrail 用户指南》。
您还可以针对特定 CloudTrail 事件创建 Amazon CloudWatch 告警。例如,您可以设置 CloudWatch,以在身份池配置发生更改时触发警报。有关更多信息,请参阅针对 CloudTrail 事件创建 CloudWatch 告警:示例。
主题
Amazon Cognito 发送给 CloudTrail 的信息
当您创建自己的 Amazon Web Services 账户时,CloudTrail 开启。当 Amazon Cognito 中发生受支持的事件活动时,该活动将记录在 CloudTrail 事件中,并与其他 Amazon 服务事件一同保存在事件历史记录中。您可以在 Amazon 账户中查看、搜索和下载最新事件。有关更多信息,请参阅 使用 CloudTrail 事件历史记录查看事件 。
要持续记录Amazon账户中的事件(包括 Amazon Cognito 的事件),请创建跟踪记录。CloudTrail 跟踪可将日志文件传送至 Amazon S3 存储桶。默认情况下,在控制台中创建跟踪时,此跟踪应用于所有区域。此跟踪记录在 Amazon 分区中记录所有区域中的事件,并将日志文件传送至您指定的 Amazon S3 存储桶。此外,您可以配置其他 Amazon 服务,进一步分析在 CloudTrail 日志中收集的事件数据并采取行动。有关更多信息,请参阅:
每个事件或日志条目都包含有关生成请求的人员信息。身份信息可帮助您确定以下内容:
-
请求是使用根用户凭证还是 IAM 用户凭证发出的。
-
请求是使用角色还是联合用户的临时安全凭证发出的。
-
请求是否由其他 Amazon 服务发出。
有关更多信息,请参阅 CloudTrail userIdentity 元素。
Amazon CloudTrail 中的机密数据
由于用户池和身份池处理用户数据,因此 Amazon Cognito 使用值 HIDDEN_FOR_SECURITY_REASONS 掩盖您的 CloudTrail 事件中的一些私有字段。有关 Amazon Cognito 未填充到事件的字段的示例,请参阅示例 Amazon Cognito 事件。Amazon Cognito 只会掩盖一些通常包含用户信息的字段,例如密码和令牌。Amazon Cognito 不会自动检测或屏蔽您在 API 请求中填充到非私有字段的个人身份信息。
用户池事件
Amazon Cognito 支持将用户池操作页面上列出的所有操作作为 CloudTrail 日志文件中的事件进行记录。Amazon Cognito 将用户池事件作为管理事件记录到 CloudTrail。
Amazon Cognito 用户池 CloudTrail 条目中的 eventType 字段告诉您,应用程序是向 Amazon Cognito 用户池 API 发出了请求,还是向为 OpenID Connect、SAML 2.0 或托管登录页面提供资源的端点发出了请求。API 请求的 AwsApiCall 为 eventType,端点请求的 AwsServiceEvent 为 eventType。
Amazon Cognito 将以下对于托管登录服务的请求作为事件记录到 CloudTrail 中。
注意
Amazon Cognito 在 CloudTrail 日志中记录特定用户请求的 UserSub,但不记录 UserName。通过调用 ListUsers API,并使用主题筛选条件,您可以找到给定 UserSub 的用户。
身份池事件
数据事件
Amazon Cognito 将以下 Amazon Cognito 身份事件作为数据事件记录到 CloudTrail 中。数据事件是大容量数据面板 API 操作,CloudTrail 原定设置情况下不记录这些操作。记录数据事件将收取额外费用。
要为这些 API 操作生成 CloudTrail 日志,您必须在跟踪记录中激活数据事件,并为 Cognito 身份池选择事件选择器。有关更多信息,请参阅 Amazon CloudTrail 用户指南中的记录数据事件以便跟踪。
您还可以使用以下 CLI 命令将身份池事件选择器添加到您的跟踪记录中。
aws cloudtrail put-event-selectors --trail-name<trail name>--advanced-event-selectors \ "{\ \"Name\": \"Cognito Selector\",\ \"FieldSelectors\": [\ {\ \"Field\": \"eventCategory\",\ \"Equals\": [\ \"Data\"\ ]\ },\ {\ \"Field\": \"resources.type\",\ \"Equals\": [\ \"AWS::Cognito::IdentityPool\"\ ]\ }\ ]\ }"
管理事件
Amazon Cognito 将剩余的 Amazon Cognito 身份池 API 操作记录为管理事件。原定设置情况下,CloudTrail 会记录管理事件 API 操作。
有关 Amazon Cognito 记录到 CloudTrail 的 Amazon Cognito 身份池 API 操作的列表,请参阅 Amazon Cognito 身份池 API 参考。
Amazon Cognito Sync
Amazon Cognito 将所有 Amazon Cognito 同步 API 操作记录为管理事件。有关 Amazon Cognito 记录到 CloudTrail 的 Amazon Cognito 同步 API 操作的列表,请参阅 Amazon Cognito 同步 API 参考。
使用 Amazon CloudWatch Logs Insights 分析 Amazon Cognito CloudTrail 事件
您可以使用 Amazon CloudWatch Logs Insights 搜索和分析您的 Amazon Cognito CloudTrail 事件。在配置您的跟踪以将事件发送到 CloudWatch Logs 时,CloudTrail 只发送符合您跟踪记录设置的事件。
如需查询或研究您的 Amazon Cognito CloudTrail 事件,请在 CloudTrail 控制台中确保您在跟踪记录设置中选择管理事件选项,以便您可以监控对Amazon资源执行的管理操作。当您想要识别账户中的错误、异常活动或异常用户行为时,可以在跟踪记录设置中选择 Insights 事件选项。
Amazon Cognito 查询的示例
您可以在 Amazon CloudWatch 控制台中使用下列查询。
常规查询
查找 25 个最近添加的日志事件。
fields @timestamp, @message | sort @timestamp desc | limit 25 | filter eventSource = "cognito-idp.amazonaws.com"
获取 25 个最近添加的录入事件(包含异常)的列表。
fields @timestamp, @message | sort @timestamp desc | limit 25 | filter eventSource = "cognito-idp.amazonaws.com" and @message like /Exception/
异常和错误查询
查找最近添加的 25 个含错误代码 NotAuthorizedException 的录入事件以及 Amazon Cognito 用户池 sub。
fields @timestamp, additionalEventData.sub as user | sort @timestamp desc | limit 25 | filter eventSource = "cognito-idp.amazonaws.com" and errorCode= "NotAuthorizedException"
查找具有 sourceIPAddress 和相应 eventName 的记录数。
filter eventSource = "cognito-idp.amazonaws.com" | stats count(*) by sourceIPAddress, eventName
查找触发 NotAuthorizedException 错误的前 25 个 IP 地址。
filter eventSource = "cognito-idp.amazonaws.com" and errorCode= "NotAuthorizedException" | stats count(*) as count by sourceIPAddress, eventName | sort count desc | limit 25
找到调用 ForgotPassword API 的前 25 个 IP 地址。
filter eventSource = "cognito-idp.amazonaws.com" and eventName = 'ForgotPassword' | stats count(*) as count by sourceIPAddress | sort count desc | limit 25