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