はじめに
コンテナ開発を進める中で、ビルドしたイメージをどこに保存し、どのようにデプロイ環境へ配布するかは重要な課題です。Docker Hubなどのパブリックレジストリは手軽に利用できますが、企業のプロダクション環境では、アクセス制御やセキュリティの観点からプライベートなレジストリが求められます。
Amazon ECR(Elastic Container Registry)は、AWSが提供するフルマネージドなコンテナレジストリサービスです。本記事では、ECRの基本機能からリポジトリの作成、イメージのプッシュ/プル、そして権限管理とセキュリティ設定まで、実践的な手順を解説します。
この記事を読むことで、以下のことが理解できるようになります。
- ECRの特徴とDocker Hubなど他のレジストリとの違い
- AWS CLIとマネジメントコンソールによるリポジトリ作成手順
- コンテナイメージのプッシュとプルの具体的なコマンド
- IAMポリシーとリポジトリポリシーによるアクセス制御
- イメージスキャンとライフサイクルポリシーによるセキュリティ強化
ECRの概要とメリット
ECRとは
Amazon ECRは、Dockerコンテナイメージを保存、管理、デプロイするためのAWSマネージドサービスです。AWS環境との統合が深く、ECS、EKS、Fargate、App Runnerといったコンテナサービスとシームレスに連携できます。
flowchart LR
subgraph Development["開発環境"]
Dev["開発者"]
Docker["Docker CLI"]
end
subgraph ECR["Amazon ECR"]
Registry["プライベートレジストリ"]
Repo1["リポジトリA"]
Repo2["リポジトリB"]
Registry --> Repo1
Registry --> Repo2
end
subgraph Runtime["実行環境"]
ECS["Amazon ECS"]
EKS["Amazon EKS"]
Fargate["AWS Fargate"]
end
Dev --> Docker
Docker -->|push| Registry
Registry -->|pull| ECS
Registry -->|pull| EKS
Registry -->|pull| FargateECRの主なメリット
ECRを採用する主なメリットは以下の通りです。
| メリット | 説明 |
|---|---|
| フルマネージド | インフラ管理不要で、スケーラビリティと可用性をAWSが担保 |
| AWS統合 | IAM、CloudTrail、EventBridgeなどAWSサービスとネイティブ連携 |
| セキュリティ | 保存時の暗号化、転送時のTLS暗号化、脆弱性スキャン機能を標準提供 |
| 高可用性 | 複数のAZにイメージを自動複製し、99.9%の可用性を実現 |
| 低レイテンシ | 同一リージョン内のAWSサービスからのプルは高速かつ無料 |
プライベートリポジトリとパブリックリポジトリ
ECRには2種類のリポジトリタイプがあります。
プライベートリポジトリ
組織内でのみ使用するイメージを保存します。IAMによるアクセス制御が適用され、認証なしではアクセスできません。企業のプロダクション環境では、ほとんどの場合このタイプを使用します。
パブリックリポジトリ(ECR Public)
オープンソースプロジェクトなど、誰でもプルできるイメージを公開する場合に使用します。Docker Hubの代替として利用でき、AWSアカウントで認証すれば月5TBまで無料で転送できます。
料金体系
ECRの料金は、ストレージ使用量とデータ転送量に基づいて計算されます。
| 項目 | 料金(東京リージョン) |
|---|---|
| ストレージ | 0.10 USD/GB/月 |
| データ転送(同一リージョン内) | 無料 |
| データ転送(リージョン外へ) | 0.09 USD/GB〜 |
| 無料利用枠 | 500 MB/月(プライベート、12か月間) |
同一リージョン内のECS、EKS、Fargateへのイメージプルは無料のため、実質的なコストはストレージ料金のみとなるケースが多いです。
リポジトリ作成手順
前提条件
ECRを操作するには、以下の環境が必要です。
- AWS CLIがインストールされ、認証情報が設定済み
- Dockerがインストールされている
- ECRに対する操作権限を持つIAMユーザーまたはロール
IAMユーザーに必要な最小権限については、後述の「権限管理とセキュリティ」セクションで解説します。
マネジメントコンソールでの作成
AWSマネジメントコンソールからECRリポジトリを作成する手順は以下の通りです。
- AWSマネジメントコンソールにログインし、「ECR」を検索してサービス画面を開く
- 左メニューの「Repositories」をクリック
- 「リポジトリを作成」ボタンをクリック
- 以下の設定を入力
| 設定項目 | 推奨値 | 説明 |
|---|---|---|
| 可視性 | プライベート | 組織内利用の場合 |
| リポジトリ名 | my-app | 小文字、数字、ハイフン、スラッシュが使用可能 |
| タグのイミュータビリティ | 有効 | 同一タグの上書きを防止 |
| プッシュ時にスキャン | 有効 | 脆弱性の自動検出 |
| 暗号化設定 | AES-256 | デフォルトで十分な場合が多い |
- 「リポジトリを作成」をクリックして完了
AWS CLIでの作成
AWS CLIを使用してリポジトリを作成する場合は、以下のコマンドを実行します。
|
|
作成されたリポジトリの情報を確認するには、以下のコマンドを使用します。
|
|
実行結果の例は以下の通りです。
|
|
イメージのプッシュとプル
ECRへの認証
ECRにイメージをプッシュまたはプルするには、まずDockerクライアントをECRに認証する必要があります。認証トークンは12時間有効です。
|
|
123456789012の部分は、自身のAWSアカウントIDに置き換えてください。アカウントIDは以下のコマンドで確認できます。
|
|
認証が成功すると、「Login Succeeded」というメッセージが表示されます。
イメージのプッシュ
ローカルでビルドしたDockerイメージをECRにプッシュする手順は以下の通りです。
|
|
プッシュが完了したら、リポジトリ内のイメージを確認できます。
|
|
イメージのプル
ECRからイメージをプルする手順は以下の通りです。認証が済んでいれば、通常のdocker pullコマンドと同様に実行できます。
|
|
タグ付けのベストプラクティス
コンテナイメージのタグ付けは、運用の効率性とトレーサビリティに大きく影響します。
| タグ形式 | 例 | 用途 |
|---|---|---|
| セマンティックバージョン | v1.2.3 | リリースバージョン管理 |
| Gitコミットハッシュ | abc1234 | ビルドの追跡 |
| ビルド番号 | build-456 | CI/CDパイプラインとの連携 |
| 日付 | 2026-01-25 | 日次ビルドの識別 |
latestタグの使用は本番環境では推奨されません。どのバージョンがデプロイされているか不明確になり、ロールバックが困難になるためです。
権限管理とセキュリティ
IAMポリシーによるアクセス制御
ECRへのアクセスは、IAMポリシーで制御します。用途に応じた最小権限の原則に基づいたポリシー設計が重要です。
読み取り専用アクセス(プル用)
ECSタスクロールやEC2インスタンスプロファイルに付与する、イメージのプルのみを許可するポリシーです。
|
|
プッシュとプル両方のアクセス(CI/CD用)
CI/CDパイプラインでイメージをビルド・プッシュするための権限です。
|
|
管理者アクセス
リポジトリの作成・削除を含む全ての操作を許可するポリシーです。
|
|
リポジトリポリシーによるクロスアカウントアクセス
複数のAWSアカウント間でイメージを共有する場合は、リポジトリポリシーを使用します。
|
|
repository-policy.jsonの内容は以下の通りです。
|
|
この設定により、アカウント987654321098からのイメージプルが許可されます。
イメージスキャンによる脆弱性検出
ECRには、コンテナイメージの脆弱性を検出するスキャン機能が組み込まれています。
基本スキャン
AWSが提供する無料のスキャン機能です。CVE(Common Vulnerabilities and Exposures)データベースに基づいて、OSパッケージの脆弱性を検出します。
|
|
拡張スキャン(Enhanced Scanning)
Amazon Inspectorと連携した高度なスキャン機能です。OSパッケージに加えて、プログラミング言語のパッケージ(npm、pip、Maven等)の脆弱性も検出できます。追加料金が発生しますが、より包括的なセキュリティ評価が可能です。
ライフサイクルポリシーによるコスト最適化
古いイメージを自動削除するライフサイクルポリシーを設定することで、ストレージコストを抑制できます。
|
|
lifecycle-policy.jsonの内容は以下の通りです。
|
|
イミュータブルタグの活用
タグのイミュータビリティを有効にすると、一度プッシュしたタグを上書きできなくなります。これにより、意図しないイメージの置き換えを防止し、デプロイの再現性を保証できます。
|
|
まとめ
本記事では、Amazon ECRによるコンテナイメージ管理の基本を解説しました。
ECRは、AWS環境でコンテナを運用する際の標準的なレジストリサービスです。IAMによるきめ細かなアクセス制御、イメージスキャンによる脆弱性検出、ライフサイクルポリシーによるコスト最適化など、エンタープライズ向けの機能が充実しています。
ECRを効果的に活用するためのポイントは以下の通りです。
- リポジトリ作成時にイミュータブルタグとプッシュ時スキャンを有効化する
- IAMポリシーで最小権限の原則に基づいたアクセス制御を実装する
- ライフサイクルポリシーで古いイメージを自動削除してコストを抑える
- CI/CDパイプラインと連携してイメージのビルドとプッシュを自動化する
次のステップとして、ECSやEKSとの連携、マルチリージョンレプリケーション、GitHub ActionsやCodePipelineとのCI/CD統合などを学ぶことで、より実践的なコンテナ運用が可能になります。