google-cloud-platform - 安全的 Cloud Run 服务仅接受来自浏览器中域的请求(而不是 Postman / shell 脚本)
问题描述
我们已经完成了身份验证概述,但它没有回答我们的问题,因此请在此处联系专家。
我们的 Web 应用程序一旦加载到浏览器上,用户就会向 Cloud Run 上的服务发出请求。我们希望保护我们的后端服务,以便只有我们的域可以访问它,而不是某些使用 Postman 的用户,或用于访问/更新数据的 shell 脚本。
最终用户访问权限
由于用户不必始终登录,我们希望 Cloud Run 响应请求,即使不存在身份验证令牌。这为我们消除了最终用户对服务选项的访问权限。
服务到服务身份验证:
因为发出请求的是浏览器,而不是我们 GCP 平台中的其他服务,所以即使这个选项对我们也不起作用。
我们后端的用户数据是安全的,因为这些端点需要 Auth 令牌,但是,不需要 auth 令牌的页面是不安全的,并且可能容易受到 DDOS 或 bot/scraping 攻击。
我们如何保护我们的 Cloud Run 服务,以便只响应来自我们 Web 应用程序的调用而不响应其他调用?
解决方案
您不能确定 Web 应用程序是请求的发送者。实际上,在 Web 环境中,您在客户端发送代码。从这里,用户(好或坏)可以进入您的代码并了解它是如何工作的,请求的标头是什么,这些标头是如何构建的,......
复杂、低效的事情可想而知……也许,最好的办法是插入一个 API 网关,为用户进行速率限制。像这样,即使用户使用自动化的东西,他们也会受到限制。我写了一篇关于 Cloud Endpoint Rate limit 的文章。不确定这是否是最好的产品,也许Apigee可以更好地满足您的要求。
编辑
我想在第一段中说的是“Cloud Run 和任何其他 Web 技术都不可能”。
推荐阅读
- c++ - 当使用 std::cin 输入结构时,它会出错
- python - python如何访问作为第二个参数传递给execl的进程名称
- sql - SQL:如何限制查询一条记录?
- php - 当我有两个数组(其中一个具有属性中的所有数据)ac时,如何在php laravel中与groupBy合并
- android - 如何在 Realm.open 函数中调用 Await 函数?
- r - Kernel Density Estimation - 将图例比例更改为每平方米的密度
- c - 程序的进程图清楚地显示了从创建到终止的父进程和子进程执行
- android - 使用 MaterialToolbar 在 AppBarLayout 中居中标题
- oracle - 重置重做日志文件后 Oracle Apex 不工作
- php - Composer 自动加载 - 文件选项和 packagegist