繁体   English   中英

无法使用来自另一个项目的图像部署 Cloud Run 服务

[英]Unable to deploy a Cloud Run Service using an image from another project

尝试使用同一组织中另一个项目的映像部署 Cloud Run 服务时出现此错误。

》 Google Cloud Run Service Agent必须有读取镜像的权限,gcr.io/my-builds/consultoriaweb@sha256:8c655b2bab..... 确保提供的容器镜像URL正确,并且以上账号有权限访问图像。如果您刚刚启用 Cloud Run API,权限可能需要几分钟才能传播。请注意,图像来自项目 [my-builds],与此项目 [my-webapp] 不同。权限必须从此项目授予 Google Cloud Run 服务代理。”

我正在使用 Google 控制台 web 界面选择要从我的构建项目上的容器注册表部署的映像。

已经在 [my-builds] 项目上添加了 IAM 权限,尝试了两种方法:

[my-webapp-project-number]-compute@developer.gserviceaccount.com => 角色计算图像用户

[my-webapp-project-number]@cloudservices.gserviceaccount.com => 角色计算图像用户

谷歌文档说我应该将 roles/compute.imageUser 角色赋予:

[my-webapp-project-number]@cloudservices.gserviceaccount.com在我的构建项目上,但我无法让它工作。

Google 文档使用来自其他项目的图像,但我不知道它是否适用于 Cloud Run。 https://cloud.google.com/deployment-manager/docs/configuration/using-images-from-other-projects-for-vm-instances#granting_access_to_images

在此先感谢您对此的任何帮助

你混合了不同的东西。 容器映像不是 Compute Engine 启动磁盘映像。

因此,您需要授予 Cloud Run 服务代理服务帐号以访问您的其他项目的映像。 您可以在此处找到文档以授予对 GCR 图像的访问权限。

然后您需要获取具有此模式的 Cloud Run 服务代理服务帐户

service-<projectNumber>@serverless-robot-prod.iam.gserviceaccount.com

两者结合,你可以 go 到托管容器镜像的项目的控制台; go 到IAM页面,点击添加

  • 将 Cloud Run Service 代理服务帐号添加为成员
  • 授予角色:storage object 查看器。

谢谢你。 让它工作!

我发现了许多关于设置云运行权限以从其他项目中提取容器图像的不同资源/文档。 因此,我进行了测试以发现真正需要的:

对于工件注册表:

  • 成员:
    • serviceAccount:service-@serverless-robot-prod.iam.gserviceaccount.com 角色:roles/artifactregistry.reader

对于容器注册表:

  • 成员:
    • serviceAccount:service-@serverless-robot-prod.iam.gserviceaccount.com 角色:roles/storage.objectViewer

再次感谢你。

今天我的一个项目遇到了同样的错误,我找到了官方文档并想在这里分享这些步骤。

  1. 在控制台中,为您的 Cloud Run 服务打开项目。
  2. 选中标有包括 Google 提供的角色授权的复选框。
  3. 复制 Cloud Run 服务代理的 email。 它的后缀为@serverless-robot-prod.iam.gserviceaccount.com (您可以执行 Control+F 并搜索@serverless-robot-prod.iam.gserviceaccount.com) (You should find the account from this page because the project-number is not the project-id.)
  4. 打开拥有您要使用的容器注册表的项目。
  5. 单击添加以添加新主体。
  6. 在 New principals 文本框中,粘贴您之前复制的服务帐户的 email。
  7. 在 Select 角色下拉列表中,如果您使用的是 Container Registry,则 select 角色Storage -> Storage Object Viewer 如果你使用 Artifact Registry,select 角色Artifact Registry -> Artifact Registry Reader。
  8. 将容器映像部署到包含您的 Cloud Run 服务的项目。

您可以从这里关注官方文档

要回答@mzafer,这里是我用来执行此操作的 Terraform 代码:

resource "google_project_iam_member" "run_gcr" {
  project = local.build_project
  role    = "roles/storage.objectViewer"
  member  = "serviceAccount:service-${google_project.main.number}@serverless-robot-prod.iam.gserviceaccount.com"
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM