GCP Cloud Function配置internal-only ingress后同VPC VM访问报403排查
故障排查与解决步骤
1. 先排查基础配置是否符合要求
- 确认VM的网络属性:确认你发起访问的VM是否真的和Cloud Function在同一VPC内,如果VM使用了VPC对等连接、共享VPC,要注意internal-only的ingress规则仅允许来自同一VPC、同一项目内VPC对等连接、或者共享VPC同组织内的流量,跨组织的对等连接流量默认被拦截
- 确认访问使用的域名解析正确:不要用公网解析的Cloud Function域名访问,在VM上执行
nslookup [你的函数域名],如果返回的是公网IP,说明你走的是公网出口访问,自然会被ingress规则拦截,你需要先在VPC内开启Private Google Access,再用VPC内网的Cloud Function端点访问 - 确认函数部署参数生效:执行
gcloud functions describe my_func --region us-east4,检查输出的ingressSettings字段确实为INTERNAL_ONLY,同时httpsTrigger下的allowUnauthenticated为true,排除部署参数未生效的问题
2. 排查VPC Service Controls相关问题
- 首先确认项目是否归属在某个VPC Service Controls服务边界内:在当前项目的Cloud Console中搜索「VPC Service Controls」,查看边界列表,确认是否有边界包含当前项目,同时限制了Cloud Functions API的调用
- 如果确实存在服务边界:
- 检查边界的入站规则,是否允许你VM所在的VPC、VM的IP段作为可信来源访问Cloud Functions服务
- 检查边界的访问级别,是否对VM使用的服务账号授予了访问权限
- 如果你没有权限修改边界配置,需要联系组织的云管理员,将VM所在的VPC/IP段加入对应边界的允许列表,或者给VM的服务账号添加对应访问级别权限
- 排查VPC Service Controls拦截日志:进入Cloud Logging,过滤资源类型为「VPC Service Controls」,查看是否有对应请求的拦截记录,日志会明确标注拦截原因,可快速定位具体规则问题
3. 其他可能的403原因排查
- 检查VM的出站防火墙规则,是否有规则拦截了到Cloud Functions内网IP段443端口的出站流量
- 检查Cloud Function的IAM权限:哪怕你部署时添加了
--allow-unauthenticated参数,如果组织层面配置了禁止匿名访问的组织策略,该参数会自动失效。你可以尝试给VM使用的服务账号授予roles/cloudfunctions.invoker权限,再用携带认证信息的方式调用函数测试,执行命令:
curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" [你的函数URL]
如果该请求可以成功,说明是匿名访问被组织策略拦截,你可以调整对应组织策略,或者后续调用时都携带身份令牌即可。
内容的提问来源于stack exchange,提问作者dbuzz
相关产品推荐
相关产品推荐

