

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

# 亚马逊 Cognito 正在登录 Amazon CloudTrail
<a name="logging-using-cloudtrail"></a>

Amazon Cognito 与 Amazon CloudTrail一项服务集成，可记录用户、角色或 Amazon 服务在 Amazon Cognito 中执行的操作。 CloudTrail 捕获一部分 Amazon Cognito 的 API 调用作为事件，包括来自亚马逊 Cognito 控制台的调用和对亚马逊 Cognito API 操作的代码调用。如果您创建了跟踪，则可以选择将 CloudTrail 事件传送到 Amazon S3 存储桶，包括 Amazon Cognito 的事件。如果您未配置跟踪，您仍然可以在 CloudTrail 控制台的 “事件**历史记录” 中查看最新的事件**。通过收集的信息 CloudTrail，您可以确定向 Amazon Cognito 发出的请求、发出请求的 IP 地址、谁提出了请求、何时提出请求以及其他详细信息。

要了解更多信息 CloudTrail，包括如何配置和激活它，请参阅《[Amazon CloudTrail 用户指南》](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/)。

您还可以为特定 CloudTrail 事件创建 Amazon CloudWatch 警报。例如，您可以设置 CloudWatch ，以在身份池配置发生更改时触发警报。有关更多信息，请参阅[为 CloudTrail 事件创建 CloudWatch 警报：示例](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudwatch-alarms-for-cloudtrail.html)。

