本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
将 AWS WAF Web ACL 与用户池关联
AWS WAF 是 Web 应用程序防火墙。借助 AWS WAF Web 访问控制列表 (WebACL),您可以保护您的用户池免受对托管用户界面和 Amazon Cognito API 服务终端节点的不必要请求的影响。Web ACL 可让您精细控制用户池响应的所有HTTPS网络请求。有关 AWS WAF Web 的更多信息ACLs,请参阅《AWS WAF 开发人员指南》中的管理和使用 Web 访问控制列表 (WebACL)。
当您的 AWS WAF 网站ACL与用户池关联时,Amazon Cognito 会将您的用户请求中选定的非机密标头和内容转发到。 AWS WAF AWS WAF 检查请求的内容,将其与您在网站中指定的规则进行比较ACL,然后向 Amazon Cognito 返回响应。
关于 AWS WAF 网络ACLs和亚马逊 Cognito 的注意事项
-
被阻止的请求 AWS WAF 不计入任何请求类型的请求速率配额。该 AWS WAF 处理程序在API级别限制处理程序之前被调用。
-
当您创建网站时ACL,经过一小段时间后,网络ACL才会完全传播并可供Amazon Cognito使用。传播时间可以从几秒钟到几分钟不等。 AWS WAF
WAFUnavailableEntityException
当你尝试在网络完全传播ACL之前将其关联时,会返回 a。 -
您可以将一个 Web ACL 与一个用户池相关联。
-
您的请求可能会导致负载超出 AWS WAF 可以检查的负载限制。请参阅AWS WAF 开发者指南中的超大请求组件处理,了解如何配置如何 AWS WAF 处理来自 Amazon Cognito 的超大请求。
-
您无法将使用防 AWS WAF 欺诈控制账户盗用 (ATP) 的网站ACL与 Amazon Cognito 用户池相关联。添加
AWS-AWSManagedRulesATPRuleSet
托管规则组时即可实现该ATP功能。在将其与用户池关联之前,请确保您的网站ACL不使用此托管规则组。 -
当您的 AWS WAF 网站ACL与用户池相关联,并且您的网络中的规则ACL呈现 a 时CAPTCHA,这可能会导致托管用户界面TOTP注册中出现不可恢复的错误。要创建具有CAPTCHA操作且不影响托管界面的规则TOTP,请参阅ACL为托管 UI 配置您的 AWS WAF 网站 TOTP MFA。
AWS WAF 检查对以下端点的请求。
- 托管 UI
-
对 用户池端点和托管用户界面参考 中所有端点的请求。
- 公共API运营
-
您的应用程序向 Amazon Cognito 发API出的不使用 AWS 凭证进行授权的请求。这包括诸如InitiateAuthRespondToAuthChallenge、和之类的API操作GetUser。范围内的API操作 AWS WAF 不需要使用 AWS 凭据进行身份验证。它们未经身份验证,或者是使用会话字符串或访问令牌授权的。有关更多信息,请参阅 Amazon Cognito 用户池经过身份验证和未经身份验证的操作 API。
您可以使用 “计数”、“允许”、“阻止” 或 “显示规则” 操作来配置 Web ACL CAPTCHA中的规则,以响应与规则匹配的请求。有关更多信息,请参阅 AWS WAF 开发人员指南 中的 AWS WAF 规则。根据规则操作,您可以自定义 Amazon Cognito 返回给用户的响应。
重要
自定义错误响应的选项取决于您提出API请求的方式。
-
您可以自定义托管 UI 请求的错误代码和响应正文。您只能在托管用户界面中呈现一个CAPTCHA供用户解析。
-
对于您通过 Amazon Cognito 用户池发出的请求API,您可以自定义收到屏蔽响应的请求的响应正文。您也可以指定 400–499 范围内的自定义错误代码。
-
AWS Command Line Interface (AWS CLI) 和向生成区块或CAPTCHA响应的请求 AWS SDKs返回
ForbiddenException
错误。
将网站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 您的用户池并关联网站 ACL
-
在导航窗格中,选择 用户池,然后选择要编辑的用户池。
-
选择用户池属性选项卡。
-
选择 AWS WAF 旁边的编辑。
-
在下方 AWS WAF,选择 AWS WAF 与您的用户池一起使用。
-
选择您已经创建ACL的 AWS WAF Web,或者选择 “ACL在中创建网页” AWS WAF,在新的 AWS WAF 会话中创建一个 Web AWS Management Console。
-
选择 Save changes(保存更改)。
要在 AWS Command Line Interface 或中以编程方式将 Web ACL 与您的用户池相关联SDK,请使用 f AssociateWebACLrom。 AWS WAF APIAmazon Cognito 没有单独的API操作来关联网页。ACL
测试和记录 AWS WAF 网页 ACLs
当您在网站中将规则操作设置为 “计数” 时ACL, AWS WAF 会将该请求添加到与该规则匹配的请求计数中。要ACL使用您的用户池测试网站,请将规则操作设置为计数,然后考虑与每条规则匹配的请求量。例如,如果您要设置为阻止操作的规则与您确定为正常用户流量的大量请求相匹配,则您可能需要重新配置规则。有关更多信息,请参阅《AWS WAF 开发者指南》中的测试和调整 AWS WAF 保护措施。
您还可以配置 AWS WAF 为将请求标头记录到亚马逊 CloudWatch 日志组、亚马逊简单存储服务 (Amazon S3) 存储桶或亚马逊数据 Firehose。您可以通过和来识别您向用户池API发出的 Amazon Cognito 请求。x-amzn-cognito-client-id
x-amzn-cognito-operation-name
托管的 UI 请求仅包含 x-amzn-cognito-client-id
标头。有关更多信息,请参阅《AWS WAF 开发者指南》中的记录网络ACL流量。
AWS WAF 网络ACLs不受 Amazon Cognito 高级安全功能定价
日志 AWS WAF 请求数据需要按您定位日志的服务收取额外费用。有关更多信息,请参阅AWS WAF 开发者指南中的记录网络ACL流量信息的定价。