You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁止开发者从本地机器部署Firebase Hosting至生产环境?

解决方案:限制仅通过审批PR部署Firebase Hosting生产环境

1. 回收并隔离生产环境凭证

  • 从所有开发者本地机器收回Firebase生产项目的服务账号密钥、配置文件
  • 仅将生产环境的Firebase配置(firebaseConfig)和部署密钥存储在GitHub Secrets中,仅供GitHub Actions专属使用
  • 为开发者提供独立的开发/测试Firebase项目,仅分配该项目的Viewer/Developer权限,让他们本地开发时使用测试项目的凭证初始化App

2. 收紧Firebase项目IAM权限

  • 在Firebase控制台IAM页面调整开发者角色:
    • 移除Firebase Hosting Admin、Editor等高权限角色
    • 仅保留Firebase Viewer或Firebase Develop角色(仅允许查看项目、使用模拟器,无部署权限)
  • 创建专门用于GitHub Actions的服务账号,赋予Firebase Hosting Admin权限,确保只有这个账号能部署生产环境

3. 代码层面阻止本地生产部署

  • 在项目部署脚本中添加环境检查,禁止本地触发生产部署:
    修改package.json中的部署命令:
    "scripts": {
      "deploy:prod": "if [ \"$NODE_ENV\" = \"production\" ] && [ -z \"$GITHUB_ACTIONS\" ]; then echo \"❌ 禁止本地部署生产环境,请通过PR审批流程部署\" && exit 1; else firebase deploy --only hosting --project production-project-id; fi"
    }
    
  • 用环境变量区分初始化配置:本地加载.env.local中的测试项目配置,生产环境由GitHub Actions注入生产配置
    // firebase.js
    const firebaseConfig = process.env.NODE_ENV === 'production' 
      ? {
          apiKey: process.env.FIREBASE_API_KEY,
          authDomain: process.env.FIREBASE_AUTH_DOMAIN,
          // 其他生产配置项
        }
      : {
          apiKey: process.env.REACT_APP_FIREBASE_API_KEY, // 本地测试项目配置
          authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,
          // 其他测试配置项
        };
    
    const app = initializeApp(firebaseConfig);
    

4. 加固GitHub Actions工作流

  • 给生产部署环节添加环境保护规则:在GitHub仓库「Settings > Environments」中创建生产环境,开启「Required reviewers」,指定审批人员,只有通过审批后Actions才会执行生产部署
  • 限制生产部署仅在PR合并到主分支时触发:
    # .github/workflows/deploy-prod.yml
    name: Deploy to Production
    on:
      push:
        branches: [main]
    jobs:
      deploy:
        environment: production # 关联受保护的生产环境
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
          - name: Setup Node.js
            uses: actions/setup-node@v4
            with:
              node-version: 20
          - name: Install dependencies
            run: npm install
          - name: Deploy to Firebase Hosting
            uses: FirebaseExtended/action-hosting-deploy@v0
            with:
              repoToken: '${{ secrets.GITHUB_TOKEN }}'
              firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_PRODUCTION }}'
              projectId: your-production-project-id
              channelId: live
    

5. 统一本地开发流程

  • 强制开发者本地使用Firebase模拟器时,连接到测试项目的模拟器,而非生产项目
  • 文档化标准工作流:所有代码变更必须通过PR提交,经审核后合并到主分支,由Actions自动部署生产,禁止任何本地生产部署操作

内容的提问来源于stack exchange,提问作者Fabio Moggi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 20:35:25