如何确保您的Google Cloud Run应用程序受到保护,以免请求超载?

时间:2020-01-02 00:02:36

标签: google-cloud-platform google-cloud-run google-cloud-billing

我创建了一个简单的Google Cloud Run帮助程序(不处理任何个人数据,也不使用任何存储工具),并在网站内为其实现了公共界面(使用HTML请求)。我不打算添加任何用户身份验证,并且我还将Cloud Run容器中的代码开源。

我应该采取进一步的措施来保护容器免受恶意用户攻击吗?有人可以让应用程序超载请求,超出容器的免费调用限制(导致我被收费)吗?我主要只是想确保我从不为Cloud Run应用付费,因为它只是为有限数量的用户提供了一个小型帮助工具。

谢谢。

2 个答案:

答案 0 :(得分:2)

您有2个解决方案

  • 内置解决方案是设置maxInstance param来限制生成实例的数量并降低成本。但是,恶意攻击者可以通过可持续的流量拒绝您的服务(没有足够的实例来满足所有请求,无论好坏!)
  • 添加一个API管理层,例如Cloud Endpoint或Apigee。但这是实现和支付的附加层。 Cloud Endpoint is free but implies to have an API key for performing the quotas limitation。我对Apigee知之甚少,但这是一个企业级(和定价)解决方案,并且我确定它对IP实施了速率限制。

答案 1 :(得分:2)

我应该采取进一步的措施来保护容器免受恶意用户攻击吗?

始终,始终必须保护您的应用和服务免受恶意用户的侵害。正如 John Hanley 所指出的那样,如果您不使用任何类型的身份验证,那么与实施某种身份验证相比,您将为更多的恶意攻击/用户敞开大门。

正如他提到的,如果您启用了allow-unauthenticated,则基本上是向公众开放Cloud Run服务。这并不完全不好,但这是恶意用户攻击您的服务的另一种方式。

您将找到有关未经身份验证的访问权限here的更多信息。

如果可能的话,我强烈建议您始终对您的Cloud Run服务进行身份验证。如authentication overview for Cloud Run中所述:

所有Cloud Run服务默认情况下都是私有部署的,这意味着如果不在请求中提供身份验证凭据,则无法访问它们。

此外,默认情况下,服务只能由项目所有者编辑者 Cloud Run管理员和开发人员调用strong>。

要对Cloud Run服务中的最终用户进行身份验证,可以参考提供的documentation,但在摘要中:

大多数应用程序都处理来自最终用户的请求,并且最佳做法是将访问权限限制为仅允许最终用户访问。为此,您可以集成Google登录并为用户授予角色/run.invoker IAM角色,或实施Firebase身份验证,并手动验证其凭据。 / p>

请注意,Cloud Run不能帮助容器实例之间共享会话,因此不能保证与特定容器实例的会话亲和力。

此外,here您将在Cloud Run中找到有关安全提示的更多信息,这些信息可以帮助您改善Cloud Run服务的安全性。

最后,正如 Kolban 所说,您还可以使用 Cloud Endpoints 来限制每分钟请求的数量和数量,如here.所示。将确保您不会再收到您想要的账单。

您会发现complete list of other services可与Cloud Run一起使用,以不仅改善最终用户体验,而且还改善您的安全性。

我希望这会有所帮助。