本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Amazon WAF 保护 API
Amazon WAF 是一个 Web 应用程序防火墙,可帮助保护 Web 应用程序和 API 免受攻击。通过它,您可以配置一组规则,称为 Web 访问控制列表,即 Web ACL,基于可自定义的 Web 安全规则以及您定义的条件,允许、阻止或监视(计数)Web 请求。将Amazon AppSync API 与集成后Amazon WAF,您可以更好地控制和查看 API 接受的 HTTP 流量。要了解更多信息Amazon WAF,请参阅《Amazon WAF开发者指南》中的 “Amazon WAF工作原理”。
您可以使用Amazon WAF保护 AppSync API API API API API 漏洞攻击,例如 SQL 注入和跨站点脚本 (XSS) 攻击。这些威胁可能会影响 API 的可用性和性能、损害安全性或消耗过多的资源。例如,您可以创建规则以允许或阻止以下请求:来自指定 IP 地址范围的请求;来自 CIDR 块的请求;源自特定国家/地区或区域的请求;包含恶意 SQL 代码的请求;或者包含恶意脚本的请求。
您还可以创建与 HTTP 标头、方法、查询字符串、URI 和请求正文中的指定字符串或正则表达式模式匹配的规则(限制为前 8 KB)。此外,您可以创建规则来阻止来自特定用户代理、恶意机器人和内容抓取程序的攻击。例如,您可以使用基于速率的规则来指定每个客户端 IP 在尾随的、不断更新的 5 分钟期间内允许的 Web 请求数。
要详细了解支持的规则类型和其他Amazon WAF功能,请参阅Amazon WAF开发者指南和 Amazon WAFAPI 参考。
Amazon WAF 是抵御 Web 漏洞攻击的第一道防线。在 API 上启Amazon WAF用时,会先评估Amazon WAF规则,然后再评估其他访问控制功能,例如 API 密钥授权、IAM 策略、OIDC 令牌和 Amazon Cognito 用户池。
将 AppSync API 集成到Amazon WAF
您可以Amazon WAF使用Amazon Web Services Management Console、、或任何其他兼容客户端将 Appsync API 与集成。Amazon CLIAmazon CloudFormation
将Amazon AppSync API 集成到Amazon WAF
-
创建Amazon WAF Web ACL。有关使用Amazon WAF控制台
的详细步骤,请参阅创建 Web ACL。 -
为 Web ACL 定义规则。一条或多条规则是在创建 Web ACL 的过程中定义的。有关如何构造规则的信息,请参阅Amazon WAF规则。有关您可以为Amazon AppSync API 定义的有用规则的示例,请参阅为 Web ACL 创建规则。
-
将 Web ACL 与Amazon AppSync API 关联。您可以在Amazon WAF控制台或控制台
中执行AppSync 此步骤。 -
要在Amazon WAF控制台中将 Web ACL 与某个Amazon AppSync API 关联,请按照《Amazon WAF开发人员指南》中有关将 Web ACL 与Amazon资源关联或解除关联的说明进行操作。
-
在Amazon AppSync控制台中将 Web ACL 与某Amazon AppSync个 API 关联
-
登录Amazon Web Services Management Console并打开AppSync 控制台
。 -
选择要与 Web ACL 关联到 API ACL 的 API。
-
在导航窗格中,选择 Settings (设置)。
-
在 Web 应用程序防火墙部分中,打开 “启用”Amazon WAF。
-
在 Web ACL 下拉列表中,选择要与您的 API 关联的 Web ACL 的名称。
-
选择 Save 以将 Web ACL 与您的 API 关联。
-
-
在Amazon WAF控制台中创建 Web ACL 后,可能需要几分钟才能使用新的 Web ACL。如果您在 Web 应用程序防火墙菜单中没有看到新创建的 Web ACL,请等待几分钟,然后重试将 Web ACL 与您的 API 关联的步骤。
将 Web ACL 与Amazon AppSync API 关联后,您将使用Amazon WAF API 管理该 Web ACL。除非您想将 Web ACL 与其他 Web ACL 关联,否则无需将 Web ACL 与您Amazon AppSync的 API 重新关联。Amazon AppSync
为 Web ACL 创建规则
规则定义了如何检查 Web 请求以及当 Web 请求符合检查标准时该怎么做。规则不独立存在。Amazon WAF您可以在规则组或定义规则的 Web ACL 中按名称访问规则。有关更多信息,请参阅Amazon WAF规则。以下示例演示如何定义和关联对保护 AppSync API 有用的规则。
例 限制请求正文大小的 Web ACL 规则
以下是限制请求正文大小的规则示例。在Amazon WAF控制台中创建 Web ACL 时,会将其输入到规则 JSON 编辑器中。
{ "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 } }
使用前面的示例规则创建 Web ACL 后,必须将其与您的 AppSync API 关联。除了使用之外Amazon Web Services Management Console,您还可以在中Amazon CLI通过运行以下命令来执行此步骤。
aws waf associate-web-acl --web-acl-id
waf-web-acl-arn
--resource-arnappsync-api-arn
更改可能需要几分钟才能传播,但是运行此命令后,包含大于 1024 字节正文的请求将被拒绝Amazon AppSync。
在Amazon WAF控制台中创建新的 Web ACL 后,可能需要几分钟才能将 Web ACL 与 API 关联。如果您运行 CLI 命令后WAFUnavailableEntityException
出现错误,请等待几分钟,然后重试运行该命令。
例 Web ACL 规则可限制来自单个 IP 地址的请求
以下是在 5 分钟内将 AppSync API 限制为来自单个 IP 地址的 100 个请求的规则示例。在Amazon WAF控制台中使用基于速率的规则创建 Web ACL 时,会将其输入到规则 JSON 编辑器中。
{ "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-arnappsync-api-arn
例 防止 GraphQL __schema 对 API 进行自省查询的 Web ACL 规则
以下是防止 GraphQL __schema 对 API 进行自省查询的规则示例。任何包含字符串 “__schema” 的 HTTP 正文都将被阻止。在Amazon WAF控制台中创建 Web ACL 时,会将其输入到规则 JSON 编辑器中。
{ "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-arnappsync-api-arn