**Topics**
+ [亚马逊 Cognito 发送到的信息 CloudTrail](#amazon-cognito-info-in-cloudtrail)
+ [使用亚马逊日志见解分析 Amazon Cognito CloudTrail 事件 CloudWatch](#analyzingcteventscwinsight)
+ [示例 Amazon Cognito 事件](understanding-amazon-cognito-entries.md)

## 亚马逊 Cognito 发送到的信息 CloudTrail
<a name="amazon-cognito-info-in-cloudtrail"></a>

CloudTrail 在您创建时已开启 Amazon Web Services 账户。**当 Amazon Cognito 中出现支持的事件活动时，该活动会与其他 Amazon 服务 CloudTrail 事件一起记录在事件历史记录中。**您可以在自己的 Amazon 账户中查看、搜索和下载最近发生的事件。有关更多信息，请参阅[使用事件历史查看 CloudTrail 事件](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

要持续记录您的 Amazon 账户中的事件，包括 Amazon Cognito 的事件，请创建跟踪。 CloudTrail 跟踪将日志文件传输到 Amazon S3 存储桶。预设情况下，在控制台中创建跟踪时，此跟踪应用于所有 区域。跟踪记录 Amazon 分区中所有区域的事件，并将日志文件传送到您指定的 Amazon S3 存储桶。此外，您可以配置其他 Amazon 服务，以进一步分析和处理 CloudTrail 日志中收集的事件数据。有关更多信息，请参阅: 
+ [创建跟踪概览](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html)
+ [CloudTrail 支持的服务和集成](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html#cloudtrail-aws-service-specific-topics-list)
+ [为以下各项配置亚马逊 SNS 通知 CloudTrail](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/getting_notifications_top_level.html)
+ [接收来自多个地区的 CloudTrail 日志文件](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/receive-cloudtrail-log-files-from-multiple-regions.html)和[接收来自多个账户的 CloudTrail日志文件](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-receive-logs-from-multiple-accounts.html)

每个事件或日志条目都包含有关生成请求的人员信息。身份信息可帮助您确定以下内容：
+ 请求是使用根用户凭证还是 IAM 用户凭证发出的。
+ 请求是使用角色还是联合用户的临时安全凭证发出的。
+ 请求是否由其他 Amazon 服务发出。

有关更多信息，请参阅 [CloudTrail userIdentity 元素](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html)。

**中的机密数据 Amazon CloudTrail**  
由于用户池和身份池会处理用户数据，因此 Amazon Cognito 会使用该值掩盖 CloudTrail 事件中的一些私有字段。`HIDDEN_DUE_TO_SECURITY_REASONS`有关 Amazon Cognito 未填充到事件的字段的示例，请参阅[示例 Amazon Cognito 事件](understanding-amazon-cognito-entries.md)。Amazon Cognito 只会掩盖一些通常包含用户信息的字段，例如密码和令牌。Amazon Cognito 不会自动检测或屏蔽您在 API 请求中填充到非私有字段的个人身份信息。

### 用户池事件
<a name="user-pools-cloudtrail-events"></a>

Amazon Cognito 支持将[用户池操作页面上列出的所有操作](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_Operations.html)作为事件 CloudTrail 记录在日志文件中。Amazon Cognito 将用户池事件记录 CloudTrail 为*管理*事件。

Amazon Cognito 用户池 CloudTrail 条目中的`eventType`字段告诉你你的应用程序是向 [Amazon Cognito 用户池](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/Welcome.html) API 发出请求，还是向[为 OpenID Connect、SAML 2.0 或托管登录页面提供资源的终端节点](cognito-userpools-server-contract-reference.md)发出请求。API 请求的 `AwsApiCall` 为 `eventType`，端点请求的 `AwsServiceEvent` 为 `eventType`。

Amazon Cognito 将以下请求作为事件记录到您的托管登录服务。 CloudTrail

------
#### [ Hosted UI (classic) events ]


**在中托管用户界面（经典）活动 CloudTrail**  

| 操作 | 说明 | 
| --- | --- | 
| Login\$1GET, CognitoAuthentication | 用户查看或向您的 [登录端点](login-endpoint.md) 提交凭证。 | 
| OAuth2\$1Authorize\$1GET, Beta\$1Authorize\$1GET | 用户查看您的 [对端点授权](authorization-endpoint.md)。 | 
| OAuth2Response\$1GET, OAuth2Response\$1POST | 用户向您的 /oauth2/idpresponse 端点提交 IdP 令牌。 | 
| SAML2Response\$1POST, Beta\$1SAML2Response\$1POST | 用户向您的 /saml2/idpresponse 端点提交 IdP SAML 断言。 | 
| Login\$1OIDC\$1SAML\$1POST | 用户在您的 [登录端点](login-endpoint.md) 中输入用户名并与 [IdP 标识符](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pools-integrating-3rd-party-saml-providers.html)匹配。 | 
| Token\$1POST, Beta\$1Token\$1POST | 用户向您的 [令牌端点](token-endpoint.md) 提交授权码。 | 
| Signup\$1GET, Signup\$1POST | 用户向您的 /signup 端点提交注册信息。 | 
| Confirm\$1GET, Confirm\$1POST | 用户在托管 UI 中提交确认码。 | 
| ResendCode\$1POST | 用户在托管 UI 中提交重新发送确认码的请求。 | 
| ForgotPassword\$1GET, ForgotPassword\$1POST | 用户向您的 /forgotPassword 端点提交重置密码的请求。 | 
| ConfirmForgotPassword\$1GET, ConfirmForgotPassword\$1POST | 用户向您的 /confirmForgotPassword 端点提交代码以确认其 ForgotPassword 请求。 | 
| ResetPassword\$1GET, ResetPassword\$1POST | 用户在托管 UI 中提交新密码。 | 
| Mfa\$1GET, Mfa\$1POST | 用户在托管 UI 中提交多重身份验证（MFA）代码。 | 
| MfaOption\$1GET, MfaOption\$1POST | 用户在托管 UI 中选择其首选 MFA 方法。 | 
| MfaRegister\$1GET, MfaRegister\$1POST | 用户在注册 MFA 时，在托管 UI 中提交多重身份验证（MFA）代码。 | 
| Logout | 用户在您的 /logout 端点注销。 | 
| SAML2Logout\$1POST | 用户在您的 /saml2/logout 端点注销。 | 
| Error\$1GET | 用户在托管 UI 中查看错误页面。 | 
| UserInfo\$1GET, UserInfo\$1POST | 用户或 IdP 与您的 [userInfo 端点](userinfo-endpoint.md) 交换信息。 | 
| Confirm\$1With\$1Link\$1GET | 用户根据 Amazon Cognito 在电子邮件中发送的链接提交确认。 | 
| Event\$1Feedback\$1GET | 用户向 Amazon Cognito 提交有关[威胁防护](cognito-user-pool-settings-threat-protection.md)事件的反馈。 | 

------
#### [ Managed login events ]


**中的托管登录事件 CloudTrail**  

| 操作 | 说明 | 
| --- | --- | 
| login\$1POST | 用户向您的[登录端点](login-endpoint.md)提交凭证。 | 
| login\$1continue\$1POST | 已经登录过一次的用户选择再次登录。 | 
| forgotPassword\$1POST | 用户重置其密码。 | 
| selectChallenge\$1POST | 用户在提交用户名或凭证后对身份验证质询作出回应。 | 
| confirmUser\$1GET | 用户在[确认或验证电子邮件消息](signing-up-users-in-your-app.md)中打开链接。 | 
| mfa\$1back\$1POST | 用户在出现 MFA 提示后选择返回按钮。 | 
| mfa\$1options\$1POST | 用户选择 MFA 选项。 | 
| mfa\$1phone\$1register\$1POST | 用户提交电话号码以注册为一个 MFA 因素。此操作会导致 Amazon Cognito 向用户的电话号码发送 MFA 代码。 | 
| mfa\$1phone\$1verify\$1POST | 用户提交发送到其电话号码的 MFA 代码。 | 
| mfa\$1phone\$1resendCode\$1POST | 用户提交向其电话号码重新发送 MFA 代码的请求。 | 
| mfa\$1totp\$1POST | 用户提交 TOTP MFA 代码。 | 
| signup\$1POST | 用户向您的 /signup 托管登录页面提交信息。 | 
| signup\$1confirm\$1POST | 用户通过电子邮件或短信提交确认码。 | 
| verifyCode\$1POST | 用户提交一次性密码（OTP）以进行无密码身份验证。 | 
| passkeys\$1add\$1POST | 用户提交注册新的通行密钥凭证的请求。 | 
| passkeys\$1add\$1GET | 用户导航到可以注册通行密钥的页面。 | 
| login\$1passkey\$1POST | 用户使用通行密钥登录。 | 

------

**注意**  
Amazon Cognito 会记录特定`UserName`于用户的请求，`UserSub`但不记录在 CloudTrail 日志中。通过调用 `ListUsers` API，并使用主题筛选条件，您可以找到给定 `UserSub` 的用户。

### 身份池事件
<a name="identity-pools-cloudtrail-events"></a>

**数据事件**

*Amazon Cognito 将以下 Amazon Cognito 身份事件记录 CloudTrail 为数据事件。*[数据事件](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html#logging-data-events)是大容量数据平面 API 操作， CloudTrail 默认情况下不记录。记录数据事件将收取额外费用。
+ [https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html](https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html)
+ [https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/API_GetId.html](https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/API_GetId.html)
+ [https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/API_GetOpenIdToken.html](https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/API_GetOpenIdToken.html)
+ [https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html](https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html)
+ [https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/API_UnlinkIdentity.html](https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/API_UnlinkIdentity.html)

要为这些 API 操作生成 CloudTrail 日志，您必须激活跟踪中的数据事件，并为 **Cognito** 身份池选择事件选择器。有关更多信息，请参阅 *Amazon CloudTrail 用户指南*中的[记录数据事件以便跟踪](https://docs.amazonaws.cn/awscloudtrail/latest/userguide/logging-data-events-with-cloudtrail.html)。

您还可以使用以下 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的亚马逊 Cognito 身份池 API 操作的列表，请参阅亚马逊 Co [gnito 身份池 API 参](https://docs.amazonaws.cn/cognitoidentity/latest/APIReference/API_Operations.html)考。

**Amazon Cognito Sync**

Amazon Cognito 将所有 Amazon Cognito 同步 API 操作记录为管理事件。有关 Amazon Cognito 登录 CloudTrail的亚马逊 Cognito Sync API 操作的列表，请参阅亚马逊 Cognito Sy [nc API 参考](https://docs.amazonaws.cn/cognitosync/latest/APIReference/API_Operations.html)。

## 使用亚马逊日志见解分析 Amazon Cognito CloudTrail 事件 CloudWatch
<a name="analyzingcteventscwinsight"></a>

您可以使用 Amazon Log CloudWatch s Insights 搜索和分析您的 Amazon Cognito CloudTrail 事件。当您将跟踪配置为向 CloudWatch Logs 发送事件时，仅 CloudTrail 发送与您的跟踪设置相匹配的事件。

要查询或研究您的 Amazon Cognito CloudTrail 事件，请在 CloudTrail 控制台中确保在跟踪设置中选择**管理事件**选项，以便您可以监控对资源执行的管理操作。 Amazon 当您想要识别账户中的错误、异常活动或异常用户行为时，可以在跟踪记录设置中选择 **Insights 事件**选项。

### Amazon Cognito 查询的示例
<a name="analyzingcteventscwinsight-samplequeries"></a>

您可以在 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
```