本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AWS WAF 是 Web 应用程序防火墙。借助 AWS WAF 网络访问控制列表 (Web ACL),您可以保护您的用户池免受对经典托管用户界面和 Amazon Cognito API 服务终端节点的不必要请求的影响。Web ACL 使您可以对用户池响应的所有 HTTPS Web 请求进行精细控制。有关 AWS WAF Web 的更多信息 ACLs,请参阅《AWS WAF 开发人员指南》中的管理和使用 Web 访问控制列表 (Web ACL)。
当您的 AWS WAF Web ACL 与用户池关联时,Amazon Cognito 会将您的用户请求中选定的非机密标头和内容转发到。 AWS WAF AWS WAF 检查请求的内容,将其与您在网页 ACL 中指定的规则进行比较,然后向 Amazon Cognito 返回响应。
关于 AWS WAF 网络 ACLs 和亚马逊 Cognito 的注意事项
-
目前,Web ACL 规则仅适用于向使用托管 UI(经典)品牌版本的用户池域发出的请求。当您设置
ManagedLoginVersion
为2
托管登录或您的品牌版本设置为托管登录时,Amazon Cognito 不会在您的托管登录页面上强制执行规则。要将您的品牌版本更改为与 AWS WAF 网络兼容 ACLs,请执行以下任一操作。此更改会影响您的登录页面的外观和功能。
-
在CreateUserPoolDomain或 UpdateUserPoolDomainAPI 请求中,设置
ManagedLoginVersion
为1
。 -
在 Amazon Cognito 控制台用户池的域名菜单中,编辑您的前缀或经典域,并将托管登录版本设置为托管用户界面(经典)。
有关品牌版本的更多信息,请参阅用户池托管登录。
-
-
您无法将 Web ACL 规则配置为匹配用户池请求中的个人身份信息 (PII),例如用户名、密码、电话号码或电子邮件地址。此数据将不可用 AWS WAF。相反,请将 Web ACL 规则配置为匹配标头、路径和正文中的会话数据,例如 IP 地址、浏览器代理和请求的 API 操作。
-
被阻止的请求 AWS WAF 不计入任何请求类型的请求速率配额。该 AWS WAF 处理程序在 API 级别的限制处理程序之前被调用。
-
当您创建 Web ACL 时,Web ACL 要经过一小段时间才能完全传播并可供 Amazon Cognito 使用。传播时间可以从几秒钟到几分钟不等。 AWS WAF
WAFUnavailableEntityException
当您尝试在 Web ACL 完全传播之前将其关联时,将返回。 -
您可以将一个 Web ACL 与一个用户池关联。
-
您的请求可能会导致负载超出 AWS WAF 可以检查的负载限制。请参阅AWS WAF 开发者指南中的超大请求组件处理,了解如何配置如何 AWS WAF 处理来自 Amazon Cognito 的超大请求。
-
您无法将使用防 AWS WAF 欺诈控制账户盗用 (ATP) 的网络 ACL 与 Amazon Cognito 用户池相关联。在添加
AWS-AWSManagedRulesATPRuleSet
托管规则组时实施 ATP 功能。在将您的 Web ACL 与用户池关联之前,请确保该 Web ACL 不使用此托管规则组。 -
当你有一个 AWS WAF Web ACL 与用户池相关联,并且你的 Web ACL 中的规则显示了验证码时,这可能会导致经典托管 UI TOTP 注册中出现无法恢复的错误。要创建具有验证码操作且不影响经典托管用户界面 TOTP 的规则,请参阅。为托管登录 TOTP MFA 配置您的 AWS WAF 网页 ACL
AWS WAF 检查对以下端点的请求。
- 经典托管用户界面
-
对 用户池端点和托管登录参考 中所有端点的请求。
- 公有 API 操作
-
您的应用程序向 Amazon Cognito API 发出的不使用 AWS 凭证进行授权的请求。这包括InitiateAuthRespondToAuthChallenge、和 API 操作GetUser。范围内的 API 操作 AWS WAF 不需要使用 AWS 凭据进行身份验证。它们未经身份验证,或者是使用会话字符串或访问令牌授权的。有关更多信息,请参阅 Amazon Cognito 用户池经过身份验证和未经身份验证的 API 操作。
您可以使用以下规则操作在 Web ACL 中配置规则:计数、允许、阻止,或者提供一个验证码以响应符合规则的请求。有关更多信息,请参阅 AWS WAF 开发人员指南 中的 AWS WAF 规则。根据规则操作,您可以自定义 Amazon Cognito 返回给用户的响应。
重要
自定义错误响应的选项取决于您发出 API 请求的方式。
-
您可以自定义经典托管界面请求的错误代码和响应正文。您只能在经典的托管用户界面中提供验证码供用户解析。
-
对于您使用 Amazon Cognito 用户池 API 提出的请求,可以自定义收到阻止响应的请求的响应正文。您也可以指定 400–499 范围内的自定义错误代码。
-
AWS Command Line Interface (AWS CLI) 和向生成区块或验证码响应的请求 AWS SDKs 返回
ForbiddenException
错误。
将 Web ACL 与您的用户池相关联
要在您的用户池中使用网络 ACL,您的 AWS Identity and Access Management (IAM) 委托人必须具有以下 Amazon Cognito 和 AWS WAF 权限。有关 AWS WAF 权限的信息,请参阅《AWS WAF 开发者指南》中的 AWS WAF API 权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowWebACLUserPool",
"Effect": "Allow",
"Action": [
"cognito-idp:ListResourcesForWebACL",
"cognito-idp:GetWebACLForResource",
"cognito-idp:AssociateWebACL"
],
"Resource": [
"arn:aws:cognito-idp:*:123456789012
:userpool/*"
]
},
{
"Sid": "AllowWebACLUserPoolWAFv2",
"Effect": "Allow",
"Action": [
"wafv2:ListResourcesForWebACL",
"wafv2:AssociateWebACL",
"wafv2:DisassociateWebACL",
"wafv2:GetWebACLForResource"
],
"Resource": "arn:aws:wafv2:*:123456789012
:*/webacl/*/*"
},
{
"Sid": "DisassociateWebACL1",
"Effect": "Allow",
"Action": "wafv2:DisassociateWebACL",
"Resource": "*"
},
{
"Sid": "DisassociateWebACL2",
"Effect": "Allow",
"Action": [
"cognito-idp:DisassociateWebACL"
],
"Resource": [
"arn:aws:cognito-idp:*:123456789012
:userpool/*"
]
}
]
}
尽管您必须授予 IAM 权限,但列出的操作仅用于说明权限,不对应于 API 操作。
激活 AWS WAF 您的用户池并关联 Web ACL
-
在导航窗格中,选择 用户池,然后选择要编辑的用户池。
-
在 “安全” 部分中选择该AWS WAF选项卡。
-
选择编辑。
-
选择 “ AWS WAF 与您的用户池一起使用”。
-
选择您已经创建的AWS WAF Web ACL,或者选择在中创建 Web ACL AWS WAF,在中的新 AWS WAF 会话中创建一个 Web ACL AWS Management Console。
-
选择 Save changes(保存更改)。
要以编程方式将 Web ACL 与 AWS Command Line Interface 或 SDK 中的用户池关联,请使用 AWS WAF API AssociateWeb中的 ACL。Amazon Cognito 没有可关联 Web ACL 的单独 API 操作。
测试和记录 AWS WAF 网页 ACLs
当您在 Web ACL 中将规则操作设置为 C ou nt 时, AWS WAF 会将该请求添加到与该规则匹配的请求计数中。要使用您的用户池测试 Web ACL,请将规则操作设置为计数,并考虑与每条规则匹配的请求数量。例如,如果您要设置为阻止操作的规则与您确定为正常用户流量的大量请求相匹配,则您可能需要重新配置规则。有关更多信息,请参阅《AWS WAF 开发人员指南》中的测试和调整您的 AWS WAF 保护。
您还可以配置 AWS WAF 为将请求标头记录到亚马逊 CloudWatch 日志组、亚马逊简单存储服务 (Amazon S3) 存储桶或亚马逊数据 Firehose。您可以通过 x-amzn-cognito-client-id
和 x-amzn-cognito-operation-name
识别您使用用户池 API 发出的 Amazon Cognito 请求。托管的 UI 请求仅包含 x-amzn-cognito-client-id
标头。有关更多信息,请参阅 AWS WAF 开发人员指南 中的记录 Web ACL 流量。
AWS WAF web ACLs 在所有用户池功能计划中都可用。的安全功能 AWS WAF 补充了 Amazon Cognito 威胁防护。您可以在用户池中激活这两项功能。 AWS WAF 对用户池请求的检查单独收费。有关更多信息,请参阅AWS WAF 定价
日志 AWS WAF 请求数据需要按您定位日志的服务收取额外费用。有关更多信息,请参阅 AWS WAF 开发人员指南 中的记录 Web ACL 流量信息的定价。