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

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

使用 Amazon WAF 保护 API

Amazon WAF 是一个 Web 应用程序防火墙,可帮助保护 Web 应用程序和 API 免受攻击。通过它,您可以配置一组称为 Web 访问控制列表 (Web ACL) 的规则,基于您定义的可自定义 Web 安全规则和条件,允许、阻止或监控(计数)Web 请求。当你整合Amazon AppSync使用 APIAmazon WAF,您可以更好地控制和可见 API 接受的 HTTP 流量。了解相关更多信息Amazon WAF,请参阅怎么样Amazon WAF工作中的Amazon WAF开发人员指南 的第一个版本。

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

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

要了解有关受支持的规则类型和其他规则的更多信息Amazon WAF功能,请参阅Amazon WAF开发人员指南Amazon WAFAPI 参考.

重要

Amazon WAF 是抵御 Web 漏洞攻击的第一道防线。何时Amazon WAF已在 API 上启用,Amazon WAF在评估规则之前,然后再评估其他访问控制功能,例如 API 密钥授权、IAM 策略、OIDC 令牌和 Amazon Cognito 用户池。

将 AppSync 使用 APIAmazon WAF

你可以将 Appsync API 与Amazon WAF使用Amazon Web Services Management Console,Amazon CLI、Amazon CloudFormation,或任何其他兼容的客户端。

将Amazon AppSync使用 APIAmazon WAF

  1. 创建Amazon WAFWeb ACL。有关详细步骤,请使用Amazon WAF控制台,请参阅创建 Web ACL.

  2. 定义 Web ACL 的规则。在创建 Web ACL 的过程中定义了一个或多个规则。有关如何构建规则的信息,请参阅Amazon WAF规则. 有关有用规则的示例,你可以为Amazon AppSyncAPI,请参阅创建 Web ACL 的规则.

  3. 将 Web ACL 与关联Amazon AppSyncAPI。您可以在Amazon WAF控制台或者在AppSync 控制台.

    • 将 Web ACL 与关联Amazon AppSync中的 APIAmazon WAF控制台,请按照以下说明操作将 Web ACL 与关联或取消关联Amazon资源中的Amazon WAF开发人员指南 的第一个版本。

    • 将 Web ACL 与关联Amazon AppSync中的 APIAmazon AppSync控制台

      1. 登录到Amazon Web Services Management Console然后打开AppSync 控制台.

      2. 选择要与 Web ACL 关联的 API。

      3. 在导航窗格中,选择 Settings (设置)

      4. Web 应用防火墙部分,启用启用Amazon WAF.

      5. Web ACL选择要与 API 关联的 Web ACL 的名称。

      6. 选择Save(保存)将 Web ACL 与您的 API 相关联。

注意

在中创建 Web ACL 之后Amazon WAF控制台,可能需要过几分钟才能使用。如果你没有在Web 应用防火墙菜单中,等待几分钟,然后重试将 Web ACL 与 API 关联的步骤。

将 Web ACL 与关联Amazon AppSyncAPI,您将使用Amazon WAFAPI。您无需将 Web ACL 与重新关联Amazon AppSyncAPI 除非你想关联Amazon AppSync具有不同 Web ACL 的 API。

创建 Web ACL 的规则

规则定义了如何检查 Web 请求以及当 Web 请求符合检查标准时该怎么办。规则不存在于Amazon WAF自己。您可以在规则组中或定义该规则的 Web ACL 中按名称访问规则。有关更多信息,请参阅 。Amazon WAF规则. 以下示例演示如何定义和关联有助于保护 AppSync API。

例 用于限制请求正文大小的 Web ACL 规则

以下是限制请求正文大小的规则的示例。这将被输入规则 JSON 编辑器在中创建 Web ACL 时Amazon WAF控制台。

{ "Name": "BodySizeRule", "Priority": 1, "RuleAction": { "Block": {} }, "Statement": { "SizeConstraintStatement": { "ComparisonOperator": "GE", "FieldToMatch": { "Body": {} }, "Size": 1024, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ] } }, "VisibilityConfig": { "CloudWatchMetricsEnabled": true, "MetricName": "BodySizeRule", "SampledRequestsEnabled": true } }

使用上述示例规则创建 Web ACL 之后,必须将其与 AppSync API。作为使用的替代方法Amazon Web Services Management Console,你可以在Amazon CLI通过运行以下命令。

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn

更改可能需要几分钟才能传播,但是运行此命令后,包含大于 1024 字节的主体的请求将被拒绝Amazon AppSync.

注意

在中创建新的 Web ACL 之后Amazon WAF控制台,可能需要过几分钟才能使 Web ACL 与 API 关联。如果你运行 CLI 命令并获得WAFUnavailableEntityException错误,请等待几分钟,然后重试运行命令。

例 用于限制来自单个 IP 地址的请求的 Web ACL 规则

以下是限制 AppSync 在 5 分钟内,通过 API 向来自单个 IP 地址的 100 个请求。这将被输入规则 JSON 编辑器使用基于速率的规则创建 Web ACL 时Amazon WAF控制台。

{ "Name": "Throttle", "Priority": 0, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "Throttle" }, "Statement": { "RateBasedStatement": { "Limit": 100, "AggregateKeyType": "IP" } } }

使用上述示例规则创建 Web ACL 之后,必须将其与 AppSync API。您可以在Amazon CLI通过运行以下命令。

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn

例 用于防止 GraphQL __schema 内省查询 API 的 Web ACL 规则

以下是阻止 GraphQL __schema 内省查询 API 的规则示例。任何包含字符串 “__schema” 的 HTTP 正文都将被阻止。这将被输入规则 JSON 编辑器在中创建 Web ACL 时Amazon WAF控制台。

{ "Name": "BodyRule", "Priority": 5, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "BodyRule" }, "Statement": { "ByteMatchStatement": { "FieldToMatch": { "Body": {} }, "PositionalConstraint": "CONTAINS", "SearchString": "__schema", "TextTransformations": [ { "Type": "NONE", "Priority": 0 } ] } } }

使用上述示例规则创建 Web ACL 之后,必须将其与 AppSync API。您可以在Amazon CLI通过运行以下命令。

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn