访问Firestore触发PERMISSION DENIED(grpc_status:7)排查求助
可行排查方案
- 修正Firestore客户端初始化方式
你当前的写法绕过了firebase_admin初始化时注入的凭证上下文,是权限报错的高频诱因。原代码中db = firestore.Client('myapp')属于错误用法,替换为如下写法即可:
# 初始化app时指定项目ID firebase_admin.initialize_app(cred, { 'projectId': 'myapp' }) # 直接通过admin包获取已绑定凭证的客户端 db = firestore.client()
- 核对服务账号所属项目
打开你使用的cred.json文件,确认其中project_id字段的值和你要访问的Firestore所属项目ID完全一致,多项目场景下经常出现凭证属于A项目、访问B项目资源的情况。 - 检查IAM角色绑定的附加条件
登录GCP控制台进入IAM页面,找到当前服务账号对应的Datastore Owner角色绑定,确认没有配置IP限制、时间限制等附加条件,任意条件不满足都会触发权限拒绝。 - 确认Firestore数据库模式
如果你的数据库创建时选择了Datastore模式,使用Firestore SDK访问也会触发权限报错,可在Firebase控制台Firestore首页左上角查看当前数据库模式,若为Datastore模式可重建数据库切换为Firestore原生模式,或改用Datastore SDK调用。 - 补充说明:Firebase安全规则仅对Web/移动端等客户端SDK生效,服务账号调用走的是GCP IAM权限校验,你配置的
allow read, write: if true;对服务账号调用完全不生效,不需要在安全规则上浪费时间。
内容的提问来源于stack exchange,提问作者user1934283
相关产品推荐
相关产品推荐

