使用 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 AppSyncAPI 与Amazon WAF,您可以更好地控制和可见 API 接受的 HTTP 流量。了解相关更多信息Amazon WAF,请参阅如何Amazon WAF作品中的Amazon WAF开发人员指南 的第一个版本。

您可以使用Amazon WAF以保护 AppSync API 免受常见的 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 API 与Amazon WAF

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

集成Amazon AppSyncAPI 与Amazon 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 关联。

注意

在Amazon WAF控制台,新的 Web ACL 可能需要过几分钟才能使用。如果在中没有看到新创建的 Web ACLWeb 应用防火墙菜单中,等待几分钟,然后重试将 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 规则

以下是一个规则示例,该规则在 5 分钟内将 AppSync 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

例 Web ACL 规则,用于防止对 API 进行所有 GraphQL 内省查询

以下是阻止对 API 进行所有 GraphQL 内省查询的规则示例。所有内省查询中都存在的字符串 “__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