【问题标题】:How to secure REST API endpoints served via GCP Cloud Run?如何保护通过 GCP Cloud Run 提供的 REST API 端点?
【发布时间】:2020-02-17 22:51:31
【问题描述】:

我在 Firebase 中托管了一个简单的网站,它正在对 GCP Cloud Run 中的 REST API 端点进行 AJAX 调用。

我想将这些端点限制为仅来自托管在 Firebase 中的此站点的调用。来自任何其他来源的任何呼叫都不应使用端点。最好的方法是什么?

当我不使用 GCP Cloud Run 时,我在 API 端进行主机检查,以确保请求来自我的客户端,但现在使用 Cloud Run,这是不可能的。还能做什么?

请注意,托管在 Firebase 中的网站非常简单,不进行任何用户身份验证。

【问题讨论】:

  • 最终用户浏览器是否正在为 Internet 上的用户执行对云运行的 REST 调用?例如,用户是否从 Firebase 加载网页,并且该网页包含引用 JavaScript 的 HTML,然后从浏览器向 Cloud Run 发出 Ajax 调用?
  • 没错。通过浏览器,最终用户访问托管在 Firebase 上的 HTML 页面,并且页面上的用户操作(例如:按钮单击)导致 Ajax 调用访问 Cloud Run 中的 api 端点。负责 Ajax 调用的 JavaScript 也托管在 Firebase 上。
  • 你为什么要设置这个约束?如果调用的是用户浏览器,那么任何人都可以轻松更改请求的origin 并绕过您的过滤器。您可能会为此付出太多努力,但没有什么比这更安全的了!
  • 您的浏览器用户是否以任何其他方式进行了身份验证? Oauth或类似的东西?如果不是,那么事情就会变得棘手,因为从 Cloud Run 的角度来看,您的调用者将与任何其他调用者没有区别。

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


【解决方案1】:

挑战:将对 Cloud Run 服务的访问限制为单个 Web 应用程序,而不依赖于:

  • 限制对 Web 应用程序的访问
  • 对用户实施身份验证

此困难并非特定于 Cloud Run。对于由 API 支持的静态站点来说,这是一个普遍的挑战,也是许多站点具有身份验证的原因。正如问题 cmets 中所述,服务器端“主机”检查不是有意义的安全层,因为 HTTP 请求中的所有内容都可以伪造。 我强烈建议您不要担心将您的 API 保密或添加 user authentication 以保持系统简单并负责访问。

如果这不可行,您仍然可以通过创建单个用户、将凭据嵌入站点并定期轮换它们(通过重新部署到 Firebase 托管)来采用身份验证方法,以防止凭据被盗无限期访问您的 API .在中间使用 Firebase Auth 比使用简单的 API 密钥更好,因为它可以防止重放攻击访问您的 API。

【讨论】:

  • 如果您将凭据嵌入到站点中,即使轮换,任何合理的攻击者都会在调用以保持对“受保护”API 的无限访问时将凭据从您的站点中刮掉。 .
  • 同意,这是一种“总比没有好”的方法,各种模糊机制可能使其更难解码。我质疑安全是实际要求。
猜你喜欢
  • 2020-12-28
  • 2019-09-07
  • 2018-06-14
  • 2021-08-29
  • 2017-10-17
  • 2020-11-30
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多