使用 Amazon WAF 保护 API - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

使用 Amazon WAF 保护 API

Amazon WAF 是一个 Web 应用程序防火墙,可帮助保护 Web 应用程序和 API 免受攻击。通过它,您可以配置一组规则(称为 Web 访问控制列表,即 Web ACL),基于可自定义的 Web 安全规则以及您定义的条件,允许、阻止或计数 Web 请求。有关更多信息,请参阅 Amazon WAF 的工作原理

您可以使用 Amazon WAF 保护 API Gateway API 免受常见的 Web 漏洞攻击,例如 SQL 注入和跨站点脚本 (XSS) 攻击。这些威胁可能会影响 API 的可用性和性能、损害安全性或消耗过多的资源。例如,您可以创建规则以允许或阻止以下请求:来自指定 IP 地址范围的请求;来自 CIDR 块的请求;源自特定国家/地区或区域的请求;包含恶意 SQL 代码的请求;或者包含恶意脚本的请求。

您还可以创建与 HTTP 标头、方法、查询字符串、URI 和请求正文中的指定字符串或正则表达式模式匹配的规则(限制为前 8 KB)。此外,您可以创建规则来阻止来自特定用户代理、恶意机器人和内容抓取程序的攻击。例如,您可以使用基于速率的规则来指定每个客户端 IP 在尾随的、不断更新的 5 分钟期间内允许的 Web 请求数。

重要

Amazon WAF 是抵御 Web 漏洞攻击的第一道防线。在 API 上启用 Amazon WAF 时,会先评估 Amazon WAF 规则,然后再评估其他访问控制功能,例如资源策略IAM 策略Lambda 授权方Amazon Cognito 授权方。例如,如果 Amazon WAF 阻止从资源策略允许的 CIDR 块进行访问,Amazon WAF 将优先进行并且不评估资源策略。

要为 API 启用 Amazon WAF,您需要执行以下操作:

  1. 使用 Amazon WAF 控制台、Amazon开发工具包或 CLI 创建一个区域性 Web ACL,其中包含 Amazon WAF 托管规则和您自己的自定义规则的所需组合。有关更多信息,请参阅开始使用 Amazon WAF创建并配置 Web 访问控制列表 (Web ACL)

    重要

    API Gateway 需要区域性 Web ACL。

  2. 将 Amazon WAF 区域性 Web ACL 与 API 阶段关联。您可以使用 Amazon WAF 控制台、Amazon开发工具包或 CLI 或使用 API Gateway 控制台、Amazon开发工具包或 CLI 来完成此操作。

使用 API Gateway 控制台将 Amazon WAF 区域 Web ACL 与 API Gateway API 阶段相关联

要使用 API Gateway 控制台将 Amazon WAF 区域 Web ACL 与现有的 API Gateway API 阶段相关联,请按以下步骤操作:

  1. 通过以下网址登录到 Amazon API Gateway 控制台:https://console.aws.amazon.com/apigateway

  2. API 导航窗格中,选择 API,然后选择 Stages (阶段)

  3. Stages (阶段) 窗格中,选择该阶段的名称。

  4. Stage Editor (阶段编辑器) 窗格中,选择设置选项卡。

  5. 要将区域性 Web ACL 与 API 阶段关联,请执行以下步骤:

    1. 在 Amazon WAF Web ACL 下拉列表中,选择要与此阶段关联的区域性 Web ACL。

      注意

      如果您需要的 Web ACL 尚不存在,请选择 Create WebACL (创建 WebACL)。然后选择Go to Amazon WAF (转到 Amazon WAF) 以在新浏览器选项卡中打开 Amazon WAF 控制台并创建区域 Web ACL。然后,返回到 API Gateway 控制台以将 Web ACL 与阶段关联。

  6. 选择 Save Changes

使用 Amazon CLI 将 Amazon WAF 区域 Web ACL 与 API Gateway API 阶段相关联

要使用 Amazon CLI 将 Amazon WAF 区域 Web ACL 与现有的 API Gateway API 阶段相关联,请如以下示例中所示调用 associate-web-acl 命令:

aws waf-regional associate-web-acl \ --web-acl-id 'aabc123a-fb4f-4fc6-becb-2b00831cadcf' \ --resource-arn 'arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod'

使用 Amazon WAF REST API 将 Amazon WAF 区域性 Web ACL 与 API 阶段关联

要使用 Amazon WAF REST API 将 Amazon WAF 区域 Web ACL 与现有的 API Gateway API 阶段相关联,请如以下示例中所示调用 AssociateWebACL 命令:

import boto3 waf = boto3.client('waf-regional') waf.associate_web_acl( WebACLId='aabc123a-fb4f-4fc6-becb-2b00831cadcf', ResourceArn='arn:aws:apigateway:{region}::/restapis/4wk1k4onj3/stages/prod' )