Cloud Service
Amazon ECR
コンテナイメージを保存・スキャン・配布するフルマネージドなプライベートレジストリサービス
- 1.イメージのプッシュ・プルやライフサイクル管理をマネージドに行えるレジストリ
- 2.IAM とリポジトリポリシーで細かくアクセス制御し、保管時は暗号化される
- 3.脆弱性スキャンやリージョン間レプリケーションを標準機能として備える
Amazon ECR(Elastic Container Registry)は、Docker や OCI 形式のコンテナイメージを保存・管理・配布するためのフルマネージドなレジストリサービスです。ECS、EKS、Lambda、オンプレミス環境などからイメージをプルでき、CI/CD パイプラインのアーティファクト保管先としても利用されます。
解決する課題
コンテナを本番運用する際には、ビルドしたイメージを安全かつ確実に保管し、必要なタイミングで各環境へ配布する仕組みが欠かせません。自前でレジストリを構築すると、可用性の確保、ストレージ容量の管理、認証・認可、TLS 終端、脆弱性スキャンの統合など、多くの運用負担が発生します。
ECR はこれらをマネージドサービスとして提供することで、レジストリ基盤そのものの管理から解放します。AWS の IAM と統合された認証により認証情報の配布が容易になり、保管時の暗号化やイメージスキャンが標準で利用できるため、サプライチェーンのセキュリティも高めやすくなります。さらにリージョン間レプリケーションにより、マルチリージョン構成でのイメージ配布も簡素化されます。
主要概念と用語
- レジストリ: アカウントごと・リージョンごとに用意されるイメージ保管の最上位単位。プライベートレジストリとパブリックレジストリがある。
- リポジトリ: イメージをまとめる名前空間。アプリケーションやコンポーネント単位で作成するのが一般的。
- イメージタグ: 同一リポジトリ内のイメージを識別するラベル。latest などのタグと、内容から計算されるダイジェストの2通りで参照できる。
- イメージダイジェスト: イメージ内容のハッシュ値。タグは上書きされうるが、ダイジェストは内容が変わらない限り同一を指す不変の参照。
- ライフサイクルポリシー: 古いイメージや未使用イメージを自動削除するルール。ストレージコストとリポジトリの肥大化を抑える。
- リポジトリポリシー: リポジトリ単位で誰がプッシュ・プルできるかを定義するリソースベースのポリシー。クロスアカウント共有にも使う。
- イメージスキャン: 保存済みイメージの既知脆弱性を検出する機能。基本スキャンと、継続的に検査する拡張スキャンがある。
- レプリケーション: イメージを別リージョンや別アカウントへ自動複製する設定。
- プルスルーキャッシュ: 外部の上流レジストリのイメージを ECR 経由でキャッシュして取得する仕組み。
仕様・制限・クォータ
ECR は Docker Registry HTTP API V2 および OCI 配布仕様に準拠しており、標準的なコンテナツールチェーンからそのまま利用できます。イメージは保管時に暗号化され、転送時も TLS で保護されます。タグの変更可否は、リポジトリ単位でミュータブルかイミュータブルかを設定でき、イミュータブルにすると同一タグの上書きを防げます。
リポジトリ数や1リポジトリあたりのイメージ数、API のレート制限などにクォータが設定されています。具体的な上限値はリージョンやアカウントによって変わり、引き上げ可能なものも多いため、設計時には最新のサービスクォータを確認してください。大量のプルを伴う構成では、認証トークンの有効期間やスロットリングの挙動を踏まえた設計が重要になります。
Docker クライアント向けの認証トークンには有効期間があります。CI や長時間稼働するノードでは、期限切れによるプル失敗を避けるため、トークンの再取得を仕組みに組み込んでください。
内部の仕組み
イメージのプッシュ・プルは、レイヤー単位で行われます。クライアントはまずレジストリに対して認証を行い、取得したトークンを用いて各レイヤーの存在確認とアップロードまたはダウンロードを実施します。すでに存在するレイヤーは再送されないため、共通のベースイメージを使うと転送量とストレージを節約できます。
実体のレイヤーデータは AWS が管理するストレージに保持され、保管時の暗号化が適用されます。暗号化キーは AWS マネージドの方式と、カスタマー管理のキーを用いる方式から選べます。イメージスキャンは、保存されたイメージのメタデータとレイヤー内容を解析し、脆弱性データベースと突き合わせて結果を生成します。レプリケーションを有効にすると、プッシュをトリガーに対象先へイメージが非同期で複製されます。
設計パターン / ベストプラクティス
リポジトリはアプリケーションやサービス単位で分割し、命名規則を統一すると管理しやすくなります。本番向けリポジトリはタグをイミュータブルにし、デプロイ対象はタグではなくダイジェストで固定参照すると、意図しないイメージ差し替えを防げます。
ライフサイクルポリシーを早期に設定し、古いイメージや未タグ付けイメージを自動削除することでストレージの肥大化を抑えます。マルチリージョン構成では、アプリケーションのデプロイ先と同一リージョンにイメージが存在するよう、レプリケーションで近接配置します。外部のパブリックイメージに依存する場合は、プルスルーキャッシュ経由にすることで上流のレート制限や可用性の影響を緩和できます。
デプロイ時のイメージ参照をタグからダイジェストへ切り替えると、同じタグでも内容が変わるリスクを排除でき、再現性のあるロールアウトとロールバックが可能になります。
運用・監視
ECR は API 呼び出しを証跡として記録できるため、誰がいつプッシュ・プル・削除を行ったかを監査できます。プッシュやスキャン完了などのイベントを契機にした自動処理も構成でき、たとえばスキャンで重大な脆弱性が検出された際に通知や後続処理を起動するといった運用が可能です。
メトリクスを通じてリポジトリのストレージ使用量やプル状況を把握し、ライフサイクルポリシーの妥当性を定期的に見直します。CI/CD と連携する場合は、ビルドからプッシュ、スキャン結果の確認、デプロイまでの一連の流れをパイプラインに組み込み、脆弱性の混入を早期に検知できるようにします。
コスト
ECR の料金は主に、保存しているイメージのストレージ容量と、リージョン外へのデータ転送量に基づきます。同一リージョン内の AWS サービスからのプルでは転送料金がかからないのが一般的で、レプリケーションを使うとリージョン間転送と複製先のストレージが追加で発生します。
コストを抑えるには、ライフサイクルポリシーで不要なイメージを削除し、共通のベースイメージを活用してレイヤーを共有することが有効です。具体的な単価は変動するため、最新の料金ページで確認してください。
未タグ付けイメージや古い世代のイメージを自動削除するルールを設定すると、放置によるストレージ増加を継続的に抑えられます。
セキュリティ
アクセス制御は IAM ポリシーとリポジトリポリシーの組み合わせで行います。IAM でプリンシパルごとの権限を定義し、リポジトリポリシーでリポジトリ単位の許可やクロスアカウント共有を構成します。最小権限の原則に従い、プッシュとプルの権限を役割ごとに分離するのが望ましい設計です。
保管時の暗号化はカスタマー管理キーを指定でき、鍵の管理やローテーション、アクセスログを統制下に置けます。イメージスキャンを有効化して既知脆弱性を継続的に検出し、イミュータブルタグで改ざんや意図しない上書きを防ぎます。VPC からの閉域アクセスが必要な場合は、インターフェース型のプライベート接続を用いることで、インターネットを経由せずにレジストリへアクセスできます。
パブリックレジストリへ誤って機密を含むイメージを公開しないよう、プライベートとパブリックの使い分けを明確にし、公開リポジトリの作成権限は厳格に制限してください。
Well-Architected の観点
セキュリティの柱では、IAM とリポジトリポリシーによる最小権限、保管時暗号化、脆弱性スキャン、イミュータブルタグによる完全性確保が中心になります。これらをデフォルトで組み込むことで、コンテナサプライチェーンの安全性を高められます。
運用上の優秀性の柱では、ライフサイクルポリシーによる自動的なクリーンアップ、イベント駆動の自動処理、CI/CD への統合、API 証跡による監査性が貢献します。レプリケーションやプルスルーキャッシュは可用性と運用効率の両面で寄与し、外部依存の影響を低減します。
試験で問われるポイント
- ECR はプライベートとパブリックの両レジストリを提供し、用途で使い分ける点。
- 認証は IAM ベースで、Docker 用の認証トークンには有効期間がある点。
- リポジトリポリシーを使うとクロスアカウントでのイメージ共有ができる点。
- ライフサイクルポリシーで古いイメージや未タグ付けイメージを自動削除できる点。
- イミュータブルタグで同一タグの上書きを防止できる点。
- イメージスキャンで脆弱性を検出でき、基本と拡張のスキャン方式がある点。
- レプリケーションでリージョン間・アカウント間のイメージ複製が自動化できる点。
- VPC からはインターフェース型のプライベート接続で閉域アクセスできる点。
関連サービス・比較
ECR と比較されやすいのは、外部のパブリックなコンテナレジストリです。AWS 内のワークロードと密に統合し、IAM 認証や閉域アクセス、マネージドな運用を重視する場合は ECR が適しています。一方で広く一般に公開・配布したいイメージや、特定エコシステムの慣習に従う場合は外部レジストリが選ばれることもあります。
| 観点 | Amazon ECR | 外部パブリックレジストリ |
|---|---|---|
| 認証方式 | IAM と統合された認証 | サービス独自のアカウント認証 |
| アクセス制御 | IAM とリポジトリポリシーで細かく制御 | プラン依存で粒度が限られることがある |
| 閉域アクセス | VPC からプライベート接続が可能 | 通常はインターネット経由 |
| 脆弱性スキャン | 標準機能として統合 | 別途連携や追加機能が必要な場合がある |
| 主な用途 | AWS 内ワークロードへの安全な配布 | 広く一般公開するイメージの配布 |
ハンズオン / CLI例
# リポジトリを作成(タグの上書き禁止とプッシュ時スキャンを有効化)
aws ecr create-repository \
--repository-name my-app \
--image-tag-mutability IMMUTABLE \
--image-scanning-configuration scanOnPush=true
# ECR へログイン(認証トークンを取得して docker にパイプ)
aws ecr get-login-password --region ap-northeast-1 \
| docker login --username AWS \
--password-stdin <アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com
# イメージにタグ付けしてプッシュ
docker tag my-app:latest \
<アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:1.0.0
docker push \
<アカウントID>.dkr.ecr.ap-northeast-1.amazonaws.com/my-app:1.0.0
# スキャン結果を確認
aws ecr describe-image-scan-findings \
--repository-name my-app \
--image-id imageTag=1.0.0
AWS Service
Amazon ECRを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
コンテナ
比較で見る軸
クラウド: AWS / カテゴリ: コンテナ / 難易度: basic
導入後に効く点
IAM とリポジトリポリシーで細かくアクセス制御し、保管時は暗号化される
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- コンテナ
- 難易度
- basic
- 関連資格
- DVA-C02 / DOP-C02
- 設計柱
- security / operational
判断チェックリスト
- 自社の用途が「コンテナ / security」に近いか確認する。
- 強みである「イメージのプッシュ・プルやライフサイクル管理をマネージドに行えるレジストリ」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。