从不同项目访问 GCP Docker 图像

Access GCP Docker image from different project

我有两个 GCP 项目。 projectA 包含一个工件注册表,我在其中存储我的 docker 图像,projectB 是我想使用这样的图像通过应用程序引擎部署它的地方(灵活)。

我的命令如下所示:

gcloud app deploy --project=projectB --version=test1 --image-url="asia-northeast1-docker.pkg.dev/projectA/default/my-image:latest"

失败是这样的:

ERROR: (gcloud.app.deploy) Error Response: [7] The App Engine appspot and App Engine flexible environment service accounts must have permissions on the image [asia-northeast1-docker.pkg.dev/projectA/default/my-image:latest]. Please check that the App Engine default service account has the [Storage Object Viewer] role and the App Engine Flexible service account has the App Engine Flexible Environment Service Agent role

我确保 App Engine default service account 具有 Storage Object Viewer 角色(在两个项目中),但是我无法在任何地方找到 App Engine Flexible service account

您需要确保项目 B 的 App Engine default service account 可以访问项目 A 中的 gcs 存储桶。

您应该转到项目 A 的“IAM”(而不是“服务帐户”),在那里您可以添加来自 projectBApp Engine default service account 的电子邮件地址。

在 Google Cloud 上,您有 2 个容器注册表产品:容器注册表和工件注册表。

当您使用 Container Registry(旧版)时,Kunal 的答案是正确的,您需要将服务帐户授予项目的存储对象查看器。

但是,新注册表 Artifact Registry 的一个主要演变是 IAM 兼容性。这次你可以授予,不是项目范围(即使你可以,但我不推荐),而是在注册表范围内。而您有专门负责此的 IAM 角色。

转到 Artifact Registry,select 它(左侧的复选框)并转到右侧的权限面板

点击添加成员,添加你的服务账号和select正确的角色,这里神器reader就够了

(当然,如果您在项目范围内以相同的角色授予您的服务帐户,它也有效)


编辑 1

您也可以在项目级别授予此角色