Amazon ECRの新機能「プッシュ時の自動リポジトリ作成」をCLIで試してみた

Amazon ECRの新機能「プッシュ時の自動リポジトリ作成」をCLIで試してみた

Amazon ECRでプッシュ時にリポジトリを自動作成する機能を検証。テンプレート設定が必須である点や、プレフィックスの解釈、IAM権限の依存関係についてCLIで裏付けを取りました。CI/CD構築の工数削減に役立つ機能です。
2025.12.21

2025年12月19日、Amazon ECRにおいて、イメージプッシュ時にリポジトリが存在しない場合、自動的にリポジトリを作成する機能がサポートされました。

https://aws.amazon.com/about-aws/whats-new/2025/12/amazon-ecr-creating-repositories-on-push/

従来、CI/CDパイプラインでイメージをプッシュするには、リポジトリの事前作成や、スクリプトによる存在確認ロジックの実装が必須でした。本機能により、事前に定義した「リポジトリ作成テンプレート」に合致すれば、事前の準備なしにプッシュのみでリポジトリを用意することが可能となります。

本記事では、AWS CLIを使用して本機能の挙動、特にテンプレートのプレフィックス一致条件やIAM権限との関係について検証した結果を紹介します。


1. 検証環境とテンプレート設定

本機能を利用するには、「リポジトリ作成テンプレート(Repository Creation Template)」の作成が必須です。検証にあたり、以下の構成でテンプレートを作成しました。

テンプレートの仕様

  • 適用タイミング: CREATE_ON_PUSH
  • 対象プレフィックス: test-repo
  • リポジトリ設定: 暗号化(AES256)、タグ変更可能(MUTABLE)

テンプレート作成(CLI)

まず、現状のテンプレート設定が存在しないことを確認しました。

aws ecr describe-repository-creation-templates

{
    "repositoryCreationTemplates": [],
    "registryId": "123456789012"
}

続いて、以下のコマンドでテンプレートを作成しました。

aws ecr create-repository-creation-template \
  --applied-for CREATE_ON_PUSH \
  --description "Auto-create template for push operations" \
  --prefix test-repo

実行結果(JSON)より、テンプレートが正しく作成されたことを確認しました。

{
    "repositoryCreationTemplate": {
        "prefix": "test-repo",
        "description": "Auto-create template for push operations",
        "encryptionConfiguration": {
            "encryptionType": "AES256"
        },
        "imageTagMutability": "MUTABLE",
        "appliedFor": [
            "CREATE_ON_PUSH"
        ],
        "createdAt": "2025-12-20T15:33:02.465000+00:00"
    }
}

2. 動作検証(正常系)

テンプレートのプレフィックスに合致するリポジトリ名でプッシュを行い、リポジトリが自動作成されるか確認しました。

検証用イメージの準備

# Dockerfile作成
cat > Dockerfile << EOF
FROM alpine:latest
RUN echo "ECR Auto-Create Test Image" > /test.txt
CMD ["cat", "/test.txt"]
EOF

# ビルド
docker build -t ecr-auto-create-test:latest .

# ECRログイン
aws ecr get-login-password --region us-east-1 | \
  docker login --username AWS --password-stdin \
  123456789012.dkr.ecr.us-east-1.amazonaws.com

プッシュ実行と自動作成の確認

プレフィックス test-repo を含むリポジトリ名 test-repo/demo に対してプッシュを実施しました。

# タグ付け
docker tag ecr-auto-create-test:latest \
  123456789012.dkr.ecr.us-east-1.amazonaws.com/test-repo/demo:latest

# プッシュ
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/test-repo/demo:latest

実行結果:

The push refers to repository [123456789012.dkr.ecr.us-east-1.amazonaws.com/test-repo/demo]
369f4e6f5f37: Pushed
7bb20cf5ef67: Pushed
latest: digest: sha256:64a15d806c440d828d6a0a8deb5345c39725e444f594f758ac5afdf32da4da41 size: 735

エラーなくプッシュが完了しました。続いて、リポジトリが実際に作成されているか確認しました。

aws ecr describe-repositories --repository-names test-repo/demo

{
    "repositories": [
        {
            "repositoryName": "test-repo/demo",
            "repositoryUri": "123456789012.dkr.ecr.us-east-1.amazonaws.com/test-repo/demo",
            "createdAt": "2025-12-20T15:33:31.507000+00:00",
            "imageTagMutability": "MUTABLE",
            "encryptionConfiguration": {
                "encryptionType": "AES256"
            }
        }
    ]
}

createdAt のタイムスタンプおよび設定値から、プッシュをトリガーとしてリポジトリが新規作成されたことを確認しました。

3. 動作検証(エラー系・仕様確認)

どのような条件下で自動作成が失敗するか、または意図しない挙動となるか確認しました。

検証A:プレフィックス不一致

テンプレートのプレフィックス test-repo に合致しない名称 different-prefix でプッシュを試みました。

docker tag ecr-auto-create-test:latest \
  123456789012.dkr.ecr.us-east-1.amazonaws.com/different-prefix:latest

docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/different-prefix:latest

実行結果:

name unknown: The repository with name 'different-prefix' does not exist in the registry with id '123456789012'

想定通り name unknown エラーとなり、リポジトリは作成されませんでした。

検証B:プレフィックス区切り文字の挙動

プレフィックス test-repo がどのように解釈されるか確認するため、test-repo-backend (スラッシュなしで接続)で試行しました。

docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/test-repo-backend:latest

実行結果:

name unknown: The repository with name 'test-repo-backend' does not exist in the registry with id '123456789012'

この結果から、テンプレートのプレフィックス test-repo は内部的に test-repo/ (ディレクトリ階層)として扱われていることがログより判明しました。

検証C:IAM権限の依存関係

「自動作成」において、実行ユーザー(IAMロール)に ecr:CreateRepository 権限が必要かどうかを検証しました。

以下のポリシーを持つIAMロールを作成し、AssumeRoleして実行しました。

  • ecr:GetAuthorizationToken
  • ecr:PutImage 等のプッシュに必要な権限
  • ecr:CreateRepository は付与しない
# 権限を制限した状態でプッシュ
docker push 123456789012.dkr.ecr.us-east-1.amazonaws.com/test-repo/restricted-test:latest

実行結果:

The push refers to repository [123456789012.dkr.ecr.us-east-1.amazonaws.com/test-repo/restricted-test]
...
latest: digest: sha256:64a15d806c440d828d6a0a8deb5345c39725e444f594f758ac5afdf32da4da41 size: 735

プッシュは成功し、リポジトリが作成されました。
この挙動から、テンプレート条件に合致する場合、実行ユーザーに ecr:CreateRepository 権限がなくともリポジトリ作成が行われる 仕様であることが確認できました。

まとめ

Amazon ECRのプッシュ時自動リポジトリ作成機能を検証しました。

今回のアップデートにより、テンプレート条件に合致する場合、プッシュ実行ユーザー(CI/CDロール等)には ecr:CreateRepository 権限の付与が不要になる事が確認できました。

これにより、開発者やCIツールによる無秩序なリポジトリ乱立を適切なテンプレートで管理しつつ、「最小権限の原則」に基づいたセキュアかつ効率的なパイプラインが実現できる可能性があります。動的な環境構築が求められる現場において、セキュリティと利便性を両立させる手段としてお試しください。

この記事をシェアする

FacebookHatena blogX

関連記事