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

Terraform部署Cloud Run跨GCP项目访问Docker镜像权限问题

解决项目B Cloud Run访问项目A Docker镜像的问题

核心问题定位

你之前给自定义的cloud-run-sa授予了权限,但错误提示明确要求:必须给项目B的Google Cloud Run Service Agent授予访问项目A镜像的权限。这个Service Agent是GCP自动创建的托管服务账号,和你自定义的Cloud Run运行时服务账号不是同一个——自定义SA用于服务运行时权限,而部署阶段拉取镜像的操作由Cloud Run的托管服务代理完成。

具体解决步骤

1. 获取项目B的Cloud Run Service Agent账号

该账号的固定格式为:
service-<项目B数字ID>@serverless-robot-prod.iam.gserviceaccount.com

执行以下命令获取项目B的数字ID:

gcloud projects describe <项目B的ID> --format="value(projectNumber)"

2. 在项目A中为该账号添加镜像读取权限

GCR镜像存储在项目A的artifacts.project-A.appspot.com存储桶中,需要给项目B的Cloud Run Service Agent授予Storage Object Viewer权限:

命令行方式

gsutil iam ch serviceAccount:service-<项目B数字ID>@serverless-robot-prod.iam.gserviceaccount.com:objectViewer gs://artifacts.project-A.appspot.com

Terraform自动化方式(若需集成到代码)

在项目A的Terraform配置中添加存储桶IAM绑定:

resource "google_storage_bucket_iam_member" "cloud_run_agent_image_access" {
  bucket = "artifacts.project-A.appspot.com"
  role   = "roles/storage.objectViewer"
  member = "serviceAccount:service-${var.project_b_number}@serverless-robot-prod.iam.gserviceaccount.com"
}

注:需确保当前Terraform环境有权限操作项目A的存储桶。

3. 重新部署

等待权限生效(通常1-2分钟),再执行:

terraform apply

额外说明

  • 你自定义的cloud-run-sa仅作用于Cloud Run服务运行时的资源访问,和部署阶段拉取镜像的权限无关。
  • 若刚启用Cloud Run API,可多等待几分钟让权限完全同步,但核心操作是给托管的Cloud Run Service Agent加权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:35:25