Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅
中国的 Amazon Web Services 服务入门
(PDF)。
具备威胁防护的高级安全功能
在创建用户池之后,即可使用 Amazon Cognito 控制台中导航菜单中的威胁防护。可以打开威胁防护功能并自定义为响应不同风险而执行的操作。或者,您可以使用审计模式收集与检测到的风险相关的指标,而无需应用任何安全缓解措施。在审计模式下,威胁防护将指标发布到 Amazon CloudWatch。在 Amazon Cognito 生成其第一个事件后,您即可看到指标。请参阅查看威胁防护指标。
威胁防护(此前称为高级安全功能)是一组监控用户池中不必要活动的工具,也是用于自动关闭潜在恶意活动的配置工具。威胁防护为标准和自定义身份验证操作提供了不同的配置选项。例如,在设置了额外安全因素时,您可能想向使用可疑自定义身份验证登录的用户发送通知,而阻止使用基本的用户名和密码身份验证且处于相同风险级别的用户。
威胁防护在增值版功能计划中可用。有关更多信息,请参阅用户池功能计划。
以下用户池选项是威胁防护的组成部分。
- 已泄露的凭证
-
用户将密码重复用于多个用户账户。Amazon Cognito 的已泄露凭证功能可编译公开泄露的用户名和密码数据,并将用户的凭证与泄露的凭证列表进行比较。已泄露凭证的检测还检查常猜测的密码。您可以在用户池中的用户名和密码标准身份验证流程中检查凭证是否泄露。Amazon Cognito 不会在安全远程密码(SRP)或自定义身份验证流程中检测凭证是否泄露。
您可以选择用于提示检查已泄露凭证的用户操作,以及您希望 Amazon Cognito 采取的应对措施。对于登录、注册和密码更改事件,Amazon Cognito 可以禁止登录或允许登录。在这两种情况下,Amazon Cognito 都会生成用户活动日志,您可以在其中找到有关该事件的更多信息。
了解更多
使用凭证遭泄露检测功能
- 自适应身份验证
-
Amazon Cognito 可以查看来自用户登录请求的位置和设备信息,并应用自动响应来保护用户池中的用户账户免受可疑活动的侵害。您可以监控用户活动,并自动响应在用户名密码和 SRP 以及自定义身份验证中检测到的风险级别。
当您激活威胁防护时,Amazon Cognito 会为用户活动分配风险评分。您可以为可疑活动指定自动响应:您可以需要 MFA、禁止登录,或者只记录活动详细信息和风险评分。您还可以自动发送电子邮件,将可疑活动通知用户,以便他们可以重置密码或采取其他自助操作。
了解更多
使用自适应身份验证
- IP 地址允许列表和拒绝列表
-
在全功能模式下使用 Amazon Cognito 威胁防护,您可以创建基于 IP 地址的始终阻止和始终允许例外规则。对于来自始终阻止例外列表中 IP 地址的会话,自适应身份验证不会向其分配风险级别,该会话也无法登录您的用户池。
有关 IP 地址允许列表和阻止列表的需知信息
-
始终阻止和始终允许规则必须使用 CIDR 格式表示,例如 192.0.2.0/24(24 位子网掩码)或 192.0.2.252/32(单个 IP 地址)。
-
如果设备的 IP 地址位于始终阻止 IP 范围内,则无法通过基于 SDK 的应用程序或托管登录应用程序进行注册或登录,但仍可通过第三方 IdP 登录。
-
始终允许和始终阻止列表不会影响令牌刷新。
-
Amazon Cognito 不会对来自始终允许 IP 范围的设备应用自适应身份验证 MFA 规则,但会应用凭证泄露规则。
- 日志导出
-
威胁防护会将用户向您的用户池发起的身份验证请求的详细信息记录到日志中。这些日志包含威胁评估、用户信息以及位置和设备等会话元数据。您可以为这些日志创建外部归档以进行保留和分析。Amazon Cognito 用户池将威胁防护日志导出到 Amazon S3、CloudWatch Logs 和 Amazon Data Firehose。有关更多信息,请参阅查看和导出用户事件历史记录。
了解更多
导出威胁防护用户活动日志
威胁防护的注意事项和限制
不同身份验证流程的威胁防护选项有所不同
Amazon Cognito 通过身份验证流程 USER_PASSWORD_AUTH 和 ADMIN_USER_PASSWORD_AUTH 来支持自适应身份验证和凭证遭泄露检测。您可以仅为 USER_SRP_AUTH 启用自适应身份验证。不能将威胁防护与联合身份验证登录一起使用。
始终阻止的 IP 仍会计入请求配额中
在您的用户池中阻止来自始终阻止例外列表中 IP 地址的请求,可以帮助您的用户池保持在请求速率配额以内。
威胁防护不会应用速率限制
一些恶意流量具有请求量大的特征,例如分布式拒绝服务(DDoS)攻击。Amazon Cognito 对传入流量应用的风险评分是基于单个请求的,并不考虑请求数。在大批量事件中,即便某些请求与大规模攻击无关,它们仍然可能因为应用层的原因而被赋予风险评分,并触发自动化响应。要在用户池中实施容量攻击防御,请添加 Amazon WAF Web ACL。有关更多信息,请参阅将一个 Amazon WAF Web ACL 与一个用户池相关联。
威胁防护不影响 M2M 请求
客户端凭证授予用于未连接到用户账户的机器对机器(M2M)授权。威胁防护仅监控用户池中的用户账户和密码。要在 M2M 活动中实现安全功能,请考虑 Amazon WAF 用于监控请求速率和内容的功能。有关更多信息,请参阅将一个 Amazon WAF Web ACL 与一个用户池相关联。
在用户池中开启威胁防护
- Amazon Cognito user pools console
-
为用户池激活威胁防护
-
转到 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。
-
选择用户池。
-
从列表中选择一个现有用户池,或创建一个用户池。
-
如果尚未激活,从设置菜单中激活增值版功能计划。
-
选择威胁防护菜单,然后选择激活。
-
选择保存更改。
- API
-
通过 CreateUserPool 或 UpdateUserPool API 请求,将功能计划设置为增值版。以下部分示例请求正文将威胁防护设置为全功能模式。有关完整的示例请求,请参阅示例。
"UserPoolAddOns": {
"AdvancedSecurityMode": "ENFORCED"
}
威胁防护是一个总括性术语,指的是一组特征,用于监控用户操作以发现账户盗用的迹象,并自动采取措施来保护受影响的用户账户。当用户使用标准和自定义身份验证流程登录时,您可以对用户应用威胁防护设置。
威胁防护会生成日志,详细说明用户的登录、注销和其他活动。您可以将这些日志导出到第三方系统。有关更多信息,请参阅查看和导出用户事件历史记录。
威胁防护强制执行概念
威胁防护从仅限审计模式开始,在此模式下,用户池会监控用户活动、分配风险级别和生成日志。妥善的做法是,在启用全功能模式之前,在仅限审计模式下运行两周或更长时间。全功能模式包括一组针对检测到的风险活动和密码泄露的自动响应措施。在仅限审计模式下,您可以监控 Amazon Cognito 正在执行的威胁评估。您还可以提供反馈,帮助训练该特征以改进误报和漏报。
您可以在用户池级别配置威胁防护强制执行措施,以覆盖用户池中的所有应用程序客户端,也可以在单个应用程序客户端级别配置威胁防护。应用程序客户端威胁防护配置会覆盖用户池配置。要为应用程序客户端配置威胁防护,请在 Amazon Cognito 控制台中,导航到用户池的应用程序客户端菜单中的应用程序客户端设置。在这里,您可以使用客户端级设置并配置应用程序客户端专有的强制执行。
此外,您可以分别为标准和自定义身份验证类型配置威胁防护。
标准身份验证和自定义身份验证的威胁防护
配置威胁防护的方式取决于您在用户池和应用程序客户端中进行的身份验证类型。以下每种类型的身份验证都可以有自己的强制执行模式和自动响应。
- 标准身份验证
-
标准身份验证是指通过用户名密码流程和托管登录实现的用户登录、注销及密码管理。当用户使用托管登录进行登录或使用以下 API AuthFlow 参数时,Amazon Cognito 威胁防护会监控操作的风险指标:
- InitiateAuth
-
USER_PASSWORD_AUTH、USER_SRP_AUTH。泄露的凭证功能无法在 USER_SRP_AUTH 登录时访问密码,并且不会监控或对这个流程中的事件采取行动。
- AdminInitiateAuth
-
ADMIN_USER_PASSWORD_AUTH、USER_SRP_AUTH。泄露的凭证功能无法在 USER_SRP_AUTH 登录时访问密码,并且不会监控或对这个流程中的事件采取行动。
您可以将标准身份验证的强制执行模式设置为仅限审计或全功能。要禁用标准身份验证的威胁监控,请将威胁防护设置为没有强制执行。
- 自定义身份验证
-
自定义身份验证是使用自定义质询 Lambda 触发器的用户登录。您无法在托管登录中进行自定义身份验证。当用户使用 InitiateAuth 和 AdminInitiateAuth 的 API AuthFlow 参数 CUSTOM_AUTH 登录时,Amazon Cognito 威胁防护会监控操作的风险指标。
您可以将自定义身份验证的强制执行模式设置为仅限审计、全功能或没有强制执行。没有强制执行选项可在不影响其他威胁防护功能的情况下禁用自定义身份验证的威胁监控。
威胁防护先决条件
在开始之前,您需要:
请按照以下说明设置用户池威胁防护。
要在 Amazon Cognito 用户池控制台中为应用程序客户端设置不同的威胁防护配置,请从应用程序客户端菜单中选择应用程序客户端,然后选择使用客户端级设置。
- Amazon Web Services 管理控制台
-
为用户池配置威胁防护
-
转到 Amazon Cognito 控制台。如果出现提示,请输入 Amazon 凭证。
-
选择用户池。
-
从列表中选择一个现有用户池,或创建一个用户池。
-
选择威胁防护菜单,然后选择激活。
-
选择要配置的威胁防护方法:标准身份验证和自定义身份验证。您可以为自定义身份验证和标准身份验证设置不同的强制执行模式,但在全功能模式下,它们共享自动响应的配置。
-
选择编辑。
-
选择强制执行模式。要立即开始对检测到的风险作出响应,请选择全功能并配置针对已泄露凭证和自适应身份验证的自动响应。要收集用户级日志和 CloudWatch 中的信息,请选择仅限审计。
建议在启用操作之前,先将威胁防护保持在审计模式两周。在此期间,Amazon Cognito 可以了解应用程序用户的使用模式,并且您可以提供事件反馈以调整响应。
-
如果您已选择仅限审计,请选择保存更改。如果您已选择全功能:
-
选择是否要进行自定义操作或使用 Cognito 默认设置响应可疑已泄露的凭证。Cognito 默认设置:
-
检测登录、注册和密码更改中的已泄露的凭证。
-
使用禁止登录操作响应已泄露的凭证。
-
如果您为已泄露的凭证选择了自定义操作,请选择 Amazon Cognito 将用于事件检测的用户池操作,以及您希望 Amazon Cognito 执行的已泄露凭证的响应。您可以使用可疑的已泄露凭证进行禁止登录或允许登录。
-
在自适应身份验证下,选择如何响应恶意登录尝试。选择是否要进行自定义操作或使用 Cognito 默认设置响应可疑恶意活动。当您选择 Cognito 默认设置时,Amazon Cognito 会阻止所有风险级别的登录,并且不会通知用户。
-
如果您针对自适应身份验证已选择自定义操作,请根据严重性级别选择 Amazon Cognito 对检测到的风险执行的 自动风险响应操作。当您针对风险级别分配响应时,您无法为较高风险级别分配限制性较小的响应。您可以为风险级别分配以下响应:
-
允许登录 – 不采取任何预防性操作。
-
可选 MFA – 如果用户配置了 MFA,Amazon Cognito 将始终要求用户在登录时提供其它 SMS 或基于时间的一次性密码(TOTP)因素。如果用户没有配置 MFA,他们可以继续正常登录。
-
需要 MFA – 如果用户配置了 MFA,Amazon Cognito 将始终要求用户在登录时提供其它短信或 TOTP 因素。如果用户没有配置 MFA,Amazon Cognito 将提示他们设置 MFA。在您自动要求用户使用 MFA 之前,请在应用程序中配置一种机制来捕获 SMS MFA 的电话号码,或为 TOTP MFA 注册身份验证器应用程序。
-
禁止登录 – 阻止用户登录。
-
通知用户 – 向用户发送电子邮件,其中包含有关 Amazon Cognito 检测到的风险以及您所采取的响应的信息。您可以为发送的消息自定义电子邮件消息模板。
-
如果您在上一步骤中选择了通知用户,您可以自定义电子邮件发送设置和电子邮件消息模板以进行自适应身份验证。
-
在电子邮件配置下,选择您希望用于自适应身份验证的 SES 区域、发件人电子邮件地址、发件人姓名和回复电子邮件地址。有关将用户池电子邮件消息与 Amazon Simple Email Service 集成的更多信息,请参阅 Amazon Cognito 用户池的电子邮件设置。
-
展开电子邮件模板以自定义包含 HTML 和纯文本版本电子邮件消息的自适应身份验证通知。要了解有关电子邮件消息模板的更多信息,请参阅消息模板。
-
展开 IP 地址例外以创建始终允许或者始终阻止的 IPv4 或 IPv6 地址范围列表,这些地址将始终被允许或阻止,而不受威胁防护风险评估的影响。用 CIDR 表示法指定 IP 地址范围(例如,192.168.100.0/24)。
-
选择保存更改。
- API (user pool)
-
要为用户池设置威胁防护配置,请发送包括 UserPoolId 参数但不包括 ClientId 参数的 SetRiskConfiguration API 请求。以下是用户池的一个示例请求正文。此风险配置会根据风险的严重程度执行一系列不断升级的操作,并通知所有风险级别的用户。它对注册操作应用已泄露凭证阻止。
要强制执行此配置,您必须在单独的 CreateUserPool 或 UpdateUserPool API 请求中将 AdvancedSecurityMode 设置为 ENFORCED。有关占位符模板的更多信息(如本例中的 {username}),请参阅 配置 MFA、身份验证、验证和邀请消息。
{
"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 参数和 ClientId 参数的 SetRiskConfiguration API 请求。以下是应用程序客户端的一个示例请求正文。此风险配置比用户池配置更为严格,会阻止高风险条目。该配置还将已泄露的凭证阻止应用于注册、登录和密码重置操作。
要强制执行此配置,您必须在单独的 CreateUserPool 或 UpdateUserPool API 请求中将 AdvancedSecurityMode 设置为 ENFORCED。有关占位符模板的更多信息(如本例中的 {username}),请参阅 配置 MFA、身份验证、验证和邀请消息。
{
"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"
}