やりたいこと
- AWS CLIでECRにログインする。
- AWS CLIでECRにDockerイメージをプッシュする。
動作環境
OS | Ubuntu |
バージョン | 22.04.3 |
動作環境 | WSL2 |
前提条件
- Linux 用 Windows サブシステム (WSL)でUbuntuをインストールしていること
- Dockerをインストールしていること
- ECR Repositoryを作成していること
エラーについて
AWS CLIでECRへのログインコマンドを入力したけどログインが上手くいかない。。。
An error occurred (AccessDeniedException) when calling the GetAuthorizationToken operation: User: arn:aws:iam::125083437861:user/xxxxxxx is not authorized to perform: ecr:GetAuthorizationToken on resource: * because no identity-based policy allows the ecr:GetAuthorizationToken action
ECRへ接続する前に認証トークンを取得してからログインするため、ecr:GetAuthorizationToken アクションが許可されていないとログインできないようです。
because no identity-based policy allows the ecr:GetAuthorizationToken action
ecr:GetAuthorizationTokenは以下のAWS管理ポリシーに含まれています。
- AmazonElasticContainerRegistryPublicFullAccess
- AmazonElasticContainerRegistryPublicPowerUser
しかしユーザにアタッチしてみましたが上手くいきませんできた。。。
ECRへのアクセス権を付与するためのポリシー設定が必要なようです。
ECRにログインするための設定
ECRへのアクセス権を付与するためポリシーを作成します。
Amazon Elastic Container Registry のアイデンティティベースのポリシーの例 - Amazon ECR
デフォルトでは、ユーザーおよびロールには Amazon ECR リソースを作成または変更するアクセス許可がありません。また、、 AWS Command Line Interface (AWS CLI) AWS Management Console、または AWS API を使用してタスクを実行することはできません。IA...
赤色箇所のarnはイメージをプッシュしたいリポジトリに修正する。
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"ListImagesInRepository",
"Effect":"Allow",
"Action":[
"ecr:ListImages"
],
"Resource":"arn:aws:ecr:ap-northeast-1:123456789012:repository/test"
},
{
"Sid":"GetAuthorizationToken",
"Effect":"Allow",
"Action":[
"ecr:GetAuthorizationToken"
],
"Resource":"*"
},
{
"Sid":"ManageRepositoryContents",
"Effect":"Allow",
"Action":[
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:GetRepositoryPolicy",
"ecr:DescribeRepositories",
"ecr:ListImages",
"ecr:DescribeImages",
"ecr:BatchGetImage",
"ecr:InitiateLayerUpload",
"ecr:UploadLayerPart",
"ecr:CompleteLayerUpload",
"ecr:PutImage"
],
"Resource":"arn:aws:ecr:ap-northeast-1:123456789012:repository/test"
}
]
}
IAMユーザに作成したポリシーをアタッチしたらOK
設定ができたらマネジメントコンソールのECRリポジトリのプッシュコマンドの表示を押下する。
以下のコマンド一覧が表示されるので手順に従ってコマンドを入力する。
- ECRへのログイン
- Dockerイメージの構築
- Dockerイメージのタグ付け
- Dockerイメージをプッシュ
ECRへのログイン
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin 125083437861.dkr.ecr.ap-northeast-1.amazonaws.com
Dockerイメージの構築
docker build -t test .
Dockerイメージのタグ付け
docker tag test:latest 125083437861.dkr.ecr.ap-northeast-1.amazonaws.com/test:latest
Dockerイメージをプッシュ
docker push 125083437861.dkr.ecr.ap-northeast-1.amazonaws.com/test:latest
マネジメントコンソールからプッシュできていることの確認!成功!