通过VPC连接Cloud Function返回404错误求助排查
Cloud Function仅内部流量模式404问题排查与IP限制方案
问题场景回顾
- 已部署的Cloud Function设置为仅允许内部流量,通过Serverless VPC Access连接至同区域(europe-west1)的VPC子网(10.0.0.0/28,无公网IP)
- VPC防火墙配置为允许0.0.0.0/0所有端口请求
- 本地用
curl触发函数返回404错误,切换为“允许所有流量”则正常访问
核心原因
当Cloud Function设为仅允许内部流量时,仅接受来自以下来源的请求:
- VPC内部的计算资源(如GCE实例)
- 关联的Serverless VPC Access连接器范围内的请求
- Google内部服务请求
本地curl属于公网请求,不符合内部流量准入条件,因此被前端路由拒绝,返回404(并非函数不存在)。
排查与修正步骤
1. 验证Serverless VPC Access连接器配置
- 确认连接器与Cloud Function处于同一区域(必须均为europe-west1)
- 检查连接器是否关联了目标子网(10.0.0.0/28)
- 确保连接器状态为
RUNNING,无异常报错
2. 用内部资源发起测试请求
要验证内部流量访问,需从VPC内部发起请求:
- 在目标子网创建一台GCE虚拟机(因子网无公网IP,可通过
gcloud compute ssh命令借助IAM权限登录,或配置Cloud NAT) - 在GCE实例内执行
curl调用Cloud Function的内部HTTPS URL(格式:https://<function-name>-<project-id-hash>.europe-west1.cloudfunctions.net/<function-endpoint>) - 若使用Cloud Shell测试,需先将Cloud Shell连接至目标VPC子网
3. 细化防火墙规则配置
即使已设置0.0.0.0/0允许所有端口,仍需确认:
- 防火墙规则的目标包含Serverless VPC Access连接器的标签(或设置为“所有实例”)
- 入站规则允许从VPC内部IP段(10.0.0.0/28)及Serverless VPC Access连接器的分配IP段(创建连接器时指定,如10.8.0.0/29)访问443端口(Cloud Function默认用HTTPS)
4. 确认Cloud Function内部流量设置
- 检查函数“连接”配置,确认已选择正确的Serverless VPC Access连接器,且流量限制为仅允许内部流量
- 验证HTTP触发器配置无错误,函数本身可正常运行
实现IP限制且排除服务账号认证的方案
若需限制特定IP访问,同时无需依赖服务账号认证,可采用以下方式:
- 保持Cloud Function流量设置为允许所有流量,通过Cloud Armor配置IP白名单,仅放行指定IP段的请求
- 若坚持使用仅内部流量模式,可在VPC防火墙规则中设置入站限制,仅允许目标IP段(如10.0.0.0/28内的特定IP)访问Cloud Function的443端口
内容的提问来源于stack exchange,提问作者stellenberger
相关产品推荐
相关产品推荐

