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

如何通过指定服务账号限制Firestore的读写访问权限?

问题解答

首先明确核心逻辑:
Firebase Admin SDK 默认以项目管理员特权身份访问Firestore,会直接绕过所有安全规则——不管你设置什么规则,只要服务账号拥有对应的IAM权限,就能自由读写。但如果你想要彻底限制只有指定的这个服务账号能访问Firestore(包括拦截其他特权身份或普通用户的请求),必须修改安全规则。

具体实现步骤

1. 更新Firestore安全规则

在规则中校验请求身份的邮箱是否为你的服务账号邮箱,这样只有该账号能通过规则校验。修改后的规则如下:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth.token.email == "firebase-adminsdk-...@....iam.gserviceaccount.com";
    }
  }
}

2. 让Admin SDK遵守安全规则(可选但推荐)

默认Admin SDK会绕过规则,如果你想让自己的Admin请求也受上述规则约束(避免因权限配置失误导致的越权),可以在初始化Firestore时开启规则强制:

import admin = require('firebase-admin');
import { initializeApp } from 'firebase-admin/app';

const app = initializeApp({
  credential: admin.credential.cert({
    // 你的服务账号配置信息
  } as any)
});

// 初始化Firestore时开启规则强制
const db = admin.initializeFirestore(app, {
  enforceSecurityRules: true
});

3. 权限验证

修改完成后,其他未授权的请求(比如普通用户的前端SDK请求)会被规则拦截,只有使用指定服务账号的Admin SDK能正常读写。

注意事项

  • 确保服务账号的IAM权限:默认创建的Firebase服务账号已具备Cloud Datastore User权限,足以读写Firestore;如果权限不足,需要在Google Cloud控制台给账号添加对应权限。
  • 规则中的邮箱必须和服务账号client_email字段完全一致,不能有拼写错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:55:18