

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

# 具备威胁防护的高级安全功能
<a name="cognito-user-pool-settings-threat-protection"></a>

在创建用户池之后，即可使用 Amazon Cognito 控制台中导航菜单中的**威胁防护**。可以打开威胁防护功能并自定义为响应不同风险而执行的操作。或者，您可以使用审计模式收集与检测到的风险相关的指标，而无需应用任何安全缓解措施。在审计模式下，威胁防护会向 Amazon 发布指标 CloudWatch。在 Amazon Cognito 生成其第一个事件后，您即可看到指标。请参阅[查看威胁防护指标](metrics-for-cognito-user-pools.md#user-pool-settings-viewing-threat-protection-metrics)。

威胁防护（此前称为*高级安全功能*）是一组监控用户池中不必要活动的工具，也是用于自动关闭潜在恶意活动的配置工具。威胁防护为标准和自定义身份验证操作提供了不同的配置选项。例如，在设置了额外安全因素时，您可能想向使用可疑自定义身份验证登录的用户发送通知，而阻止使用基本的用户名和密码身份验证且处于相同风险级别的用户。

威胁防护在增值版功能计划中可用。有关更多信息，请参阅 [用户池功能计划](cognito-sign-in-feature-plans.md)。

以下用户池选项是威胁防护的组成部分。

**已泄露的凭证**  
用户将密码重复用于多个用户账户。Amazon Cognito 的已泄露凭证功能可编译公开泄露的用户名和密码数据，并将用户的凭证与泄露的凭证列表进行比较。已泄露凭证的检测还检查常猜测的密码。您可以在用户池的 username-and-password标准身份验证流程中检查凭据是否被泄露。Amazon Cognito 不会在安全远程密码（SRP）或自定义身份验证流程中检测凭证是否泄露。  
您可以选择用于提示检查已泄露凭证的用户操作，以及您希望 Amazon Cognito 采取的应对措施。对于登录、注册和密码更改事件，Amazon Cognito 可以**禁止登录**或**允许登录**。在这两种情况下，Amazon Cognito 都会生成用户活动日志，您可以在其中找到有关该事件的更多信息。  
**了解详情**  
[使用凭证遭泄露检测功能](cognito-user-pool-settings-compromised-credentials.md)

**自适应身份验证**  
Amazon Cognito 可以查看来自用户登录请求的位置和设备信息，并应用自动响应来保护用户池中的用户账户免受可疑活动的侵害。您可以监控用户活动，并自动响应在用户名密码和 SRP 以及自定义身份验证中检测到的风险级别。  
当您激活威胁防护时，Amazon Cognito 会为用户活动分配风险评分。您可以为可疑活动指定自动响应：您可以**需要 MFA**、**禁止登录**，或者只记录活动详细信息和风险评分。您还可以自动发送电子邮件，将可疑活动通知用户，以便他们可以重置密码或采取其他自助操作。  
**了解详情**  
[使用自适应身份验证](cognito-user-pool-settings-adaptive-authentication.md)

**IP 地址允许列表和拒绝列表**  
在**全功能**模式下使用 Amazon Cognito 威胁防护，您可以创建基于 IP 地址的**始终阻止**和**始终允许**例外规则。对于来自**始终阻止**例外列表中 IP 地址的会话，自适应身份验证不会向其分配风险级别，该会话也无法登录您的用户池。  

**有关 IP 地址允许列表和阻止列表的需知信息**
+ **始终阻止**和**始终允许**规则必须使用 CIDR 格式表示，例如 `192.0.2.0/24`（24 位子网掩码）或 `192.0.2.252/32`（单个 IP 地址）。
+  IP 地址在 “**始终阻止**” IP 范围内的设备无法使用基于 SDK 的或托管登录应用程序进行注册或登录，但它们可以使用第三方登录。 IdPs
+ **始终允许**和**始终阻止**列表不会影响令牌刷新。
+ Amazon Cognito 不会对来自**始终允许** IP 范围的设备应用自适应身份验证 MFA 规则，但会应用凭证泄露规则。

**日志导出**  
威胁防护会将用户向您的用户池发起的身份验证请求的详细信息记录到日志中。这些日志包含威胁评估、用户信息以及位置和设备等会话元数据。您可以为这些日志创建外部归档以进行保留和分析。Amazon Cognito 用户池将威胁防护日志导出到亚马逊 S3、 CloudWatch 日志和亚马逊数据 Firehose。有关更多信息，请参阅 [查看和导出用户事件历史记录](cognito-user-pool-settings-adaptive-authentication.md#user-pool-settings-adaptive-authentication-event-user-history)。  
**了解详情**  
[导出威胁防护用户活动日志](exporting-quotas-and-usage.md#exporting-quotas-and-usage-user-activity)

**Topics**
+ [威胁防护的注意事项和限制](#cognito-user-pool-threat-protection-considerations)
+ [在用户池中开启威胁防护](#cognito-user-pool-threat-protection-activating)
+ [威胁防护强制执行概念](#cognito-user-pool-settings-threat-protection-threat-protection-enforcement)
+ [标准身份验证和自定义身份验证的威胁防护](#cognito-user-pool-settings-threat-protection-threat-protection-types)
+ [威胁防护先决条件](#cognito-user-pool-threat-protection-prerequisites)
+ [设置威胁防护](#cognito-user-pool-settings-configure-threat-protection)
+ [使用凭证遭泄露检测功能](cognito-user-pool-settings-compromised-credentials.md)
+ [使用自适应身份验证](cognito-user-pool-settings-adaptive-authentication.md)
+ [在应用程序中收集威胁防护的数据](user-pool-settings-viewing-threat-protection-app.md)

## 威胁防护的注意事项和限制
<a name="cognito-user-pool-threat-protection-considerations"></a>

**不同身份验证流程的威胁防护选项有所不同**  
Amazon Cognito 通过身份验证流程 `USER_PASSWORD_AUTH` 和 `ADMIN_USER_PASSWORD_AUTH` 来支持自适应身份验证和凭证遭泄露检测。您可以仅为 `USER_SRP_AUTH` 启用自适应身份验证。不能将威胁防护与联合身份验证登录一起使用。

**始终屏蔽会增加 IPs 请求配额**  
在您的用户池中阻止来自**始终阻止**例外列表中 IP 地址的请求，可以帮助您的用户池保持在[请求速率配额](https://docs.amazonaws.cn/cognito/latest/developerguide/limits.html#category_operations)以内。

**威胁防护不会应用速率限制**  
一些恶意流量具有请求量大的特征，例如分布式拒绝服务 (DDoS) 攻击。Amazon Cognito 对传入流量应用的风险评分是基于单个请求的，并不考虑请求数。在大批量事件中，即便某些请求与大规模攻击无关，它们仍然可能因为应用层的原因而被赋予风险评分，并触发自动化响应。要对用户池中的容量攻击实施防御，请添加 Amazon WAF Web。 ACLs有关更多信息，请参阅 [将 Amazon WAF Web ACL 与用户池关联](user-pool-waf.md)。

**威胁防护不影响 M2M 请求**  
客户凭证授予的目的是在与用户帐户无关的情况下进行 machine-to-machine（M2M）授权。威胁防护仅监控用户池中的用户账户和密码。要在 M2M 活动中实现安全功能，请考虑 Amazon WAF 用于监控请求率和内容的功能。有关更多信息，请参阅 [将 Amazon WAF Web ACL 与用户池关联](user-pool-waf.md)。

## 在用户池中开启威胁防护
<a name="cognito-user-pool-threat-protection-activating"></a>

------
#### [ Amazon Cognito user pools console ]

**为用户池激活威胁防护**

1. 转到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)。如果出现提示，请输入您的 Amazon 凭据。

1. 选择**用户池**。

1. 从列表中选择一个现有用户池，或[创建一个用户池](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)。

1. 如果尚未激活，从**设置**菜单中激活增值版功能计划。

1. 选择**威胁防护**菜单，然后选择**激活**。

1. 选择**保存更改**。

------
#### [ API ]

在[CreateUserPool](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)或 [UpdateUserPool](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API 请求中将您的功能计划设置为 Plus。以下部分示例请求正文将威胁防护设置为全功能模式。有关完整的示例请求，请参阅[示例](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#API_CreateUserPool_Examples)。

```
"UserPoolAddOns": { 
      "AdvancedSecurityMode": "ENFORCED"
   }
```

------

威胁防护是一个总括性术语，指的是一组特征，用于监控用户操作以发现账户盗用的迹象，并自动采取措施来保护受影响的用户账户。当用户使用标准和自定义身份验证流程登录时，您可以对用户应用威胁防护设置。

威胁防护会[生成日志](cognito-user-pool-settings-adaptive-authentication.md#user-pool-settings-adaptive-authentication-event-user-history)，详细说明用户的登录、注销和其他活动。您可以将这些日志导出到第三方系统。有关更多信息，请参阅 [查看和导出用户事件历史记录](cognito-user-pool-settings-adaptive-authentication.md#user-pool-settings-adaptive-authentication-event-user-history)。

## 威胁防护强制执行概念
<a name="cognito-user-pool-settings-threat-protection-threat-protection-enforcement"></a>

威胁防护从*仅限审计*模式开始，在此模式下，用户池会监控用户活动、分配风险级别和生成日志。妥善的做法是，在启用*全功能模式*之前，在仅限审计模式下运行两周或更长时间。全功能模式包括一组针对检测到的风险活动和密码泄露的自动响应措施。在仅限审计模式下，您可以监控 Amazon Cognito 正在执行的威胁评估。您还可以[提供反馈](cognito-user-pool-settings-adaptive-authentication.md#user-pool-settings-adaptive-authentication-feedback)，帮助训练该特征以改进误报和漏报。

您可以在用户池级别配置威胁防护强制执行措施，以覆盖用户池中的所有应用程序客户端，也可以在单个应用程序客户端级别配置威胁防护。应用程序客户端威胁防护配置会覆盖用户池配置。要为应用程序客户端配置威胁防护，请在 Amazon Cognito 控制台中，导航到用户池的**应用程序客户端**菜单中的应用程序客户端设置。在这里，您可以**使用客户端级设置**并配置应用程序客户端专有的强制执行。

此外，您可以分别为标准和自定义身份验证类型配置威胁防护。

## 标准身份验证和自定义身份验证的威胁防护
<a name="cognito-user-pool-settings-threat-protection-threat-protection-types"></a>

配置威胁防护的方式取决于您在用户池和应用程序客户端中进行的身份验证类型。以下每种类型的身份验证都可以有自己的强制执行模式和自动响应。

**标准身份验证**  
*标准身份验证*是指通过用户名密码流程和托管登录实现的用户登录、注销及密码管理。当用户使用托管登录进行登录或使用以下 API `AuthFlow` 参数时，Amazon Cognito 威胁防护会监控操作的风险指标：    
**[InitiateAuth](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthFlow)**  
`USER_PASSWORD_AUTH`、`USER_SRP_AUTH`。泄露的凭证功能无法在 `USER_SRP_AUTH` 登录时访问密码，并且不会监控或对这个流程中的事件采取行动。  
**[AdminInitiateAuth](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-AuthFlow)**  
`ADMIN_USER_PASSWORD_AUTH`、`USER_SRP_AUTH`。泄露的凭证特征无法在 `USER_SRP_AUTH` 登录时访问密码，并且不会监控或对这个流程中的事件采取行动。
您可以将标准身份验证的**强制执行模式**设置为**仅限审计**或**全功能**。要禁用标准身份验证的威胁监控，请将威胁防护设置为**没有强制执行**。

**自定义身份验证**  
*自定义身份验证*是使用[自定义质询 Lambda 触发器](user-pool-lambda-challenge.md)的用户登录。您无法在托管登录中进行自定义身份验证。当用户使用 `InitiateAuth` 和 `AdminInitiateAuth` 的 API `AuthFlow` 参数 `CUSTOM_AUTH` 登录时，Amazon Cognito 威胁防护会监控操作的风险指标。  
您可以将自定义身份验证的**强制执行模式**设置为**仅限审计**、**全功能**或**没有强制执行**。**没有强制执行**选项可在不影响其他威胁防护功能的情况下禁用自定义身份验证的威胁监控。

## 威胁防护先决条件
<a name="cognito-user-pool-threat-protection-prerequisites"></a>

在开始之前，您需要：
+ 用户池和应用程序客户端。有关更多信息，请参阅 [用户池入门](getting-started-user-pools.md)。
+ 在 Amazon Cognito 控制台中将多重身份验证（MFA）设置为**可选**,以使用基于风险的自适应身份验证功能。有关更多信息，请参阅 [向用户池添加 MFA](user-pool-settings-mfa.md)。
+ 如果您使用电子邮件通知，请转到 [Amazon SES 控制台](https://console.amazonaws.cn/ses/home)配置并验证要用于通知电子邮件的电子邮件地址或域。有关 Amazon SES 的更多信息，请参阅[在 Amazon SES 中验证身份](https://docs.amazonaws.cn/ses/latest/dg/verify-addresses-and-domains.html)。

## 设置威胁防护
<a name="cognito-user-pool-settings-configure-threat-protection"></a>

请按照以下说明设置用户池威胁防护。

**注意**  
要在 Amazon Cognito 用户池控制台中为应用程序客户端设置不同的威胁防护配置，请从**应用程序客户端**菜单中选择应用程序客户端，然后选择**使用客户端级设置**。

------
#### [ Amazon Web Services 管理控制台 ]

**为用户池配置威胁防护**

1. 转到 [Amazon Cognito 控制台](https://console.amazonaws.cn/cognito/home)。如果出现提示，请输入您的 Amazon 凭据。

1. 选择**用户池**。

1. 从列表中选择一个现有用户池，或[创建一个用户池](https://docs.amazonaws.cn/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)。

1. 选择**威胁防护**菜单，然后选择**激活**。

1. 选择要配置的威胁防护方法：**标准身份验证和自定义身份验证**。您可以为自定义身份验证和标准身份验证设置不同的强制执行模式，但在**全功能**模式下，它们共享自动响应的配置。

1. 选择**编辑**。

1. 选择**强制执行模式**。要立即开始对检测到的风险作出响应，请选择**全功能**并配置针对已泄露凭证和自适应身份验证的自动响应。要在用户级日志中收集信息 CloudWatch，请选择 “**仅审计**”。

   建议在启用操作之前，先将威胁防护保持在审计模式两周。在此期间，Amazon Cognito 可以了解应用程序用户的使用模式，并且您可以提供事件反馈以调整响应。

1. 如果您已选择**仅限审计**，请选择**保存更改**。如果您已选择**全功能**：

   1. 选择是否要进行**自定义**操作或使用 **Cognito 默认设置**响应可疑**已泄露的凭证**。**Cognito 默认设置**：

      1. 检测**登录**、**注册**和**密码更改**中的已泄露的凭证。

      1. 使用**禁止登录**操作响应已泄露的凭证。

   1. 如果您为**已泄露的凭证**选择了**自定义**操作，请选择 Amazon Cognito 将用于**事件检测**的用户池操作，以及您希望 Amazon Cognito 执行的**已泄露凭证的响应**。您可以使用可疑的已泄露凭证进行**禁止登录**或**允许登录**。

   1. 在**自适应身份验证**下，选择如何响应恶意登录尝试。选择是否要进行**自定义**操作或使用 **Cognito 默认设置**响应可疑恶意活动。当您选择 **Cognito 默认设置**时，Amazon Cognito 会阻止所有风险级别的登录，并且不会通知用户。

   1. 如果您针对**自适应身份验证**已选择**自定义操作**，请根据严重性级别选择 Amazon Cognito 对检测到的风险执行的 **自动风险响应**操作。当您针对风险级别分配响应时，您无法为较高风险级别分配限制性较小的响应。您可以为风险级别分配以下响应：

      1. **允许登录** – 不采取任何预防性操作。

      1. **可选 MFA** – 如果用户配置了 MFA，Amazon Cognito 将始终要求用户在登录时提供其它 SMS 或基于时间的一次性密码（TOTP）因素。如果用户没有配置 MFA，他们可以继续正常登录。

      1. **需要 MFA** – 如果用户配置了 MFA，Amazon Cognito 将始终要求用户在登录时提供其它短信或 TOTP 因素。如果用户没有配置 MFA，Amazon Cognito 将提示他们设置 MFA。在您自动要求用户使用 MFA 之前，请在应用程序中配置一种机制来捕获 SMS MFA 的电话号码，或为 TOTP MFA 注册身份验证器应用程序。

      1. **禁止登录** – 阻止用户登录。

      1. **通知用户** – 向用户发送电子邮件，其中包含有关 Amazon Cognito 检测到的风险以及您所采取的响应的信息。您可以为发送的消息自定义电子邮件消息模板。

1. 如果您在上一步骤中选择了**通知用户**，您可以自定义电子邮件发送设置和电子邮件消息模板以进行自适应身份验证。

   1. 在**电子邮件配置**下，选择您希望用于自适应身份验证的 **SES 区域**、**发件人电子邮件地址**、**发件人姓名**和**回复电子邮件地址**。有关将用户池电子邮件消息与 Amazon Simple Email Service 集成的更多信息，请参阅 [Amazon Cognito 用户池的电子邮件设置](https://docs.amazonaws.cn/cognito/latest/developerguide/user-pool-email.html)。  
![\[用户事件历史记录\]](http://docs.amazonaws.cn/cognito/latest/developerguide/images/cup-advanced-security-ses-notification.png)

   1. 展开**电子邮件模板**以自定义包含 HTML 和纯文本版本电子邮件消息的自适应身份验证通知。要了解有关电子邮件消息模板的更多信息，请参阅[消息模板](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-message-templates)。

1. 扩展 **IP 地址例外**以创建**始终允许**或**始终阻止**的列表 IPv4 或 IPv6 地址范围，无论威胁防护风险评估如何，这些地址范围都将始终被允许或阻止。用 [CIDR 表示法](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation)指定 IP 地址范围（例如，192.168.100.0/24）。

1. 选择**保存更改**。

------
#### [ API (user pool) ]

要为用户池设置威胁防护配置，请发送包含参数但不包含`UserPoolId`参数的 [SetRiskConfiguration](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html)API 请求。`ClientId`以下是用户池的一个示例请求正文。此风险配置会根据风险的严重程度执行一系列不断升级的操作，并通知所有风险级别的用户。它对注册操作应用已泄露凭证阻止。

要强制执行此配置，您必须在单独的请求[CreateUserPool](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)或 [UpdateUserPool](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API 请求`ENFORCED`中`AdvancedSecurityMode`将设置为。有关占位符模板的更多信息（如本例中的 `{username}`），请参阅 [配置 MFA、身份验证、验证和邀请消息](cognito-user-pool-settings-message-customizations.md)。

```
{
   "AccountTakeoverRiskConfiguration": { 
      "Actions": { 
         "HighAction": { 
            "EventAction": "MFA_REQUIRED",
            "Notify": true
         },
         "LowAction": { 
            "EventAction": "NO_ACTION",
            "Notify": true
         },
         "MediumAction": { 
            "EventAction": "MFA_IF_CONFIGURED",
            "Notify": true
         }
      },
      "NotifyConfiguration": { 
         "BlockEmail": { 
            "Subject": "You have been blocked for suspicious activity",
            "TextBody": "We blocked {username} at {login-time} from {ip-address}."
         },
         "From": "admin@example.com",
         "MfaEmail": { 
            "Subject": "Suspicious activity detected, MFA required",
            "TextBody": "Unexpected sign-in from {username} on device {device-name}. You must use MFA."
         },
         "NoActionEmail": { 
            "Subject": "Suspicious activity detected, secure your user account",
            "TextBody": "We noticed suspicious sign-in activity by {username} from {city}, {country} at {login-time}. If this was not you, reset your password."
         },
         "ReplyTo": "admin@example.com",
         "SourceArn": "arn:aws:ses:us-west-2:123456789012:identity/admin@example.com"
      }
   },
   "CompromisedCredentialsRiskConfiguration": { 
      "Actions": { 
         "EventAction": "BLOCK"
      },
      "EventFilter": [ "SIGN_UP" ]
   },
   "RiskExceptionConfiguration": { 
      "BlockedIPRangeList": [ "192.0.2.0/24","198.51.100.0/24" ],
      "SkippedIPRangeList": [ "203.0.113.0/24" ]
   },
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------
#### [ API (app client) ]

要为应用程序客户端设置威胁防护配置，请发送包含`UserPoolId`参数和参数的 [SetRiskConfiguration](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html)API 请求。`ClientId`以下是应用程序客户端的一个示例请求正文。此风险配置比用户池配置更为严格，会阻止高风险条目。该配置还将已泄露的凭证阻止应用于注册、登录和密码重置操作。

要强制执行此配置，您必须在单独的请求[CreateUserPool](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)或 [UpdateUserPool](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API 请求`ENFORCED`中`AdvancedSecurityMode`将设置为。有关占位符模板的更多信息（如本例中的 `{username}`），请参阅 [配置 MFA、身份验证、验证和邀请消息](cognito-user-pool-settings-message-customizations.md)。

```
{
   "AccountTakeoverRiskConfiguration": { 
      "Actions": { 
         "HighAction": { 
            "EventAction": "BLOCK",
            "Notify": true
         },
         "LowAction": { 
            "EventAction": "NO_ACTION",
            "Notify": true
         },
         "MediumAction": { 
            "EventAction": "MFA_REQUIRED",
            "Notify": true
         }
      },
      "NotifyConfiguration": { 
         "BlockEmail": { 
            "Subject": "You have been blocked for suspicious activity",
            "TextBody": "We blocked {username} at {login-time} from {ip-address}."
         },
         "From": "admin@example.com",
         "MfaEmail": { 
            "Subject": "Suspicious activity detected, MFA required",
            "TextBody": "Unexpected sign-in from {username} on device {device-name}. You must use MFA."
         },
         "NoActionEmail": { 
            "Subject": "Suspicious activity detected, secure your user account",
            "TextBody": "We noticed suspicious sign-in activity by {username} from {city}, {country} at {login-time}. If this was not you, reset your password."
         },
         "ReplyTo": "admin@example.com",
         "SourceArn": "arn:aws:ses:us-west-2:123456789012:identity/admin@example.com"
      }
   },
   "ClientId": "1example23456789",
   "CompromisedCredentialsRiskConfiguration": { 
      "Actions": { 
         "EventAction": "BLOCK"
      },
      "EventFilter": [ "SIGN_UP", "SIGN_IN", "PASSWORD_CHANGE" ]
   },
   "RiskExceptionConfiguration": { 
      "BlockedIPRangeList": [ "192.0.2.1/32","192.0.2.2/32" ],
      "SkippedIPRangeList": [ "192.0.2.3/32","192.0.2.4/32" ]
   },
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------