如何禁止开发者从本地机器部署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
相关产品推荐
相关产品推荐

