Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用 AWS WAF 来保护 Amazon API Gateway API 免遭常见 Web 漏洞的攻击

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

您可以使用 AWS WAF 来保护 API Gateway API 免遭常见 Web 漏洞的攻击,例如 SQL 注入和跨站点脚本 (XSS) 攻击,这些攻击可能会影响 API 可用性、性能和危害安全性或消耗过多的资源。例如,您可以创建规则以允许或阻止以下请求:来自指定 IP 地址范围或 CIDR 块,或者源自特定国家/地区或区域,包含恶意 SQL 代码,或者包含恶意脚本。您还可以创建与 HTTP 标头、方法、查询字符串、URI 和请求正文中的指定字符串或正则表达式模式匹配的规则(限制为前 8 KB)。此外,您可以创建规则来阻止来自特定用户代理、恶意机器人和内容抓取程序的攻击。例如,您可以使用基于速率的规则来指定每个客户端 IP 在尾随的、不断更新的 5 分钟期间内允许的 Web 请求数。

重要

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

要为您的 API 启用 AWS WAF,您需要:

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

    重要

    API Gateway 需要一个区域性 Web ACL。

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

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

要使用 API Gateway 控制台将 AWS WAF 区域性 Web ACL 与现有 API Gateway API 阶段关联,请执行以下步骤:

  1. 通过 https://console.amazonaws.cn/apigateway 登录 API Gateway 控制台。

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

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

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

  5. 要将区域性 Web ACL 与 API 阶段关联:

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

      注意

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

  6. 选择 Save Changes (保存更改)

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

要使用 AWS CLI 将 AWS 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'

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

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

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