【问题标题】:How to provide access to a specific image in gcloud gcr.io?如何在 gcloud gcr.io 中提供对特定图像的访问?
【发布时间】:2020-06-23 21:59:24
【问题描述】:

我创建了名为 us.gcr.io/my-project/my-image 的 docker 镜像,我想创建一个服务帐户,该服务帐户将有权仅拉取和推送这个特定的 docker 镜像。

https://cloud.google.com/container-registry/docs/access-control

据我了解,我需要提供对存储所有图像的整个存储桶的访问权限。是否可以在不创建新的谷歌项目的情况下设置特定图像的权限(我现在看到的唯一方法)?

【问题讨论】:

    标签: docker google-cloud-storage gcloud docker-registry google-iam


    【解决方案1】:

    您无法直接使用 Google Container Registry 进行操作。如果您向服务帐户提供存储对象查看器角色,它可以查看所有容器注册表中的所有图像。

    但是,您可以使用 Artifact repository 来完成。为此

    • 创建一个新的存储库
    • 选择您的存储库并单击 sur 添加成员
    • 添加您的服务帐户并授予 Artifact Repository Reader 角色

    然后你可以访问你的图片(或者你可以推送它),到这个路径

    <location>-docker.pkg.dev/<ProjectId>/<RepositoryName>/<ImageName>
    

    【讨论】:

      【解决方案2】:

      您可以为服务帐户提供对存储桶内特定图像(对象)的权限,这可以通过fine-grained access 完成,您必须提供您指向的 URL 上引用的权限:

      用于推送(读取和写入)

      • storage.buckets.create
      • storage.buckets.delete
      • storage.buckets.get
      • storage.buckets.list
      • storage.buckets.update
      • storage.objects.create
      • storage.objects.delete
      • storage.objects.get
      • storage.objects.list
      • storage.objects.update

      拉取(只读)

      • storage.objects.get
      • storage.objects.list

      由于我假设您已经创建了存储桶,因此您可以按照以下步骤将默认(统一)权限设置为细粒度:

      1. 在 Google Cloud Console 中打开 Cloud Storage 浏览器。
      2. 点击与您要授予成员角色的存储桶相关联的存储桶溢出菜单(三个点垂直对齐的菜单)。
      3. 选择编辑存储桶权限。
      4. 如果打开的右侧菜单显示“统一:未启用对象级 ACL”,请单击“切换到细粒度”,然后在打开的弹出窗口中选择“细粒度”并单击保存。

      请在创建存储桶后 90 天之前尝试,否则统一权限将永久存在,您需要创建新存储桶。

      【讨论】:

      • 存储桶中只有 docker 层,名称为 sha256。因此,如果可能的话,很难提供对读取图像的细粒度访问。并且每次推送到注册表时都需要更新策略。
      猜你喜欢
      • 1970-01-01
      • 2018-04-25
      • 2013-09-03
      • 1970-01-01
      • 2018-01-12
      • 2015-07-24
      • 2019-08-16
      • 2020-01-27
      • 2017-03-06
      相关资源
      最近更新 更多