配置负载均衡后,如何屏蔽API网关自动生成URL以保护Cloud Run服务?
屏蔽API网关自动URL,仅允许负载均衡访问Cloud Run服务的方案
核心逻辑
要实现目标,关键是把API网关的入口流量限制为仅来自负载均衡,同时给Cloud Run服务加层防护,确保它只接受API网关的请求(双重保险)。
具体操作步骤
1. 给API网关加访问限制
API网关本身没有直接的IP白名单功能,但可以这么处理:
- 在OpenAPI配置里加IP过滤:在你的API定义的OpenAPI YAML/JSON中,添加自定义校验逻辑,只允许负载均衡的出口IP段访问。比如用
x-google-filter或者在请求处理前加来源IP检查,不符合的直接返回403。 - 用VPC防火墙锁流量:如果负载均衡和API网关在同一个VPC内,配置VPC防火墙规则,只允许负载均衡的内部IP访问API网关的端口,外部请求根本碰不到API网关的自动URL。
2. 加固Cloud Run服务的访问权限
别只盯着API网关,Cloud Run这边也得设防:
- 设置Cloud Run为内部访问:如果负载均衡和Cloud Run在同一VPC,把Cloud Run服务设为仅内部访问,这样只有VPC内的API网关能调用它。
- 用IAM权限控制:给Cloud Run服务配置IAM,只允许API网关的服务账号有调用权限,其他身份一概拒绝。
- 代码层加校验:在Cloud Run的服务代码里,检查请求的
Host头是不是负载均衡的域名,或者检查请求来源是否是API网关的IP段,不符合的直接拒绝。
3. 把Cloud Armor用在负载均衡上
既然Cloud Armor只能绑定负载均衡,那就把所有外部流量都引到负载均衡,在负载均衡上配置Cloud Armor规则(比如IP白名单、防攻击规则),然后让负载均衡把流量转发到API Gateway NEG。这样所有外部请求必须先过负载均衡和Cloud Armor,才能到API网关,最后到Cloud Run,彻底绕不开负载均衡。
重点提醒
API网关的自动生成URL(比如https://xxx-uc.a.run.app)默认是公开可访问的,必须通过上面的步骤把这个入口封死,不然用户直接访问这个URL就能绕过负载均衡,你的安全配置就白做了。
内容的提问来源于stack exchange,提问作者Matias Galdames
相关产品推荐
相关产品推荐

