20

I am working on a bitbucket pipeline for pushing image to gc container registry. I have created a service account with Storage Admin role. (bitbucket-authorization@mgcp-xxxx.iam.gserviceaccount.com)

enter image description here

gcloud auth activate-service-account --key-file key.json
gcloud config set project mgcp-xxxx
gcloud auth configure-docker --quiet
docker push eu.gcr.io/mgcp-xxxx/image-name

Although that the login is successful, i get: Token exchange failed for project 'mgcp-xxxx'. Caller does not have permission 'storage.buckets.get'. To configure permissions, follow instructions at: https://cloud.google.com/container-registry/docs/access-control

Can anyone advice on what i am missing?

Thanks!

4

19 回答 19

20

对于一直在这里阅读的任何人。这里的其他建议对我没有帮助,但是我发现还需要Cloud Service Build Account角色。然后storage.buckets.get消失。

这是我推送 docker 图像的最小角色 (2) 设置: 自动角色

然而,Cloud Service Build Account角色添加了更多权限,仅storage.buckets.get. 可以在此处找到确切的权限。

注意:我很清楚Cloud Service Build Account角色也添加了storage.objects.get权限。但是,添加roles/storage.objectViewer并没有解决我的问题。不管它是否获得了storage.objects.get许可。

如果上述方法不起作用,则您可能激活了错误的帐户。这可以通过以下方式解决:

gcloud auth activate-service-account --key-file key.json

如果这不起作用,您可能需要设置 docker 凭证助手:

gcloud auth configure-docker --project <project_name>

最后一点。gcloud在设置角色和通过工具工作之间似乎存在一些延迟。然而,这是最小的,想想不到一分钟的范围。

干杯

于 2020-06-09T10:56:45.560 回答
15

过去,我有另一个具有相同名称和不同权限的服务帐户。在发现服务帐户名称被缓存后,我创建了一个具有不同名称的新服务帐户,并且它正在正确推送。

于 2018-08-16T14:21:39.750 回答
15

您需要登录您的帐户并将项目设置为您想要的项目。您很有可能只是没有登录。

gcloud auth login

gcloud config set project <PROJECT_ID_HERE>

于 2020-07-22T05:06:06.660 回答
4

对于遇到此问题的其他人,我的问题是我没有授予我的服务帐户Storage legacy bucket reader。我只是答应了Object viewer。添加该遗留权限修复了它。

看来 docker 仍在使用旧方法来访问 GCR

于 2019-02-21T17:43:32.223 回答
4

这些是让我将第一个容器推送到 GCE 私有仓库的分步命令:

export PROJECT=pacific-shelter-218
export KEY_NAME=key-name1
export KEY_DISPLAY_NAME='My Key Name'

sudo gcloud iam service-accounts create ${KEY_NAME} --display-name ${KEY_DISPLAY_NAME}
sudo gcloud iam service-accounts list
sudo gcloud iam service-accounts keys create --iam-account ${KEY_NAME}@${PROJECT}.iam.gserviceaccount.com key.json
sudo gcloud projects add-iam-policy-binding ${PROJECT} --member serviceAccount:${KEY_NAME}@${PROJECT}.iam.gserviceaccount.com --role roles/storage.admin
sudo docker login -u _json_key -p "$(cat key.json)" https://gcr.io
sudo docker push  gcr.io/pacific-shelter-218/mypcontainer:v2
于 2019-06-14T21:49:15.770 回答
3

在未来,我发现我不再有任何旧版选项。在这种情况下,我被迫授予完整的存储管理员权限。我会为此向 Google 开一张票,让我推送图片有点极端。这可能会帮助未来的其他人。

于 2019-10-01T18:51:11.810 回答
2

似乎文档已过时 https://cloud.google.com/container-registry/docs/access-control

注意:推送图片需要对象读写权限以及 storage.buckets.get 权限。Storage Object Admin 角色不包含 storage.buckets.get 权限,但 Storage Legacy Bucket Writer 角色包含。

Storage Legacy Bucket Writer角色不再可用。

