多项目环境下通过VPN隐藏Cloud Run应用的最佳实践及Shared VPC跨项目访问问题解决
咱们先把你遇到的Shared VPC跨项目访问问题捋顺,再一步步落地“彻底隐藏Cloud Run”的最佳方案——毕竟核心需求是阻断第三方访问,同时保证内部跨项目能正常使用对吧?
一、先解决Shared VPC下父项目主机访问服务项目Cloud Run的问题
这是实现隐藏的基础,先把内部通路打通:
- 配置服务项目Cloud Run的IAM权限:给父项目的主机服务账号(或者父项目的
compute.networkUser角色组)添加Cloud Run的roles/run.invoker权限,确保内部身份能合法调用服务 - 确认VPC Connector的跨项目权限:在共享VPC的主机项目中,给服务项目的VPC Connector服务账号授予
roles/compute.networkUser权限,允许它使用共享VPC的网络资源 - 检查路由和防火墙规则:共享VPC的路由要覆盖父项目主机IP段到服务项目VPC Connector IP范围的通路,同时防火墙要放行这部分内部TCP/HTTP(S)流量
二、核心:彻底阻断第三方访问,仅开放内部/VPN通路
1. 关闭Cloud Run公网匿名访问(必做)
直接在Cloud Run服务设置里禁用Allow unauthenticated invocations,这一步直接把公网匿名访问的口子堵死,只有经过IAM授权的身份才能访问,是隐藏的基础。
2. 全流量走VPC Connector + Shared VPC
- 所有项目的Cloud Run都启用Route all traffic through the VPC Connector,每个服务项目创建自己的VPC Connector并关联到共享VPC的子网
- 在共享VPC中配置路由,把Cloud Run的所有出站/入站流量都导向VPN网关,确保所有流量都走内部/VPN通道,完全脱离公网
3. 用Identity-Aware Proxy (IAP) 做细粒度管控(可选但推荐)
如果需要更精准的访问控制(比如只允许特定VPN用户组访问),可以叠加IAP:
- 把Cloud Run的IAM权限设置为仅允许
roles/iap.httpsResourceAccessor角色调用 - 在IAP中配置访问策略,仅放行来自VPN IP段、内部VPC IP段或者特定内部身份的请求
4. 防火墙和路由加固
- 在共享VPC防火墙上,只放行来自VPN网关IP段、内部VPC IP段的流量到Cloud Run的业务端口,直接拒绝所有其他来源的请求
- 清理所有指向Cloud Run的公网路由,确保没有任何公网通路能触达服务
5. 跨项目权限统一管理
- 在共享VPC的主机项目中创建自定义IAM角色,整合Cloud Run调用、VPC资源访问的必要权限,批量授予需要跨项目访问的用户/服务账号,避免逐个项目重复配置
- 借助组织级IAM政策,统一管控所有项目的Cloud Run访问权限,确保只有内部身份能获取访问权限
三、验证配置有效性
- 在父项目主机上用
curl调用服务项目Cloud Run的域名,确认能正常访问 - 用公网IP尝试访问Cloud Run,应该得到403权限错误,验证公网访问被阻断
- 查看Cloud Run日志,确认所有访问请求都来自内部/VPN IP,没有公网来源的记录
内容的提问来源于stack exchange,提问作者Nikolay Antonov
相关产品推荐
相关产品推荐

