如何提供对 gcloud gcr.io 中特定图像的访问?

How to provide access to a specific image in gcloud gcr.io?

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

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

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

您可以为存储桶内的特定图像(对象)提供服务帐户的权限,这可以通过 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 云控制台中打开云存储浏览器。
  2. 单击与您要向其授予成员角色的存储桶关联的存储桶溢出菜单(三个点垂直对齐的菜单)。
  3. 选择编辑存储桶权限。
  4. 如果打开的右侧菜单显示“统一:未启用对象级 ACL”,请单击“切换到细粒度”,然后在打开的弹出窗口中 select“细粒度”并单击保存。

尽量在创建存储桶后 90 天之前完成,否则将永久统一权限,您将需要创建一个新存储桶。

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

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

  • 创建新存储库
  • Select 您的存储库并单击添加成员
  • 添加您的服务帐户并设置角色 Artifact Repository Reader

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

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