GCP Cloud Run 无法从其他项目中的工件注册表中提取映像

sas*_*_bg 2 docker gcloud google-cloud-run

我有一个项目,其中为 docker 配置了工件注册表。

子项目有一个云运行服务,需要从父项目提取其映像。

子项目还有一个服务账户,该账户有权通过 IAM 角色Roles/artifactregistry.writer访问存储库。

当我尝试启动服务时,我收到一条错误消息:

Google Cloud Run Service Agent 必须有权读取映像 europe-west1-docker.pkg.dev/test-parent-project/docker-webank-private/node:custom-1。确保提供的容器镜像 URL 正确,并且上述帐户有访问该镜像的权限。如果您刚刚启用 Cloud Run API,则权限可能需要几分钟才能传播。请注意,该图像来自项目 [test-parent-project],与此项目 [test-child-project] 不同。必须从此项目向 Google Cloud Run 服务代理授予权限。

我已经测试过使用docker 登录并使用服务帐户的私钥手动连接,并且docker pull命令在我的电脑上完美运行。

cat $GOOGLE_APPLICATION_CREDENTIALS | docker login -u _json_key --password-stdin https://europe-west1-docker.pkg.dev
> Login succeeded
docker pull europe-west1-docker.pkg.dev/bfb-cicd-inno0/docker-webank-private/node:custom-1
> OK
Run Code Online (Sandbox Code Playgroud)

该服务帐户还附加到云运行服务:

在此输入图像描述

gui*_*ere 7

您在 Cloud Run 中使用了 2 种类型的服务帐号:

  • Google Cloud Run API 服务帐户
  • 运行时服务帐户。

在您的解释和屏幕截图中,您讨论了运行时服务帐户,即服务运行并调用 Google Cloud API 时将使用的身份。

在运行之前,必须部署该服务。这次,它是一个 Google Cloud Run 内部流程,用于拉取容器、创建修订版本并执行所有必需的内部操作。为了完成这项工作,还存在一个服务帐户,它被命名为“服务代理”。

在IAM控制台中可以找到:格式如下

service-<PROJECT_NUMBER>@serverless-robot-prod.iam.gserviceaccount.com
Run Code Online (Sandbox Code Playgroud)

不要忘记勾选右上角的复选框以包含 Google 托管服务帐户 在此输入图像描述

如果您希望此部署服务帐户能够在另一个项目中提取映像,请为其授予正确的权限,而不是为运行时服务帐户授予正确的权限。