如何仅允许Google Cloud Run访问?其所用IP是否有特定范围?
Google Cloud Run 专属IP段说明
Cloud Run 默认运行时没有独立划分的专属公共IP段。
默认配置下,Cloud Run 发起公网请求时会从Google 公共动态IP池中随机选择出口IP,这个IP池是全Google 公共服务、所有GCP客户服务共享的,IP范围持续动态更新,不存在仅分配给Cloud Run服务使用、可直接用于IP白名单配置的专属IP段。
注意:不要尝试直接将全量Google公共IP段加入访问白名单,该IP段覆盖范围包含Google搜索、Gmail、所有GCP用户的服务出口,加白后等同于对全量Google公网出口放开访问权限,安全风险极高。
不配置固定出口IP的访问控制替代方案
以下方案都不需要为Cloud Run配置静态公网IP,即可实现仅允许来自你的Cloud Run服务的请求访问目标资源:
- 服务账号身份鉴权(最推荐)
为发起请求的Cloud Run服务绑定独立的专属服务账号,在目标资源侧配置身份校验逻辑,仅放行携带该服务账号合法身份凭证的请求。如果目标是GCP原生服务(比如Cloud Storage、Cloud Functions、Cloud Run托管的其他服务),可以直接通过IAM权限绑定实现访问控制,不需要额外开发;如果是自建服务或第三方服务,可在Cloud Run请求侧主动在请求头添加Authorization: Bearer <服务账号签发的ID令牌>,目标侧校验令牌的签发主体、受众字段是否匹配,校验通过再放行。 - 预共享密钥签名校验
自行生成一个只有你知晓的预共享密钥,配置到Cloud Run服务的环境变量中。Cloud Run发起请求时,将请求时间戳、请求路径、请求体内容和密钥拼接后生成HMAC签名,放到自定义请求头中传给目标;目标侧收到请求后用相同的密钥重新计算签名,同时校验时间戳是否在5分钟内的有效窗口(避免重放攻击),签名匹配才放行。该方案不依赖云厂商能力,适配所有支持自定义请求校验的目标资源。 - VPC内网通道访问
如果目标资源部署在你的自有VPC网络内(比如GCE实例、私有GKE集群、开启私有访问的云数据库、专线打通的IDC资源),可以为Cloud Run配置无服务器VPC访问连接器,让Cloud Run到目标的请求全程走内网链路,不需要经过公网。目标侧只需要放通VPC连接器对应的内网IP段即可,不需要配置公网白名单,也不会暴露公网攻击面。 - 边缘层溯源规则匹配
如果你的目标资源前端接入了GCP负载均衡、Cloud Armor边缘防护能力,可以配置防护规则匹配Google官方注入的请求溯源元数据,识别来自你名下Cloud Run服务的请求并放行。该方案需要严格配置规则匹配条件,避免被伪造的请求头绕过。
补充说明:如果目标资源是第三方公网服务,且不支持自定义鉴权、自定义请求头校验逻辑,那么没有其他绕开固定出口IP的方案,必须通过Cloud NAT+静态IP、Cloud Run固定出口IP配置的方式实现IP白名单放行。
内容的提问来源于stack exchange,提问作者suzuki
相关产品推荐
相关产品推荐

