将 Cloud Armor 与 Cloud Run 结合使用并避免绕过

Posted

技术标签:

【中文标题】将 Cloud Armor 与 Cloud Run 结合使用并避免绕过【英文标题】:Use Cloud Armor with Cloud Run and avoid bypass 【发布时间】:2021-04-13 09:35:48 【问题描述】:

引用https://cloud.google.com/load-balancing/docs/https/setting-up-https-serverless#enabling

虽然可以使用 Cloud Run(全托管)、Cloud Functions 和 App Engine 后端为后端服务配置 Google Cloud Armor,但此功能存在一定的限制,尤其是对于 Cloud Run(全托管)和 App Engine。有权访问 Google Cloud 分配给这些服务的默认 URL 的用户可以绕过负载平衡器并直接访问服务 URL,从而绕过任何已配置的 Google Cloud Armor 安全策略。

避免攻击者以 Cloud Run URL (*.run.app) 为目标绕过 Cloud Armor 的最佳方法是什么?

通常我会让 Cloud Run 只能由服务帐户调用,但 Cloud Load Balancer 不能使用服务帐户来调用 Cloud Run。另一种方法是将 Cloud Load Balancer 配置为在标头中使用令牌,并将在 Cloud Run 中运行的应用配置为仅接受具有正确标头/令牌的调用,但我不希望在应用中这样做。

【问题讨论】:

【参考方案1】:

您应该将服务的入口限制为“内部和负载平衡”,以禁用来自默认域的访问,并且只允许来自 Cloud Armor 的流量:

gcloud beta run services update SERVICE --ingress internal-and-cloud-load-balancing

【讨论】:

谢谢,最好更新 cloud.google.com/load-balancing/docs/https/… 文档,指定您现在可以(尽管处于 Beta 版)配置 Cloud Run 入口。我还注意到,这似乎在 google-beta Terraform 提供程序中不可用。

以上是关于将 Cloud Armor 与 Cloud Run 结合使用并避免绕过的主要内容,如果未能解决你的问题,请参考以下文章

Google Cloud Run 与本地机器相比非常慢

Google Cloud FUSE 与 Cloud Run [Errno 5] 输入/输出错误:'/database' 但已授予存储对象管理员访问权限

Cloud Run 完成,但 Cloud Scheduler 认为该作业已失败

如何为 Cloud Build 用于 Cloud Run 部署的 Cloud Storage 存储分区指定区域?

Google Cloud Tasks 无法向 Cloud Run 进行身份验证

与 GKE 中的普通服务相比,运行 Cloud Run 的价值主张是啥?