【问题标题】:How to rate limit a firebase function with Cloud Armor如何使用 Cloud Armor 对 Firebase 功能进行速率限制
【发布时间】:2022-01-08 22:06:39
【问题描述】:

我有一个可公开访问的云功能(firebase 功能),我想在 Google Cloud Armor 的帮助下对该功能进行速率限制。

但是,这似乎不像我想的那样是一项微不足道的任务,我找不到太多关于设置这样的东西的文档。

这个document 准确地说明了我需要什么,但没有提供任何指导来为云功能设置它。

当我尝试在 GCP 控制台中添加 Cloud Armor 策略时,我什至无法添加目标

我使用的是标准(不是 Managed Protection Plus)计划,但我认为这应该没问题。

【问题讨论】:

    标签: google-cloud-functions rate-limiting google-cloud-armor


    【解决方案1】:

    请注意,如果来自该服务的所有用户使用相同的 API 密钥,则之前提供的解决方案(仅 API 网关)将在服务/应用程序级别提供速率限制。单个用户可能会耗尽您的整个报价并阻止其他用户执行函数。

    如果您需要通过 IP 地址(或类似地址)进行速率限制,您可以:

    1. 将您的函数设为私有(对 allUsers 或 allAuthenticatedUsers 没有调用权限,仅对服务帐户)。如果您愿意,可以在函数前面放置一个 API 网关。
    2. 在您的函数(无服务器 NEG)或 API 网关前使用负载均衡器。 LB 必须具有使用服务帐户的调用权限
    3. 添加 Cloud Armor 以保护负载均衡器并对其进行速率限制。

    至少从阅读文档来看,它应该可以工作:

    https://cloud.google.com/load-balancing/docs/https/setting-up-https-serverless

    https://cloud.google.com/armor/docs/rate-limiting-overview

    【讨论】:

      【解决方案2】:

      Cloud Armor 是一个 WAF,即 Web 应用程序防火墙,用于在 OSI 层的应用程序级别过滤流量。它不是速率限制器或身份验证层。

      为此,您需要添加一个 API 管理层,允许您对 API 进行身份验证和速率限制。 API Gateway 可以做到这一点,但仅基于 API 密钥。如果用户不使用 API 密钥,则它是一个受速率限制的公共池,垃圾邮件发送者可以通过每次消耗所有配额来造成服务不可用。

      APIGee 是另一种解决方案,但它是企业级(带有企业级计费计划)。


      或者,如果是为了保护您的资金,您可以限制函数实例的数量,这要感谢 Kunal Deo 的出色回答。

      【讨论】:

      • 谢谢,我想我在我的云功能前面使用了一个 API 网关
      • 我用 Cloud Endpoint 和 ESPv2 写了一篇文章。 Api Gateway 是一个托管解决方案!这是相同的原理,简单的不同 API 调用来部署相同的 swagger 定义。 medium.com/google-cloud/…
      【解决方案3】:

      Cloud Armor 不支持限制速率的云函数。您应该直接在云函数中使用 maxInstances 选项。这将允许您控制函数的同时执行。

      如果 HTTP 函数扩展到 maxInstances 限制,则新建 请求排队 30 秒,然后以响应拒绝 429 Too Many Requests 的代码,如果此时没有可用的实例。

      【讨论】:

        猜你喜欢
        • 2018-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多