故障排查记录:Google Drive Service Account Storage Quota (403 Error)
排查并修复通过 Service Account 上传至 Google Drive 时触发的 403 存储配额超出问题。
故障排查记录与技术备忘:Google Drive Service Account Storage Quota (403 Error)
故障现象 (Issue)
在 LA 节点尝试将下载完成的音频 (.mp3 或 .m4a 格式) 自动上传至指定的 Google Drive 文件夹时,触发如下核心报错:
HttpError 403 when requesting None returned "Service Accounts do not have storage quota. Leverage shared drives... or use OAuth delegation instead.". Details: "[{'message': 'Service Accounts do not have storage quota...', 'domain': 'usageLimits', 'reason': 'storageQuotaExceeded'}]"
即使已将目标文件夹开放编辑权限给 Service Account(服务账号),上传动作依然在开始瞬间被阻断。
故障根因 (Root Cause)
- Google Workspace 所有权配额机制:即使服务账号 (Service Account) 将文件上传到他人拥有 (Owner) 的普通云端硬盘文件夹中,该文件依然占用该服务账号自身的存储容量。
- 服务账号的先天限制:在部分版本的 Google Workspace 组织架构下,服务账号默认情况下的存储空间 (Storage Quota) 为 0 字节。一旦执行上传创建动作,将立刻触发“超出存储限额” (storageQuotaExceeded) 的 403 错误。
由于目标账户不是包含 15GB 免配置初始配额的普通 @gmail.com,也未能开启“共享云端硬盘 (Shared Drives)”功能(注:Shared Drive 可使所有子项目和账号共享组织主体配额,打破个人配额限制),传统的 Service Account 模式在这套特定的 Google 架构内走到了死胡同。
解决方案论证与选型 (Solution)
面临配额封锁的 3 条破局思路:
- [被采纳] 基于独立 OAuth2 用户弹窗授权的伪装:直接放弃服务账号上传机制,转由提供该 2TB 容量的个人 Google 账号执行标准 OAuth 2.0 Web Auth 流程生成持久授权票据 (
token.json)。通过该脚本每次执行的云盘动作均被视为本人点击页面手动上传,直接消耗 2TB 容量(一劳永逸)。 - 利用 Rclone 代替 Python 上传逻辑:LA 下载完毕后交接给本地绑定的 Rclone CLI 命令同步,但这会增添额外的环境依赖维护。
- Google Domain-Wide Delegation (域委派冒用):强制要求在 Admin Portal 做委派管理,需要最高管理权限且操作繁杂。
最终采用 方案 1 (OAuth2 个人授权票据分发) 作为核心技术路线。
修复实施标准作业程序 (Fix SOP)
-
架构与脚本改动:
- 新增
auth_setup.py辅助脚本:启动本地 Web 服务器代理进行 Google 账号登录同意,自动化获取包含离线刷新机制 (Refresh Token) 的持久化token.json身份证书。 - 重构
src/core/google_api.py引擎层:增加兼容能力,优先读取外部持久化token.json作为 OAuth 凭据,并在其不存在时优雅降级回落至兼容原本的credentials.json机制。
- 新增
-
生产环境部署流转:
- 个人
token.json为高权限隐私密钥,将其放入conf/安全存储区。同时已确认项目级.gitignore会主动过滤所有未显式包含的*.json(如! .env.example) 文件。 - 更新分布式的中枢控制系统:于 HP-G3 服务器上的
ops/fabfile.py内增加了针对个人 OAuth Token 分发的专门逻辑阶段。该阶段不仅会自动搜刮项目根目录或conf下存在的token.json,且优先通过 Fabric 通过 SSH 加密通道向处于外网边缘的LA节点散布部署并重启。
- 个人
结果验证 (Outcome)
通过修改配置部署重启后,通过 Python 调用诊断以及真实观察 Google Workspace 云端后台均验证:
- 本地生成 Dummy Audio 推流成功。
- YouTube 自动抓取队列流转恢复正常:任务
ZEWszE8Hw1E录音文件成功存储于youtube_factory/并正常扣除主账号的无源 2TB 配额,Google Sheets 正确地通过 LA 节点更新状态至音频已就绪。 - HK 节点随后即可利用自身的
rclone读取驱动开始Faster-Whisper推理转录。故障解除并成功确立了永久性高并发安全方案。