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

Firebase Admin认证在Python解释器正常,Django/Celery环境权限报错

问题原因与解决方案

核心原因

你在Python解释器中运行正常,是因为当前shell环境继承了gcloud auth activate-service-account设置的认证上下文——此时Python会使用你激活的拥有全权限的服务账号密钥。

而Celery作为后台服务启动时,不会继承你当前shell的环境变量和gcloud认证配置,它会默认使用GCP Compute Engine的默认服务账号。这个默认账号的权限范围(Scope)通常不包含Firestore的访问权限,因此触发ACCESS_TOKEN_SCOPE_INSUFFICIENT错误。

解决方法

方法1:在Celery/Django中显式指定服务账号密钥

不要依赖shell环境,直接在代码或配置中指定服务账号密钥文件路径:

  • 方式A:设置环境变量(可在Celery启动脚本、Django settings.py中添加)
import os
# 替换为你的服务账号密钥文件路径
os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/opt/app/service-account-key.json"
  • 方式B:在初始化Firestore/Storage客户端时直接加载密钥
from google.oauth2 import service_account
import firebase_admin
from firebase_admin import credentials, firestore, storage

# 加载服务账号密钥
cred = credentials.Certificate("/opt/app/service-account-key.json")
firebase_admin.initialize_app(cred, {
    'storageBucket': 'your-bucket-name.appspot.com'
})

# 初始化客户端
db = firestore.client()
bucket = storage.bucket()

方法2:扩展VM默认服务账号的权限范围

如果你不想修改代码,可以给VM的默认服务账号添加Firestore相关的权限范围:

  1. 进入GCP控制台的Compute Engine -> 虚拟机实例
  2. 找到你的E2-medium VM,点击编辑
  3. 在服务账号部分,点击更改范围
  4. 添加Cloud Datastore(对应Firestore)的权限范围,保存后重启VM

这种方法的缺点是耦合VM配置,不如方法1灵活。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:25:12