'Google Cloud Container Registry/Artifact Registry Permissions
I'm trying to push containers to the Google Cloud Container Registry or the Google Cloud Artifact Registry on Windows 10 using the Google Cloud SDK. I'm getting a similar permissions error from both services however I can't seem to figure out why. For the Container Registry, on push I get:
> docker push us.gcr.io/{PROJECT}/{PATH}/{CONTAINER}:{TAG}
unauthorized: You don't have the needed permissions to perform this operation,
and you may have invalid credentials. To authenticate your request, follow the
steps in: https://cloud.google.com/container-registry/docs/advanced-authentication
For the Artifact Registry, on push I get:
> docker push northamerica-northeast1-docker.pkg.dev/{PROJECT}/{REPOSITORY}/{CONTAINER}:{TAG}
denied: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource
"projects/opallabs/locations/northamerica-northeast1/repositories/domar" (or it may not exist)
I've run gcloud init
and gcloud auth configure-docker
a few times. I can create and edit Google Cloud resources from the command line using gcloud
without any trouble. I'm the owner of the Google Cloud project but I've assigned myself Storage Admin, Artifact Registry Administrator, Artifact Registry Repository Administrator just to be safe. However, when I run gcloud auth print-access-token
and analyze the token with the https://www.googleapis.com/oauth2/v1/tokeninfo
endpoint, the only scopes that appear are:
{
...
"scope": "openid https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/cloud-
platform https://www.googleapis.com/auth/appengine.admin https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/accounts.reauth",
...
}
Missing are the https://www.googleapis.com/auth/devstorage.read_write
or the https://www.googleapis.com/auth/devstorage.full_control
scopes which should probably be there according to the troubleshooting link, but I'm not sure why they would be missing. I had this working on my last Windows 10 machine by following the setup instructions, but the same setup on my new machine doesn't seem to be working.
My docker credential helper entries:
{
"credHelpers": {
"gcr.io": "gcloud",
"us.gcr.io": "gcloud",
"eu.gcr.io": "gcloud",
"asia.gcr.io": "gcloud",
"staging-k8s.gcr.io": "gcloud",
"marketplace.gcr.io": "gcloud",
"northamerica-northeast1-docker.pkg.dev": "gcloud",
"us-central1-docker.pkg.dev": "gcloud"
}
}
> docker-credential-gcloud list
{
"https://asia.gcr.io": "_dcgcloud_token",
"https://eu.gcr.io": "_dcgcloud_token",
"https://gcr.io": "_dcgcloud_token",
"https://marketplace.gcr.io": "_dcgcloud_token",
"https://staging-k8s.gcr.io": "_dcgcloud_token",
"https://us.gcr.io": "_dcgcloud_token"
}
gcloud -v
Google Cloud SDK 311.0.0
beta 2020.09.18
bq 2.0.60
core 2020.09.18
gsutil 4.53
docker -v
Docker version 19.03.13, build 4484c46d9d
Solution 1:[1]
Thanks to the link provided by Muss Rahman I've been able to authenticate by going to "Settings" -> "Command Line" in Docker Desktop and unchecking the "Enable cloud experience" switch. The setting seems to be absent from the docker manual so I'm not sure how it impacts the authentication, all I know is that for Docker version 19.03.13, build 4484c46d9d on Windows, if you want to authenticate using gcloud it needs to be disabled.
Solution 2:[2]
Try to configure with:
gcloud auth configure-docker northamerica-northeast1-docker.pkg.dev
Solution 3:[3]
I got this issue when I misspelled my project name. Double check your paths match the instructions at https://cloud.google.com/artifact-registry/docs/docker/pushing-and-pulling#auth
Solution 4:[4]
You will have to provide project-specific or repo-specific permissions. After a lot of research, I got to know.
https://cloud.google.com/artifact-registry/docs/access-control#grant-repo
You can give your IAM email and give artifact registry writer.
Note: even if you give owner permissions to the IAM to the whole project it won't work as the Artifact registry itself has its own permission system. This took a while to identify
Solution 5:[5]
in case anyone else runs into this. the issue for me was that you must use the PROJECT-ID
this is not the same as the project name
for example if your project is called example
you may have had:
- tag:
docker tag image:tag northamerica-northeast1-docker.pkg.dev/example/repo-name/image:tag
- push:
docker push northamerica-northeast1-docker.pkg.dev/example/repo-name/image:tag
this seems silly but very well may be your issue. if it is then
- list projects to get the
PROJECT-ID
:gcloud projects list
(note: it is the first column value, not the "project number" in the last column) - tag:
docker tag image:tag northamerica-northeast1-docker.pkg.dev/<PROJECT-ID>/repo-name/image:tag
- push:
docker push northamerica-northeast1-docker.pkg.dev/<PROJECT-ID>/repo-name/image:tag
Solution 6:[6]
I had this issue on CircleCi with docker push to google cloud artifact registry and getting this error.
denied: Permission "artifactregistry.repositories.downloadArtifacts" denied on resource
After hours of struggling, I found the solution, the issue is the new docker's BuildKit feature that google cloud artifact registry does not support this new architecture for images at the moment and needs to be turned off.
DOCKER_BUILDKIT=0 docker push <IMAGE-NAME>
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | THawke |
Solution 2 | Mike |
Solution 3 | rolznz |
Solution 4 | Deepak Bandela |
Solution 5 | vampiire |
Solution 6 | alireza-bonab |