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

GKE环境使用ADC访问Google Sheets API报权限范围不足错误

问题根因

这个ACCESS_TOKEN_SCOPE_INSUFFICIENT报错和你选oauth2client还是google-auth鉴权库无关,核心原因是GKE环境下通过元数据服务获取的服务账号访问令牌,默认不携带Google Sheets的访问scope,你在代码层面给凭证对象追加scopes的操作在GKE/GCE运行环境下是不生效的。

GCE/GKE实例下发的服务账号令牌的scope列表,是在节点池配置、或者Workload Identity绑定阶段就固定的。代码里调用create_scoped()、给google.auth.default()传scopes参数的写法,仅在本地使用服务账号JSON密钥文件认证时生效,对元数据服务直接签发的令牌没有修改效果。

排查&解决方法

先在运行程序的GKE Pod里执行以下命令,直接拉取当前环境生效的访问令牌,确认scope配置:

curl -H "Metadata-Flavor: Google" http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token

把返回结果里的access_token值做JWT解析,查看payload中的scope字段,如果没有https://www.googleapis.com/auth/spreadsheets,就按你实际用的GKE鉴权模式调整配置:

  • 如果你直接使用节点默认绑定的Compute Engine服务账号:
    1. 进入GKE集群对应的节点池配置页,找到「安全-访问范围」设置项
    2. 不要使用默认的scope配置,要么选择「允许访问所有Google Cloud API」,要么单独勾选Google Sheets对应的权限项
    3. 保存配置等节点滚动重建完成后,再重新运行程序

    生产环境不推荐用这种方案,节点默认SA权限过大,不符合最小权限原则

  • 如果你使用Workload Identity做服务账号鉴权(生产环境推荐方案):
    1. 先确认K8s服务账号绑定的Google IAM服务账号(GSA),已经被添加到目标Google Sheet的分享列表中,根据读写需求给对应编辑/查看权限
    2. Workload Identity默认签发的令牌自带https://www.googleapis.com/auth/cloud-platform范围,已经包含Sheets的所有操作权限,如果拿不到对应scope,检查是否给GSA配置过自定义的scope限制,移除限制即可。
代码修正建议
  • 废弃oauth2client,这个库已经停止维护很多年,官方统一推荐用google-auth作为替代
  • 你贴的google-auth版本代码漏了build方法的导入,补全后的可用代码如下:
import google.auth
from googleapiclient.discovery import build

SCOPES = ['https://www.googleapis.com/auth/spreadsheets']

creds, project_id = google.auth.default(scopes=SCOPES)
service = build('sheets', 'v4', credentials=creds)
sheet = service.spreadsheets()
# 替换为你实际的表格ID和取值范围
result = sheet.values().get(
    spreadsheetId='1kvHv1OBCzr9GnFxRu9RTJC7jjQjc9M4rAiDnhyak2Sg',
    range='vm_metrics!A10'
).execute()
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:12:15