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

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

Amazon WAF 用来保护你的 Amazon AppSync APIs

Amazon WAF 是一种 Web 应用程序防火墙,可帮助保护 Web 应用程序和APIs免受攻击。它允许您配置一组名为 Web 访问控制列表 (WebACL) 的规则,这些规则根据您定义的可自定义 Web 安全规则和条件允许、阻止或监控(计数)Web 请求。当你 Amazon AppSync API与整合时 Amazon WAF,你可以更好地控制和了解你所接受的HTTP流量API。要了解更多信息 Amazon WAF,请参阅《 Amazon WAF 开发者指南》中的Amazon WAF 工作原理

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

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

要详细了解支持的规则类型和其他 Amazon WAF 功能,请参阅Amazon WAF 开发者指南Amazon WAF API参考资料

重要

Amazon WAF 是您抵御网络漏洞的第一道防线。在上 Amazon WAF 启用后API,将在其他访问控制功能(例如API密钥授权、IAM策略、OIDC令牌和 Amazon Cognito 用户池)之前评估 Amazon WAF 规则。

与之 AppSync API集成 Amazon WAF

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

要 Amazon AppSync API与之集成 Amazon WAF
  1. 创建 Amazon WAF 网站ACL。有关使用Amazon WAF 控制台的详细步骤,请参阅创建网站ACL

  2. 定义网络规则ACL。一条或多条规则是在创建网络的过程中定义的ACL。有关如何构建规则的信息,请参阅 Amazon WAF rules。有关您可以为自己定义的有用规则的示例 Amazon AppSync API,请参阅为 Web 创建规则 ACL

  3. 将网站ACL与 Amazon AppSync API. 您可以在Amazon WAF 控制台或控制台中执行AppSync 此步骤。

    • 要在 Amazon WAF 控制台 Amazon AppSync API中将网页ACL与资源相关联,请按照开发者指南中有关将网页ACL与 Amazon 资源关联或取消关联的说明进行操作。 Amazon WAF

    • 在 Amazon AppSync 控制台 Amazon AppSync API中将 Web ACL 与关联

      1. 登录 Amazon Web Services Management Console 并打开AppSync 控制台

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

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

      4. Web 应用程序防火墙部分中,开启启用 Amazon WAF

      5. Web ACL 下拉列表中,选择ACL要与您的网站关联的网站名称API。

      6. 选择 “保存” 以将网页ACL与您的关联API。

注意

在 Amazon WAF 控制台ACL中创建网页后,可能需要几分钟才能使用新的网页ACL。如果您在 Web 应用程序防火墙菜单ACL中看不到新创建的 Web,请等待几分钟,然后重试将该 Web ACL 与您的API网站关联的步骤。

注意

Amazon WAF 集成仅支持实时端点Subscription registration message的事件。 Amazon AppSync 将以错误消息而不是任何Subscription registration message被屏蔽的start_ack消息进行响应 Amazon WAF。

将网站ACL与关联后 Amazon AppSync API,您将ACL使用管理网站 Amazon WAF APIs。除非您想将网站ACL与其他网站关联, Amazon AppSync API否则无需将该网站 Amazon AppSync API与您的网站ACL重新关联。

为 Web 创建规则 ACL

规则定义如何检查 Web 请求以及在 Web 请求符合检查条件时执行的操作。规则本身并不存在。 Amazon WAF 您可以在规则组或定义规则的 Web ACL 中按名称访问规则。有关更多信息,请参阅 Amazon WAF rules。以下示例演示如何定义和关联对保护有用的规则 AppSync API。

例 限制请求正文大小的网络ACL规则

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

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

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拒绝。

注意

在 Amazon WAF 控制台ACL中创建新网站后,可能需要几分钟ACL才能将该网页与相关联API。如果您运行CLI命令但WAFUnavailableEntityException出现错误,请等待几分钟,然后重试运行该命令。

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

以下是限制来自单个 IP 地址的 a AppSync API 到 100 个请求的规则示例。在 Amazon WAF 控制台中创建ACL带有基于费率的规则的网站时,将在规则JSON编辑器中输入该信息。

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

ACL使用前面的示例规则创建网站后,必须将其与您的网站相关联 AppSync API。您可以 Amazon CLI 通过运行以下命令在中执行此步骤。

aws waf associate-web-acl --web-acl-id waf-web-acl-arn --resource-arn appsync-api-arn
例 防止 GraphQL __schema 内省查询的网络ACL规则 API

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

{ "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 } ] } } }

ACL使用前面的示例规则创建网站后,必须将其与您的网站相关联 AppSync API。您可以 Amazon CLI 通过运行以下命令在中执行此步骤。

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