4

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

我应该采取任何进一步的步骤来保护容器免受恶意用户的侵害吗?是否有人会因请求超载应用程序,超过容器的免费调用限制(导致我自己被计费)?我主要只是想确保我永远不会为 Cloud Run 应用程序付费,因为它只是为有限数量的用户充当一个小型帮助工具。

谢谢。

4

2 回答 2

3

您有 2 个解决方案

  • 内置的解决方案是设置一个maxInstance 参数来限制生成实例的数量并降低成本。但是,恶意攻击者可以通过可持续流量拒绝您的服务(没有足够的实例来服务所有请求,无论好坏!)
  • 添加 API 管理层,例如 Cloud Endpoint 或 Apigee。但这是实施和支付的附加层。Cloud Endpoint 是免费的,但意味着拥有用于执行配额限制的 API 密钥。我不太了解 Apigee,但它是一个企业级(和定价)解决方案,我确信它对 IP 实施了速率限制。
于 2020-01-02T08:42:44.577 回答
2

我应该采取任何进一步的步骤来保护容器免受恶意用户的侵害吗?

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

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

您将在此处找到有关未经身份验证访问的更多信息。

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

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

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

要在 Cloud Run 服务中对最终用户进行身份验证,您可以参考所提供的文档,但总结如下:

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

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

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

最后,正如Kolban所说,您还可以使用Cloud Endpoints来限制每分钟请求的数量和数量,如此处所示这将确保您不会被收取更多的费用。

您将找到可与 Cloud Run 一起使用的其他服务的完整列表,以改善最终用户体验和安全性。

我希望它有所帮助。

于 2020-01-02T09:00:38.533 回答