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

使用Google服务账号下载Cloud Storage归档文件遇授权错误求助

问题描述

尝试从Cloud Storage存储桶下载Google Vault生成的邮件归档文件时遇到下载问题,使用的Python代码如下:

scopes = ["https://www.googleapis.com/auth/devstorage.full_control"]
service_account_file = r"credentials\token.json"
currenth_month = current_month
  
creds = Credentials.from_service_account_file(service_account_file, scopes=scopes, subject=execution_email)

storage = build("storage", "v1", credentials=creds)


for bucket in files_to_download_dict:
    object_name = files_to_download_dict[bucket]["object_name"]
    files_request = storage.objects().get_media(bucket=bucket, object=object_name)

    directory = r"C:...\test"
    output_folder = path.join(directory, current_month)
    if not path.isdir(output_folder):
        mkdir(output_folder)

    file_name_path = rf"C:file_path"

    with FileIO(file_name_path, mode="w") as data_buffer:
        download = MediaIoBaseDownload(data_buffer, files_request)
        done = False
        while not done:
            status, done = download.next_chunk()

遇到两种报错情况:

  1. 使用旧的有效服务账号密钥时,报错:

invalid grant, not valid user id or email

  1. 使用同一服务账号的新密钥(已配置所需所有scopes)时,报错类似:Client failed to get access token or doesn't have access to the scopes you need。

已尝试普通Google Web应用凭据(其他模块可用)及Stack Overflow多种方案,均无效,求解决思路。

解决思路

针对第一种报错(invalid grant, not valid user id or email)

  • 检查subject=execution_email参数:该邮箱必须是已授权服务账号进行域范围委派的Google Workspace账号,且账号需存在于你的域内,不能是外部邮箱或已删除账号。
  • 确认服务账号已启用域范围委派:在Google Cloud控制台的IAM & Admin > 服务账号页面,找到对应账号,编辑详情并勾选"启用G Suite域范围委派";同时在Google Workspace管理控制台的安全 > API控制 > 域范围委派中,添加该服务账号的客户端ID及所需的存储权限范围。

针对第二种报错(无法获取令牌或权限不足)

  • 验证密钥文件有效性:确保新生成的服务账号JSON密钥文件未被修改,且代码中service_account_file的路径正确指向该文件,避免路径错误导致无法读取凭据。
  • 检查权限配置:
    • 在Google Cloud控制台的服务账号页面,为该账号添加devstorage.full_control对应的IAM角色(如Storage Admin),不能仅在代码中指定scope。
    • 域范围委派中添加的scope必须包含https://www.googleapis.com/auth/devstorage.full_control,且无拼写错误。
  • 确认存储桶权限:在Cloud Storage控制台直接检查该服务账号对目标存储桶的权限,确保拥有存储对象查看者及以上权限,必要时手动添加角色测试。

其他关键排查点

  • 修正文件写入模式:代码中FileIO(file_name_path, mode="w")需改为mode="wb",因为归档文件是二进制格式,文本模式写入会导致文件损坏或下载失败。
  • 放弃Web应用凭据:Web应用凭据不支持域范围委派,而访问Vault生成的归档需要服务账号模拟用户权限,因此必须使用服务账号凭据,无需再尝试Web应用凭据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:31:01