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

使用GCP服务账户通过gspread创建表格时遭遇403权限不足错误

解决GCP服务账户通过gspread创建Google表格的403权限不足错误

错误核心分析

从错误详情来看,问题出在调用drive.googleapis.com的DriveFiles.Create方法时,访问令牌的作用域不足,同时服务账户缺少必要的Drive操作权限。

解决方案步骤

1. 为服务账户分配正确的Drive角色

  • 进入GCP IAM控制台,定位到触发错误的服务账户
  • 点击服务账户的「编辑」按钮,添加以下任一角色(遵循最小权限原则选择):
    • Drive File Creator(roles/drive.fileCreator):允许创建新Drive文件,仅能访问自身创建的文件
    • Editor(roles/editor):项目级编辑权限,包含Drive文件的创建与管理权限
    • Drive Admin(roles/drive.admin):全Drive管理权限(仅必要时使用)
  • 保存角色分配后,等待5-10分钟让GCP权限同步生效

2. 检查VM实例的服务账户作用域配置

由于使用的是绑定到VM的服务账户,VM元数据的作用域限制可能会覆盖代码中的设置:

  • 进入GCP Compute Engine控制台,找到目标VM实例
  • 点击「编辑」按钮,展开「服务账户」区域
  • 确保已勾选Google Drive API相关作用域,或临时选择「允许全部Cloud API访问权限」测试(生产环境建议严格限制)
  • 保存配置后重启VM,元数据变更需重启才能生效

3. 验证代码中的作用域实际生效

在代码中添加打印语句,确认凭证的作用域是否正确加载:

from google.auth import default
import gspread
credentials, _ = default(scopes=["https://www.googleapis.com/auth/drive"])
# 打印实际生效的作用域
print("当前凭证作用域:", credentials.scopes)
gc = gspread.authorize(credentials)
sheet_name = 'test_service_account'
sh = gc.create(sheet_name)

如果打印的作用域不包含https://www.googleapis.com/auth/drive,说明VM元数据作用域覆盖了代码设置,需回到步骤2调整VM配置。

4. 对比正常服务账户的配置差异

参考你提到的另一个可正常创建表格的服务账户,对比两者的:

  • IAM角色分配列表
  • 绑定的VM实例作用域设置
  • 代码中的作用域配置
    将差异同步到问题服务账户即可解决问题

内容的提问来源于stack exchange,提问作者Vipul Vishnu av

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 13:53:35