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

跨项目权限问题:Project B的Cloud Functions无法访问Project A的Cloud Firestore,403权限不足

问题分析与解决方案

环境信息

  • Project A 部署 Cloud Firestore
  • Project B 部署 Cloud Functions

问题现象

通过 Project B 的 Cloud Shell 可正常访问 Project A 的 Cloud Firestore,但 Project B 的 Cloud Functions 访问时触发 403 Missing or insufficient permissions 错误。

代码片段

from google.cloud import firestore 
import firebase_admin
from firebase_admin import credentials

def function_a(request):
    cred = credentials.ApplicationDefault()
    firebase_admin.initialize_app(cred, {
        'projectId': 'project-a',
    })
    db = firestore.client()
    try:
        doc_ref=db.collection('COLLECTION_SAMPLE').document('documentA').set({"foo":"bar"})
    except Exception as e:
        print("error::", e)
        
    return "success"

当前权限配置

Project B 的 Cloud Functions 使用服务账号 project-b@appspot.gserviceaccount.com:

  • 在 Project B 拥有 Cloud Datastore User、Cloud Functions Developer、Editor 角色
  • 在 Project A 拥有 Cloud Datastore Import Export Admin 角色

问题核心原因

Cloud Datastore Import Export Admin 角色仅提供数据导入导出权限,不具备读写Firestore文档的权限,这是触发403错误的直接原因。而Cloud Shell默认使用个人账号(通常拥有较高权限),因此能正常访问。

解决方案

1. 分配正确的Firestore权限

在 Project A 中,为 project-b@appspot.gserviceaccount.com 分配以下任一合适角色:

  • Cloud Datastore User:允许读写所有Firestore文档,适合常规业务场景
  • Cloud Firestore Editor:拥有Firestore数据的编辑权限,覆盖读写操作
  • 自定义角色:若需精细化权限控制,可创建仅包含datastore.documents.create、datastore.documents.update等所需权限的自定义角色

2. 优化代码(可选)

避免函数每次调用时重复初始化Firebase Admin SDK,将初始化逻辑放在函数外部:

from google.cloud import firestore 
import firebase_admin
from firebase_admin import credentials

# 全局初始化,仅在函数冷启动时执行一次
cred = credentials.ApplicationDefault()
firebase_admin.initialize_app(cred, {
    'projectId': 'project-a',
})
db = firestore.client()

def function_a(request):
    try:
        doc_ref=db.collection('COLLECTION_SAMPLE').document('documentA').set({"foo":"bar"})
    except Exception as e:
        print("error::", e)
        
    return "success"

3. 验证权限生效

权限变更通常需要几分钟时间同步,等待后重新触发Cloud Functions,检查是否仍存在403错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:24:28