针对Firebase onRequest v1函数的IP黑名单防火墙规则咨询
解决Firebase云函数IP黑名单拦截问题
方法1:在云函数代码中直接拦截IP
在onRequest函数的最开头加入IP校验逻辑,从请求入口直接阻断目标IP,避免后续业务逻辑执行:
exports.yourTargetFunction = functions.https.onRequest((req, res) => { // 定义需要拦截的IP列表 const blockedIps = ['163.172.220.11']; // 获取真实客户端IP(如果函数经过代理,优先从X-Forwarded-For头提取) const clientIp = req.ip || req.headers['x-forwarded-for']?.split(',')[0].trim(); if (blockedIps.includes(clientIp)) { return res.status(403).send('Forbidden'); } // 原有业务逻辑代码 // ... });
注意:如果函数部署在GCP负载均衡之后,要确保X-Forwarded-For头能正确传递,否则req.ip会显示负载均衡的IP而非真实客户端IP。
方法2:用GCP Cloud Armor实现边缘层拦截
这种方式能在请求到达云函数之前就完成拦截,完全不消耗云函数资源:
- 为你的云函数配置VPC连接器,将函数接入VPC网络
- 创建Cloud Armor安全策略,添加IP黑名单规则,把
163.172.220.11加入黑名单列表 - 将该安全策略关联到云函数的入口网关或负载均衡
方法3:通过Firebase Hosting重写规则拦截(若函数通过Hosting暴露)
如果你的云函数是通过Firebase Hosting的重写规则对外提供服务,可在firebase.json中配置IP拦截规则:
{ "hosting": { "rewrites": [ { "source": "**", "condition": { "ip": "163.172.220.11" }, "function": "blockedIpHandler" }, { "source": "**", "function": "yourOriginalFunction" } ] } }
同时创建一个专门返回403的拦截函数:
exports.blockedIpHandler = functions.https.onRequest((req, res) => { res.status(403).send('Forbidden'); });
内容的提问来源于stack exchange,提问作者Rob Terrell
相关产品推荐
相关产品推荐

