我有一个可公开访问的云功能(firebase 功能),我想在 Google Cloud Armor 的帮助下限制此功能。
然而,这似乎不像我想的那样是一项微不足道的任务,我找不到太多关于设置这样的东西的文档。
本文档准确地说明了我需要什么,但没有提供任何指导来设置云功能。
当我尝试在 GCP 控制台中添加 Cloud Armor 策略时,我什至无法添加目标
我使用的是标准(不是 Managed Protection Plus)计划,但我认为这应该没问题。
我有一个可公开访问的云功能(firebase 功能),我想在 Google Cloud Armor 的帮助下限制此功能。
然而,这似乎不像我想的那样是一项微不足道的任务,我找不到太多关于设置这样的东西的文档。
本文档准确地说明了我需要什么,但没有提供任何指导来设置云功能。
当我尝试在 GCP 控制台中添加 Cloud Armor 策略时,我什至无法添加目标
我使用的是标准(不是 Managed Protection Plus)计划,但我认为这应该没问题。
Cloud Armor 是一个 WAF,Web 应用程序防火墙,用于在 OSI 层的应用程序级别过滤流量。它不是速率限制器或身份验证层。
为此,您需要添加一个 API 管理层,允许您对 API 进行身份验证和速率限制。API Gateway 可以做到这一点,但仅基于 API 密钥。如果用户不使用 API 密钥,则它是一个受速率限制的公共池,垃圾邮件发送者可以通过每次消耗所有配额来创建服务不可用。
APIGee 是另一种解决方案,但它是企业级的(带有企业级计费计划)。
或者,如果是为了保护您的资金,您可以限制函数实例的数量,这要归功于 Kunal Deo 的出色回答。
Cloud Armor 不支持速率限制 Cloud Functions。您应该直接在云函数中使用maxInstances选项。这将允许您控制函数的同时执行。
如果 HTTP 函数扩展到 maxInstances 限制,则新请求将排队 30 秒,然后如果此时没有可用的实例可用,则以 429 Too Many Requests 的响应代码拒绝。
请注意,如果该服务的所有用户使用相同的 API 密钥,之前提供的解决方案(仅 API 网关)将在服务/应用程序级别提供速率限制。单个用户可能会耗尽您的整个报价并阻止其他用户执行功能。
如果您需要按 IP 地址(或类似地址)进行速率限制,您可以:
至少从阅读文档来看,它应该可以工作:
https://cloud.google.com/load-balancing/docs/https/setting-up-https-serverless