0

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

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

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

当我尝试在 GCP 控制台中添加 Cloud Armor 策略时,我什至无法添加目标 在此处输入图像描述

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

4

3 回答 3

2

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

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

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


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

于 2021-12-02T15:41:58.027 回答
1

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

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

于 2021-12-02T14:19:49.227 回答
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

于 2021-12-05T12:44:53.360 回答