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

Cloud Run部署时使用ADC访问Google Drive API的无效凭证问题

解决Cloud Run使用ADC访问Google Drive API凭证无效的问题

核心排查与修复步骤

本地OAuth用的是用户身份,Cloud Run的ADC依赖服务账号身份,二者权限体系完全独立,以下是针对性解决方案:

1. 确认项目已启用Google Drive API

登录GCP控制台,进入对应项目的API和服务→已启用的API和服务,确保Google Drive API处于启用状态。项目级的通用权限不会自动启用Drive API,必须手动开启。

2. 给服务账号分配Drive层面的权限

GCP的Editor权限只覆盖GCP资源,和Google Drive权限不互通:

  • 找到服务账号的邮箱(格式:[账号ID]@[项目ID].iam.gserviceaccount.com)
  • 打开目标Drive文件夹,点击共享,输入该邮箱,分配编辑者权限,等待1-2分钟让权限同步生效

3. 修正代码中的ADC初始化逻辑

Python中使用ADC时,必须明确指定Drive API的权限范围,不要依赖默认范围:

import google.auth
from googleapiclient.discovery import build

# 必须指定Drive的权限范围
SCOPES = ['https://www.googleapis.com/auth/drive']

def get_drive_service():
    # 用ADC获取凭证,无需本地credentials.json
    credentials, project_id = google.auth.default(scopes=SCOPES)
    return build('drive', 'v3', credentials=credentials)
  • 彻底删除代码中硬编码本地credentials.json路径的逻辑,确保完全依赖ADC自动获取凭证

4. 检查Cloud Run服务的身份配置

进入Cloud Run服务详情页,点击编辑和部署新版本→容器、变量和秘密→服务账号,确认选中的是你已经配置Drive权限的那个服务账号。同时确保没有设置GOOGLE_APPLICATION_CREDENTIALS环境变量,否则会覆盖ADC的自动获取逻辑。

5. 验证凭证的权限范围

可以在Cloud Run中添加一段测试代码,打印当前凭证的关键信息:

import google.auth

credentials, project_id = google.auth.default()
print("当前凭证权限范围:", credentials.scopes)
print("服务账号邮箱:", credentials.service_account_email)

如果输出的scopes不包含Drive相关权限,说明代码初始化时没有正确传入SCOPES参数,需要调整。

6. 检查Drive API配额

进入API和服务→配额,查看Google Drive API的请求配额是否耗尽,新启用的API可能有初始配额限制,必要时申请调整。


内容的提问来源于stack exchange,提问作者Irsyam Asri Putra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:29:51