【问题标题】:How to set quota for CORS preflight requests with AWS API Gateway如何使用 AWS API Gateway 为 CORS 预检请求设置配额
【发布时间】:2020-10-25 22:55:09
【问题描述】:

我正在使用 AWS Lambda 和 API Gateway 构建无服务器应用程序。为了防止 DDOS 攻击执行大量请求而花费我很多钱,我设置了一个带有请求配额的使用计划(例如 10K 请求/月)。这需要调用者将 API 密钥作为标头传递。

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

【问题讨论】:

    标签: amazon-web-services cors aws-api-gateway


    【解决方案1】:

    要对 OPTIONS 请求实施配额,请在 AWS WAF 中创建一个 Web ACL 并将其与 API Gateway 中的 API 阶段相关联。在 Web ACL 中添加基于速率的规则,以阻止超出您指定的速率限制的所有 OPTIONS 请求。 Web ACL 中的规则可以专门为此配置,如下所示:

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

    【讨论】:

    • 非常感谢您的广泛回复。不过,这仍然无法阻止分布式 DOS 攻击。我认为没有办法防止这种情况发生?
    • @Gunnar 假设有一百万个机器人攻击你的 API。如果您可以检测到 DDoS 攻击正在进行中,您会为所有人关闭整个 API,还是尝试仅阻止不良行为者?显然,您不希望仅仅因为一些不良行为者决定对您的 API 造成严重破坏而阻止合法客户。因此,阻止 DDoS 攻击的唯一方法是阻止来自各个 IP 的流量。这正是 AWS 自己的自动化 WAF 解决方案的做法——AWS WAF Security Automations
    • 啊,这是一个很好的问题,我应该更清楚地指定我的用例。这是针对个人项目的,所以在我的情况下,一旦达到给定的支出水平,我确实宁愿为每个人关闭整个服务。由于没有办法限制这样的支出,我研究了限制请求,我认为使用计划可以让我到达那里,但后来我注意到了 OPTIONS 漏洞。似乎 WAF 与我真正想要的一样接近。
    • @Gunnar 您可以创建特定于 API Gateway 的 AWS 预算。让此预算向 SNS 主题发送通知。为该 SNS 主题订阅 Lambda 函数。通过将您的 API 阶段的方法限制限制设置为 0,从此 Lambda 函数关闭您的 API。有关实施整个过程的详细分步指南,请参阅my blog post
    • 这听起来像是一种可行的方法。非常感谢您,非常感谢您的广泛回复。
    【解决方案2】:

    您无需为任何未经授权的 API-Gateway 调用付费。 AWS 正在承担这项费用。 您在请求获得授权后付款,并且只有在它不超过您的使用计划时才付款。

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

    如果有人使用有效的 api 密钥进行 DDOS,您只需在超出使用计划之前付费。

    查找更多信息here

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

    • 使用 API 密钥时调用需要 API 密钥的方法不收费 丢失或无效。

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

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

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

    【讨论】:

    • 有人可能会不断地向 API 发送无限数量的 HTTP OPTIONS 请求。 CORS 要求 OPTIONS 应该不受保护,即没有 authN 和 authZ。因此,OPTIONS 请求将被计费,因为 API 网关会为每个传入的 OPTIONS 请求返回带有 CORS 标头的 HTTP 200 的 stock/mock 响应!
    • 嗨,哈里什。 Cors 未经过身份验证,这是真的。但是您不需要配置独立的 CORS Route。请参阅“Amazon API Gateway 开发人员指南 PDF”中的“为 HTTP API 配置 CORS”。通过启用 cors API-Gateway 将响应 CORS 请求,您只需在用户稍后通过身份验证时付费。通过添加不带身份验证的 manuell OPTIONS Route,您可以实现类似的行为,但我认为在这种情况下,您需要为请求付费。您仍然可以通过使用计划来防止高成本。但是仅在没有 manuell 路线的情况下启用 cors 会更好
    • CORS for HTTP API documentation 没有提到对 API 网关的预检请求是免费的还是收费的。顺便说一句,Enabling CORS for a REST API 与使用模拟后端手动添加 OPTIONS 方法相同。当您通过它启用 CORS 时,API Gateway 会执行相同的操作,如 here 所示。
    • “通过启用 cors API-Gateway 将响应 CORS 请求,并且您只有在用户稍后通过身份验证时才需要付费”——@DominikHelps,您是否对此有权威来源,或者这是您的解释?我希望是这样,但不幸的是,它没有明确记录。
    • @DominikHelps 我 100% 同意这将是非常可取的,但在官方文档中没有明确说明,这只是我们的一个很好的希望 :)
    猜你喜欢
    • 2020-11-18
    • 2020-10-25
    • 2018-07-13
    • 2022-01-10
    • 2018-07-20
    • 2018-03-08
    • 2017-09-24
    • 2019-09-24
    • 2021-03-08
    相关资源
    最近更新 更多