GKEを使っていて、docker imageをdocker buildで作るところまでは良かったのですが、docker pushしようとすると権限がないと言われてしまってどうしてもpushできない、という問題にはまりました。
denied: Permission "artifactregistry.repositories.uploadArtifacts" denied on resource "projects/example/locations/asia-northeast1/repositories/example" (or it may not exist)
権限自体はオーナーになっているためフルで割り当てられているのにどうして…?となっていました。
オーナー権限があるため、リポジトリの登録なんかは問題なく出来てしまいます。
でもやはり権限の問題でした。
エラーメッセージから検索してこちらの方のエントリーでわかりました。
dockerイメージをpushする前に、リポジトリ認証の設定が必要で、それはGKEのイメージをpushする先のホスト毎に必要なのに、それをやっていませんでした。
https://cloud.google.com/artifact-registry/docs/docker/store-docker-container-images?hl=ja#auth
イメージを push または pull する前に、Google Cloud CLI を使用して Artifact Registry に対するリクエストを認証します。
リージョン us-central1 の Docker リポジトリの認証を設定するには、次のコマンドを実行します。
$ gcloud auth configure-docker us-central1-docker.pkg.dev
自分はてっきり、
$ gcloud auth configure-docker
すると、gcr.ioとかstaging-k8s.gcr.ioとかのcredHelpersが表示されて
gcloud credential helpers already registered correctly.
と言われるので、もう必要な設定できているのだと思っていました。
が、これだけだとダメで、例えば「asia-northeast1-docker.pkg.dev」へpushするのなら
$ gcloud auth configure-docker asia-northeast1-docker.pkg.dev
として使うGKEのホストを登録してやらないとダメなのでした。