如何将Cloud Armor与Firebase Hosting集成实现IP访问限制
Firebase Hosting 结合 Cloud Armor 实现IP访问限制方案及问题排查
一、当前负载均衡+Firebase Hosting 出现「Site Not Found」的解决办法
出现这个错误的核心原因是:Firebase Hosting 会校验请求的 Host 头,只有当请求的Host是已绑定到Firebase项目的域名(包括默认的 *.firebaseapp.com 或你已验证的自定义域名)时,才会返回正常内容。你当前通过负载均衡转发请求时,Host 头被设置为负载均衡绑定的新域名,Firebase无法识别,因此返回错误页面。
解决步骤:
- 进入GCP负载均衡的后端服务配置页面,找到对应的Internet NEG后端
- 在后端服务的「请求头设置」中,添加自定义请求头修改规则:将
Host头替换为你的Firebase Hosting绑定的原始域名(比如your-project.web.app或你已验证的自定义域名) - 确保负载均衡的SSL证书已正确关联新域名,且DNS解析已将新域名指向负载均衡的公网IP
- 等待配置生效后,重新访问新域名即可正常加载Firebase内容
二、通过Cloud Armor实现IP访问限制的完整方案
基于上述负载均衡的配置,添加Cloud Armor安全策略即可实现IP白名单/黑名单限制:
- 创建Cloud Armor安全策略
- 在GCP控制台进入Cloud Armor页面,创建新策略
- 添加规则:选择「允许」或「拒绝」动作,设置IP范围(比如允许特定IP段
192.168.1.0/24访问,拒绝其他所有IP)
- 关联安全策略到负载均衡
- 进入负载均衡的前端配置页面,找到对应的HTTP(S)转发规则
- 将创建好的Cloud Armor安全策略绑定到该转发规则上
- 验证效果
- 用允许的IP访问新域名,应正常加载Firebase内容
- 用被拒绝的IP访问,会返回Cloud Armor的403错误页面
三、IP访问限制的替代方案
如果不想通过负载均衡+Cloud Armor的方式,还可以选择以下方案:
1. Firebase Hosting + Cloud Functions 自定义IP校验
- 创建一个Cloud Functions函数,函数逻辑为:获取请求的客户端IP,对比预设的允许IP列表,符合则转发请求到Firebase静态内容,不符合则返回403
- 在Firebase Hosting的
firebase.json中配置重写规则,将所有请求转发到该Cloud Functions函数 - 示例重写规则:
{ "hosting": { "rewrites": [ { "source": "**", "function": "ipCheckFunction" } ] } }
2. 使用CDN服务商的IP控制功能
如果你的Firebase域名已经接入第三方CDN,可以直接在CDN控制台配置IP访问规则,设置允许/拒绝的IP范围,无需依赖GCP服务。
3. VPC Service Controls(仅限内部IP访问场景)
如果仅需限制GCP VPC内的IP访问Firebase内容,可以配置VPC Service Controls的访问权限,将Firebase Hosting纳入服务边界,仅允许指定VPC的IP访问。
内容的提问来源于stack exchange,提问作者AnbuKLB
相关产品推荐
相关产品推荐

