Firebase Functions连接GCE REST服务受阻,如何配置防火墙规则指定源?
安全配置Firebase Functions访问GCE实例的防火墙规则
好问题!完全没必要把端口开放给所有用户,我们有几种更安全的方案来实现只允许Firebase Functions访问你的GCE实例上的REST服务,下面是具体步骤:
方案1:使用VPC Serverless Connector(最推荐)
这是最安全且长期稳定的方式,通过将Firebase Functions接入你的VPC网络,让它和GCE实例处于同一内网环境:
- 第一步:在GCP控制台创建一个VPC Serverless Connector,选择与你的GCE实例相同的VPC网络和子网,区域尽量和Functions的部署区域一致。
- 第二步:修改Firebase的部署配置,让Functions使用这个连接器。在
firebase.json中添加如下配置:
或者在部署命令中直接指定:{ "functions": { "vpcConnector": "projects/[你的项目ID]/locations/[连接器区域]/connectors/[连接器名称]", "vpcConnectorEgressSettings": "PRIVATE_RANGES_ONLY" // 仅允许访问VPC内网IP,更安全 } }firebase deploy --only functions --vpc-connector=你的连接器资源ID - 第三步:创建GCP防火墙规则,将源IP范围设置为你的VPC子网的IP段,目标端口设为REST服务的端口(比如8080),协议选TCP。这样只有通过VPC Connector的Firebase Functions能访问,外部流量完全被拦截。
方案2:指定Firebase Functions的出口IP范围
如果暂时不想用VPC Connector,可以直接用Cloud Functions的固定出口IP范围来限制:
- 首先,获取Google Cloud公布的Cloud Functions出口IP范围(属于Google Cloud的外部IP段),你可以通过
gcloud命令查询:gcloud compute addresses list --filter="status=RESERVED AND purpose=GCE_ENDPOINT" - 然后创建防火墙规则,将源IP设置为这些Cloud Functions的IP段,目标端口和协议对应你的REST服务。
- 注意:这个IP范围可能会随着Google Cloud的更新而变化,需要定期检查并更新防火墙规则,适合临时场景或小型项目。
方案3:添加身份验证作为额外安全层
不管用上面哪种方案,都可以给REST服务加上身份验证,双重保障:
- 让Firebase Functions使用项目的默认服务账号生成JWT令牌,在请求REST服务时携带这个令牌。
- 在GCE实例的REST服务端验证JWT的有效性,确认请求来自你的项目的服务账号。
- 这样即使有人绕过了防火墙,没有合法的身份凭证也无法访问服务。
额外注意事项
- 尽量让Firebase Functions和GCE实例的区域保持一致,减少网络延迟。
- 使用VPC Connector时,注意查看GCP的配额限制,比如连接器的最大并发连接数。
- 测试阶段可以临时开放端口给你的本地测试IP,确认服务正常后再切换到安全规则。
内容的提问来源于stack exchange,提问作者Victor G
相关产品推荐
相关产品推荐

