Amazon web services 如何使用AWS API网关为CORS飞行前请求设置配额

Amazon web services 如何使用AWS API网关为CORS飞行前请求设置配额,amazon-web-services,cors,aws-api-gateway,Amazon Web Services,Cors,Aws Api Gateway,我正在用AWS Lambda和API网关构建一个无服务器应用程序。为了防止DDOS攻击造成大量的请求,花费了我很多钱,我已经建立了一个带有请求配额的使用计划(例如,每月10K个请求)。这要求调用方将API密钥作为头传递 这似乎工作得很好,但我还需要为此服务启用CORS。为此,我需要允许未经授权的选项请求(“CORS飞行前”请求),因为浏览器不支持在那里发送任何特殊的头。但是,我似乎找不到一种方法来强制执行配额,我又回到了原点:这些请求的数量不受控制可能会花费不可预见的金额。有没有办法排除这种可能

我正在用AWS Lambda和API网关构建一个无服务器应用程序。为了防止DDOS攻击造成大量的请求,花费了我很多钱,我已经建立了一个带有请求配额的使用计划(例如,每月10K个请求)。这要求调用方将API密钥作为头传递


这似乎工作得很好,但我还需要为此服务启用CORS。为此,我需要允许未经授权的选项请求(“CORS飞行前”请求),因为浏览器不支持在那里发送任何特殊的头。但是,我似乎找不到一种方法来强制执行配额,我又回到了原点:这些请求的数量不受控制可能会花费不可预见的金额。有没有办法排除这种可能性?

要对选项请求强制执行配额,请在AWS WAF中创建web ACL,并将其与API网关中的API阶段相关联。在web ACL中添加基于速率的规则,该规则阻止超出指定速率限制的所有选项请求。可以为此专门配置web ACL中的规则,如下所示:


有关整个过程的屏幕截图指导教程,请参阅。

您不会为任何未经授权的API网关调用付费。 AWS正在收取这笔费用。 只有在请求未超出您的使用计划的情况下,您才会在请求授权后付款

因此,如果有人在未经验证的情况下对您的API进行DDOS攻击,则是免费的

如果有人使用有效的api密钥进行DDOS攻击,您将只在超出使用计划之前付款

查找更多信息

  • 请求不收取授权和身份验证费用 失败

  • 对需要API键的方法的调用在使用API键时不收费 丢失或无效

  • API网关限制的请求在请求速率降低时不收费 或突发速率超过预先配置的限制

  • 当速率限制或 配额超出了预先配置的限制


因此,请确保在您的API上启用了身份验证,并为所有经过身份验证的请求制定了使用计划。

非常感谢您的广泛响应。不过,这仍然无法阻止分布式DOS攻击。“我想没有办法阻止吗?”Gunnar说有一百万个机器人攻击你的API。如果您能够检测到DDoS攻击正在进行,您会关闭所有人的整个API,还是尝试阻止坏的参与者?显然,您不想仅仅因为一些坏角色决定破坏您的API而阻止合法客户。因此,阻止DDoS攻击的唯一方法是阻止来自各个IP的流量。AWS自己的自动化WAF解决方案也是这样做的。啊,这是一个很好的问题,我应该更清楚地说明我的用例。这是一个个人项目,所以在我的情况下,我真的宁愿关闭所有人的服务,一旦达到给定的支出水平。由于没有办法像那样限制开支,我研究了限制请求,我认为一个使用计划会让我达到目的,但后来我注意到了选项的漏洞。看起来WAF已经接近我想要的了。@Gunnar您可以创建一个特定于API网关的AWS预算。让该预算向SNS主题发送通知。订阅此SNS主题的Lambda函数。通过将API的阶段方法节流限制设置为0,从此Lambda函数关闭API。有关实施整个流程的详细分步指南,请参阅。这听起来是一种可行的方法。非常感谢您,非常感谢您的广泛回复。有人可以连续向API发送无限数量的HTTP选项请求。CORS要求选项应不受保护,即不进行授权和授权。因此,当API网关返回HTTP 200的stock/mock响应时,期权请求将被计费,每个传入的期权请求都带有CORS头!你好,哈里什。Cors未经认证,这是真的。但您不需要配置独立的CORS路由。请参阅“AmazonAPI网关开发人员指南PDF”中的“为HTTP API配置CORS”。通过启用cors API,网关将响应cors请求,并且只有在用户稍后经过身份验证时,您才会付款。通过添加manuell选项路由而不进行身份验证,您可以实现类似的行为,但我认为在这种情况下,您需要为请求付费。您仍然可以通过使用计划来防止成本过高。但是,在不使用manuell路由的情况下启用cors会更好。没有提到对API网关的飞行前请求是免费的还是收费的。顺便说一句,这与使用模拟后端手动添加选项方法相同。API网关在您通过它启用CORS时也会这样做,如图所示。“通过启用CORS,API网关将响应CORS请求,并且只有在用户稍后经过身份验证时,您才会付款”-@DominikHelps,您对此是否有权威来源,或者这是您的解释?我希望如此,但不幸的是没有明确的记录。@DominikHelps我100%同意这是非常可取的,但在官方文件中没有明确的指示,这只是我们的一个美好希望:)