为了解决权限问题,我向服务帐户添加了两个角色

  • 存储管理员
  • 存储对象查看器(它具有 storage.buckets.get 权限)
于 2021-08-28T12:17:37.700 回答
2

尝试了几件事,但似乎你必须运行gcloud auth configure-docker

于 2019-09-25T18:25:46.217 回答
1

我认为差异在于https://cloud.google.com/container-registry/docs/access-control说,在#permissions_and_roles您需要存储管理员角色才能推送图像的部分。但是,在解释如何配置访问的下一部分中,它说添加存储对象管理员以启用您希望配置的帐户的推送访问。切换到Storage Admin应该可以解决此问题。

于 2020-07-20T00:53:35.753 回答
1

添加服务帐户角色

在谷歌云 IAM 上

Editor Storage object Admin Storage object Viewer

为我修好

于 2020-04-30T17:06:28.160 回答
0

GCR 只是使用 GCS 来存储图像检查您的工件的权限。同一项目中 GCS 中的文件夹。

于 2018-08-16T14:37:58.757 回答
0

对我有用的是 google cloud console -> I AM & Admin -> Setting storage admin as one of the role for the service account 。

于 2021-08-18T16:17:53.267 回答
0

我很难弄清楚这一点。

尽管错误消息相同,但我的问题是我使用的是项目名称,而不是图像 URL 中的项目 ID。

于 2021-01-28T19:41:05.977 回答
0

当我将图像从一个项目推送到另一个项目(故意)并且没有计时我需要授予访问哪个存储桶时,花了太长时间来解决这个问题。

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

总之,要使用 Cloud Build 容器注册表推送图像,您需要将Storage Legacy Bucket Writer授予{storage-region.}artifacts上的{project B -id}@cloudbuild.gserviceaccount.com服务帐户。{project A -名称}.appspot.com存储桶。

于 2021-08-20T14:28:55.713 回答
0

docker push如果 docker 未通过 grc.io 进行身份验证,命令将返回此权限错误

请按照以下步骤操作。

  1. 创建一个服务帐户(或使用现有的)并授予以下权限

    • 存储管理员
    • 存储对象管理员
  2. 生成服务帐户密钥 (JSON) 并下载

  3. docker-credential-gcr configure-docker

  4. 使用服务帐户登录 Docker

    docker login -u _json_key -p "$(cat [SERVICE_ACCOUNT_KEY.json])" https://gcr.io

  5. 尝试将您的 docker 映像推送到 gcr

    docker push gcr.io/<project_id>/<image>:<tag>

于 2021-07-11T18:55:33.037 回答
0

界面方法:

  1. 在https://console.cloud.google.com/iam-admin/iam添加权限
  2. 角色是“存储管理员”,如 [1] 中所述
  3. 然后刷新你的令牌:
    gcloud auth login
    gcloud config set project <PROJECT_ID_HERE>
  1. 再推

可以提供帮助的链接:[1] https://cloud.google.com/storage/docs/access-control/iam-roles [2] https://cloud.google.com/container-registry/docs/access-控制#授予

于 2022-02-02T17:05:12.240 回答
0

推送图片需要对象读写权限以及 storage.buckets.get 权限。Storage Object Admin 角色不包含 storage.buckets.get 权限,但 Storage Legacy Bucket Writer 角色包含。您可以在注释https://cloud.google.com/container-registry/docs/access-control下找到它

所以添加Storage Legacy Bucket Writer为我固定的角色。由于Storage Object Admin role不需要storage.buckets.get权限。

于 2021-07-20T08:09:20.133 回答
0

我创建了一个单独的服务帐户来处理 GCR IO。添加了工件注册表管理员角色(我需要推送和拉取图像),它开始再次将图像推送到 GCR

于 2021-04-15T19:30:40.070 回答
0

在我的例子中,这个错误是由 Storage API(用于将 Google Container Registry 镜像推送到)被放置在 VPC 服务边界内引起的。

如果需要,可以通过查看可通过VPC Service Controls 故障排除页面访问的日志来进一步确认和诊断这一点。

于 2022-02-28T11:02:45.973 回答