【AWS】ECRのpublicへpushする方法


はじめに

2020年12月にできたパブリックリポジトリへプッシュする方法です。

ECRプライベートリポジトリへはイメージをプッシュしたことありましたが、
いくつかつまずいたのでこのポイントを載せます!

・AWS-CLIのバージョン
・IAM設定

AWSCLIのバージョンアップ

バージョン確認。

$ aws --version
aws-cli/2.0.8 Python/*****

私の場合はバージョンが古く後ほど指定するコマンドが認識されませんでしたので、
先にバージョンアップします。

公式ドキュメントの方法でバージョンアップ。
macOS での AWS CLI バージョン 2 のインストール

$ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
$ sudo installer -pkg AWSCLIV2.pkg -target /

念のため確認。

$ aws --version
aws-cli/2.2.31 Python/3.8.8 Darwin/19.6.0 exe/x86_64 prompt/off

ECRのパブリックリポジトリ作成

AWSコンソール画面からリポジトリを作成します。
サービスでElastic Container Registryを選択。

下のようにpublicタブを選択しリポジトリを作成ボタンを押して作成する。

作成後リポジトリごとのURIはタグ付けやプッシュする際に使用する。

プッシュ方法

まずはリポジトリに対して認証させます。

下の図のようにプッシュコマンドの表示ボタンを押すとその方法がでます。

ユーザーごとに専用のコマンドが表示されるのでそれをコピペして実行します。

$ aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/(それぞれのエイリアス)

Login Succeeded

ログイン成功したらDocker Hubプライベートリポジトリと同じようにimageにタグ付けします。方法もそこに記載されています。

$ docker tag blog_app:latest public.ecr.aws/(それぞれのエイリアス)/blog_app:latest

blog_app:latestのイメージ名は読み替えてください。
タグ名変更したらプッシュします。

$ docker push public.ecr.aws/(それぞれのエイリアス)/blog_app:latest

このとき私はエラーとなりました(ToT)

An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:iam::(アカウントID):user/(ユーザー名) is not authorized to perform: ecr-public:GetAuthorizationToken on resource: *

あなたはecr-publicへ権限ありませんよとなってますが、AmazonEC2ContainerRegistryFullAccessはアタッチ済みでした。

IAM設定

IAMの既存のポリシーをよく調べてみたらAmazonElasticContainerRegistryPublicFullAccessというポリシーがありました(**)

私の検索方法が悪くなかなかこのポリシーを見つけることができませんでした。。。

赤線のやつです!

これで再度pushコマンドすれば無事アップロードされます!

私もECRは約半年以上振りに触ってつまずきました。
調べたら2020年末に追加された機能で その間にCLIIAMもアップデートされてたんでしょうね(^ー^;