我正在研究将图像推送到gc容器注册表的位桶管道。 我已经创建了一个具有Storage Admin角色的服务帐户。 (bitbucket-authorization@mgcp-xxxx.iam.gserviceaccount.com)
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
尽管登录成功,但我得到: 项目'mgcp-xxxx'的令牌交换失败。呼叫者没有权限“ storage.buckets.get”。 要配置权限,请按照以下说明进行操作:https://cloud.google.com/container-registry/docs/access-control
任何人都可以对我所缺少的东西提出建议吗?
谢谢!
答案 0 :(得分:6)
对于在这里一直阅读的任何人。此处的其他建议对我没有帮助,但是我发现还需要 Cloud Service Build Account 角色。然后storage.buckets.get
消失。
云服务构建帐户角色添加了更多storage.buckets.get
权限。确切的权限可以在here中找到。
注释:我很清楚 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
工具设置角色和使用角色之间似乎存在一些延迟。但是,这是最小的,请考虑不到一分钟的范围。
欢呼
答案 1 :(得分:3)
过去,我有另一个具有相同名称和不同权限的服务帐户。 发现服务帐户名称已缓存后,我创建了一个具有不同名称的新服务帐户,并且该帐户已正常推送。
答案 2 :(得分:2)
您需要登录到您的帐户并将该项目设置为所需的项目。您很有可能尚未登录。
gcloud auth login
gcloud config set project <PROJECT_ID_HERE>
答案 3 :(得分:1)
添加服务帐户角色
在Google云端IAM上
Editor
Storage object Admin
Storage object Viewer
为我修复
答案 4 :(得分:0)
GCR仅使用GCS来存储图像,以检查工件上的权限。文件夹在同一项目中的GCS中。
答案 5 :(得分:0)
对于遇到此问题的其他人,我的问题是我没有授予我的服务帐户Storage legacy bucket reader
。我只授予了Object viewer
。添加该旧版权限可以解决该问题。
似乎docker仍在使用旧方法访问GCR
答案 6 :(得分:0)
这些是循序渐进的命令,使我能够将第一个容器推送到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
答案 7 :(得分:0)
尝试了几件事,但看来您必须运行gcloud auth configure-docker
答案 8 :(得分:0)
在将来,我发现我不再有任何旧选项。在这种情况下,我被迫授予完整的Storage Admin。我将为此向Google开票,这让我推图片有点极端。这可能会帮助将来的其他人。
答案 9 :(得分:0)
我认为差异是https://cloud.google.com/container-registry/docs/access-control说,在#permissions_and_roles
部分中,您需要 Storage Admin 角色才能推送图像。但是,在下一节说明如何配置访问权限的部分中,它说明要添加存储 Object 管理员以为您要配置的帐户启用推送访问。切换到存储管理员应该可以解决该问题。
答案 10 :(得分:0)
我很难弄清楚这一点。
尽管错误消息相同,但我的问题是我在图像 URL 中使用了项目名称而不是项目 ID。
答案 11 :(得分:0)
我创建了一个单独的服务帐户来处理 GCR IO。添加了 Artifact Registry Administrator 角色(我需要推送和拉取图像)并开始再次将图像推送到 GCR
答案 12 :(得分:0)
docker push
命令将返回此权限错误
按照以下步骤操作。
创建一个服务帐户(或使用现有的)并授予以下权限
生成服务帐号密钥 (JSON) 并下载
运行docker-credential-gcr configure-docker
Docker 使用服务帐号登录
docker login -u _json_key -p "$(cat [SERVICE_ACCOUNT_KEY.json])" https://gcr.io
尝试将您的 docker 镜像推送到 gcr
docker push gcr.io/<project_id>/<image>:<tag>
答案 13 :(得分: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
权限。