无法使用来自另一个项目的映像部署 Cloud 运行 服务

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

尝试使用同一组织中另一个项目的图像部署云 运行 服务时出现此错误。

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

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

已经在 [my-builds] 项目上添加了 IAM 权限,两者都试过了:

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

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

Google 文档说我应该将 roles/compute.imageUser 角色授予:

[my-webapp-project-number]@cloudservices.gserviceaccount.com 在我的构建项目上,但我可以'无法正常工作。

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

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

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

因此,您需要授予 Cloud 运行 服务代理服务帐户以访问您的其他项目的图像。您可以找到 the documentation here 以授予对 GCR 图像的访问权限。

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

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

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

  • 添加 Cloud 运行 服务代理服务帐户作为成员
  • 授予角色:存储对象查看器。

谢谢。让它工作!

我发现很多不同的 resources/docs 设置云权限 运行 从其他项目中拉取容器镜像。所以我测试发现真正需要的那个:

对于 Artifacty 注册表:

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

对于容器注册表:

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

再次感谢。