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

无法通过API创建GCP存储传输作业:预条件检查失败

我来帮你捋捋这个FAILED_PRECONDITION(预条件检查失败)的问题——这种错误大多和权限、配置细节或者资源状态有关,结合你提到源和目标桶不在sample-project里,咱们从几个核心方向排查:

可能的原因及解决方法

1. Transfer Service专用服务账号权限不足

谷歌云的Storage Transfer Service会用一个专属的服务账号(格式是project-<你的项目编号>@storage-transfer-service.iam.gserviceaccount.com)来读写源和目标桶。因为你的桶不在作业所在的sample-project,这个服务账号大概率没被授权访问跨项目的桶:

  • 给这个服务账号在源桶添加Storage Object Viewer角色(需要storage.objects.list和storage.objects.get权限);
  • 在目标桶添加Storage Object Creator角色(如果需要覆盖已有文件,再加Storage Object Admin);
  • 操作路径:云控制台→存储桶→权限→添加成员,输入上述服务账号邮箱,分配对应角色。

2. 源/目标桶的状态或配置异常

  • 先确认源桶和目标桶都存在,桶名拼写完全正确(GCS桶名大小写不敏感,但要和创建时一致,别多打空格);
  • 检查源桶有没有设置特殊的ACL或VPC服务控制策略,限制了外部服务账号的访问;
  • 目标桶如果启用了保留策略(Retention Policy),要确保Transfer服务账号有绕过保留的权限,或者作业配置里没有要求删除目标桶的唯一文件。

3. API请求参数的细节错误

仔细核对你发送的JSON:

  • projectId必须是你用来创建Transfer作业的项目ID(也就是sample-project),不是源或目标桶所在的项目;
  • 检查transferSpec里的gcsDataSource.bucketName和gcsDataSink.bucketName是否准确,有没有遗漏区域后缀(比如多区域桶不需要,但单区域桶的桶名本身不带区域,这点不用慌);
  • 如果设置了transferOptions(比如deleteObjectsUniqueInSink),确认目标桶允许执行对应的操作(比如删除权限)。

4. 跨项目访问的额外限制

如果源或目标桶所在的项目启用了VPC Service Controls,需要把Transfer Service的服务账号添加到对应的访问允许列表里,否则会被拦截,触发预条件失败。

快速验证步骤

  1. 先找到你sample-project的Transfer服务账号:在云控制台→IAM与管理员→IAM,搜索storage-transfer-service就能找到;
  2. 手动给这个账号授权源和目标桶的权限;
  3. 重新提交API请求,看是否解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:17:03