【问题标题】:Access GCP Docker image from different project从不同项目访问 GCP Docker 映像
【发布时间】:2021-08-16 18:46:42
【问题描述】:

我有两个 GCP 项目。 projectA 包含一个工件注册表,我在其中存储我的 docker 图像,projectB 是我想使用这样的图像与 app-engine 一起部署它的位置(灵活)。

我的命令如下所示:

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

这样失败:

错误:(gcloud.app.deploy) 错误响应:[7] App Engine apppot 并且 App Engine 柔性环境服务帐号必须具有 图片的权限 [asia-northeast1-docker.pkg.dev/projectA/default/my-image:latest]。 请检查 App Engine 默认服务帐户是否具有 [Storage Object Viewer] 角色和 App Engine 灵活服务 帐户具有 App Engine 柔性环境服务代理角色

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

【问题讨论】:

    标签: docker google-cloud-platform app-engine-flexible


    【解决方案1】:

    您需要确保 projectB 的 App Engine default service account 可以访问 projectA 中的 gcs 存储桶。

    你应该去项目A到“IAM”(不是“服务帐户”),在那里你将能够从projectB添加App Engine default service account的电子邮件地址。

    【讨论】:

    • 我试过那个。在项目A中,我添加了member name= projectB@appspot.gserviceaccount.com、name = App Engine default service account 的成员(已自动设置)并赋予其角色Storage Object Viewer(也尝试了Storage Object Admin)。我等了大约 15 分钟才能正确传播权限,但错误消息没有改变。我还在app.yaml 中设置了service_account: "projectB@appspot.gserviceaccount.com",以确保它使用正确的帐户。
    【解决方案2】:

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

    当您使用旧版 Container Registry 时,Kunal 的答案是正确的,您需要在您的项目中授予服务帐户作为 Storage Object Viewer。

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

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

    点击添加成员,添加你的服务账号并选择正确的角色,这里神器阅读器就够了

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


    编辑 1

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

    【讨论】:

    • 非常感谢,就是这样!我很惊讶这些权限显然只在这个位置可见/可设置,而不是在一般的 IAM 部分。关于为什么会这样的任何见解?
    • 您可以在“通用 IAM 部分”-> 项目级别范围中进行操作。我更新了我的答案
    猜你喜欢
    • 2021-04-27
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 2019-11-06
    • 2019-03-13
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多