将 Amazon WAF Web ACL 与用户池相关联 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

将 Amazon WAF Web ACL 与用户池相关联

Amazon WAF 是一个 Web 应用程序防火墙。使用 Amazon WAF Web 访问控制列表(Web ACL),您可以保护您的用户池免受对托管 UI 和 Amazon Cognito API 服务端点的不必要请求的影响。Web ACL 使您可以对用户池响应的所有 HTTPS Web 请求进行精细控制。有关 Amazon WAF Web ACL 的更多信息,请参阅 Amazon WAF 开发人员指南 中的管理和使用 Web 访问控制列表(web ACL)

当您将 Amazon WAF Web ACL 与用户池关联时,Amazon Cognito 会将来自用户的选定非机密请求标头和内容转发到 Amazon WAF。Amazon WAF 会检查请求的内容,将其与您在 Web ACL 中指定的规则进行比较,然后向 Amazon Cognito 返回响应。

Amazon WAF Web ACL 和 Amazon Cognito 须知信息

  • 被 Amazon WAF 阻止的请求不计入任何请求类型的请求频率限额。对 Amazon WAF 处理程序的调用在 API 级别的节流处理程序之前。

  • 当您创建 Web ACL 时,Web ACL 要经过一小段时间才能完全传播并可供 Amazon Cognito 使用。传播时间可以从几秒钟到几分钟不等。当您尝试在 Web ACL 完全传播之前关联它时,Amazon WAF 返回一个 WAFUnavailableEntityException

  • 您可以将一个 Web ACL 与一个用户池关联。

  • 您的请求可能会导致负载超出 Amazon WAF 可以检查的负载限制。请参阅 Amazon WAF 开发人员指南 中的 超大请求组件处理,了解如何配置 Amazon WAF 处理来自 Amazon Cognito 的超大请求的方式。

  • 您无法将使用 Amazon WAF 欺诈控制账户接管预防(ATP)的 Web ACL 与 Amazon Cognito 用户池关联。在添加 AWS-AWSManagedRulesATPRuleSet 托管规则组时实施 ATP 功能。在将您的 Web ACL 与用户池关联之前,请确保该 Web ACL 不使用此托管规则组。

  • 当您将 Amazon WAF Web ACL 与用户池关联并且 Web ACL 中的规则提供 CAPTCHA 时,这可能会导致托管 UI TOTP 注册中出现不可恢复的错误。要创建具有 CAPTCHA 操作且不影响托管 UI TOTP 的规则,请参阅 为托管 UI TOTP MFA 配置 Amazon WAF Web ACL

Amazon WAF 检查对以下端点的请求。

托管 UI

用户池联合身份验证端点和托管 UI 参考 中所有端点的请求。

公有 API 操作

从您的应用程序向 Amazon Cognito API 发出的请求不使用 Amazon 凭证进行授权。这包括InitiateAuthRespondToAuthChallenge、和 API 操作GetUser。Amazon WAF 范围内的 API 操作不需要使用 Amazon 凭证进行身份验证。它们未经身份验证,或者是使用会话字符串或访问令牌授权的。有关更多信息,请参阅Amazon Cognito 用户池经过身份验证和未经身份验证的 API 操作

您可以使用以下规则操作在 Web ACL 中配置规则:计数允许阻止,或者提供一个验证码以响应符合规则的请求。有关更多信息,请参阅 Amazon WAF 开发人员指南 中的 Amazon WAF 规则。根据规则操作,您可以自定义 Amazon Cognito 返回给用户的响应。

重要

自定义错误响应的选项取决于您发出 API 请求的方式。

  • 您可以自定义托管 UI 请求的错误代码和响应正文。您只能在托管 UI 中为用户提供验证码以解决此问题。

  • 对于您使用 Amazon Cognito 用户池 API 提出的请求,可以自定义收到阻止响应的请求的响应正文。您也可以指定 400–499 范围内的自定义错误代码。

  • Amazon Command Line Interface(Amazon CLI)和 Amazon SDK 返回一个 ForbiddenException 错误,以请求生成阻止验证码响应。

将 Web ACL 与您的用户池相关联

要在您的用户池中使用 Web ACL,Amazon Identity and Access Management(IAM)主体必须拥有以下 Amazon Cognito 权限。有关 Amazon WAF 权限的信息,请参阅 Amazon WAF 开发人员指南 中的 Amazon WAF API 权限

  • cognito-idp:AssociateWebACL

  • cognito-idp:DisassociateWebACL

  • cognito-idp:GetWebACLForResource

  • cognito-idp:ListResourcesForWebACL

尽管您必须授予 IAM 权限,但列出的操作仅用于说明权限,不对应于 API 操作

为您的用户池激活 Amazon WAF 并关联一个 Web ACL

  1. 登录 Amazon Cognito 控制台

  2. 在导航窗格中,选择 用户池,然后选择要编辑的用户池。

  3. 选择用户池属性选项卡。

  4. 选择 Amazon WAF 旁边的编辑

  5. Amazon WAF 下,选择将 Amazon WAF 与用户池结合使用

    
              已选择将 Amazon WAF 与用户池结合使用的 Amazon WAF 对话框的屏幕截图。
  6. 选择一个您已经创建的 Amazon WAF Web ACL,或者选择在 Amazon WAF 中创建 Web ACL,以在Amazon Web Services Management Console的新 Amazon WAF 会话中创建一个 Web ACL。

  7. 选择保存更改

要以编程方式将 Web ACL 与Amazon Command Line Interface或 SDK 中的用户池关联,请使用 Amazon WAF API AssociateWeb中的 ACL。Amazon Cognito 没有可关联 Web ACL 的单独 API 操作。

测试和记录 Amazon WAF Web ACL

当您在 Web ACL 中将规则操作设置为计数时,Amazon WAF 会将请求添加到与规则匹配的请求计数中。要使用您的用户池测试 Web ACL,请将规则操作设置为计数,并考虑与每条规则匹配的请求数量。例如,如果您要设置为阻止操作的规则与您确定为正常用户流量的大量请求相匹配,则您可能需要重新配置规则。有关更多信息,请参阅 Amazon WAF 开发人员指南 中的测试和调整您的 Amazon WAF 保护

您还可以配置Amazon WAF为将请求标头记录到亚马逊 CloudWatch 日志组、亚马逊简单存储服务 (Amazon S3) 存储桶或亚马逊数据 Firehose。您可以通过 x-amzn-cognito-client-idx-amzn-cognito-operation-name 识别您使用用户池 API 发出的 Amazon Cognito 请求。托管的 UI 请求仅包含 x-amzn-cognito-client-id 标头。有关更多信息,请参阅 Amazon WAF 开发人员指南 中的记录 Web ACL 流量

Amazon WAF Web ACL 不受 Amazon Cognito 高级安全功能定价的约束。Amazon WAF 的安全功能可以补充 Amazon Cognito 高级安全功能。您可以在用户池中激活这两项功能。Amazon WAF 对用户池请求的检查单独收费。有关更多信息,请参阅Amazon WAF 定价

记录 Amazon WAF 请求数据将由您的日志的目标服务收取额外费用。有关更多信息,请参阅 Amazon WAF 开发人员指南 中的记录 Web ACL 流量信息的定价