Cloud Service
Azure Container Registry (ACR)
コンテナイメージや成果物を非公開で保管・配布するマネージドなプライベートレジストリ。AWS の ECR に相当する。
- 1.Docker や OCI 準拠のイメージを安全に保管・配布するプライベートレジストリ。
- 2.マネージド ID とトークンで資格情報を埋め込まずに認証でき、地理レプリケーションで近接配信できる。
- 3.Premium ではタスクによる自動ビルド、コンテンツ信頼、脆弱性スキャン連携が使える。
解決する課題
- コンテナイメージを社内・自分のアプリ専用に非公開で保管したい(公開レジストリに置けない)
- AKS / Container Apps / App Service / Functions などに素早く安全にイメージを配信したい
- イメージの取得にパスワードを埋め込みたくない(マネージド ID でパスワードレス認証したい)
- 複数リージョンの実行環境へ近い場所からイメージを配信して取得を高速化したい
- イメージに脆弱性がないか確認し、改ざんされていないことを保証したい
主要概念と用語
- レジストリ(Registry): イメージを保管する単位。
<名前>.azurecr.ioという固有のログインサーバー名を持つ - リポジトリ(Repository): 同じイメージ名の集合。
myappのように名前空間を表す - タグ(Tag): リポジトリ内のバージョン識別子(例:
myapp:1.0、myapp:latest) - マニフェスト / レイヤー: イメージの実体。OCI 準拠で、Helm チャートや OCI アーティファクトも格納できる
- SKU(Basic / Standard / Premium): 容量・スループット・機能差を表す価格レベル。地理レプリケーションやプライベートエンドポイントは Premium 限定
- ACR Tasks: クラウド側でイメージをビルド・テスト・パッチ適用する仕組み。ベースイメージ更新時の自動再ビルドも可能
- トークン / スコープマップ: リポジトリ単位できめ細かいアクセス権を与える仕組み
- マネージド ID 認証 / 管理者ユーザー: 認証手段。本番ではマネージド ID(パスワードレス)が推奨、管理者ユーザーは検証用途
仕様・制限・クォータ
- OCI および Docker V2 準拠のイメージを保管でき、Helm チャートなどの OCI アーティファクトにも対応する
- ストレージ容量・同時操作スループット・地理レプリケーションの可否は選んだ SKU によって異なる。大容量・高スループット・近接配信が要るほど上位 SKU を選ぶ
- 地理レプリケーションとプライベートエンドポイント、**コンテンツ信頼(署名)**は上位(Premium)でのみ利用できる
- イメージ数・タグ数自体に厳密な上限は設けられていないが、保管容量とスループットは SKU の枠内で扱う
- 不要なイメージを放置すると容量が増えるため、保持ポリシーやタグ削除で整理する運用が前提となる
内部の仕組み
ACR はリージョン内の冗長ストレージにイメージのレイヤーとマニフェストを保管し、docker pull / docker push と同じ標準プロトコルでアクセスできるマネージドサービスです。クライアントはまずログインサーバーに対して認証トークンを取得し、そのトークンでリポジトリ単位の操作(取得・書き込み・削除)を許可されます。
地理レプリケーションを有効にすると、1 つのレジストリが複数リージョンに複製され、利用者は同一のログインサーバー名のまま最も近いリージョンのコピーからイメージを取得します。これにより遠隔地からの取得遅延と下り転送コストを抑えられます。
ACR Tasks はクラウド側のビルド基盤で、ソースのコミットやベースイメージの更新を引き金にイメージを再ビルドし、レジストリへ格納します。ローカルに Docker を持たなくてもクラウドでビルドが完結します。
AKS や Container Apps から ACR を使うときは、実行環境にマネージド ID を付与し、その ID に AcrPull ロールを割り当てます。 これでイメージ取得時にパスワードや接続文字列を埋め込む必要がなくなります。AWS で EC2 / ECS タスクに IAM ロールを付けて ECR を引くのと同じ考え方です。
設計パターン / ベストプラクティス
- **本番認証はマネージド ID + RBAC(AcrPull)**で行い、管理者ユーザーは原則無効化する
- CI/CD はトークン + スコープマップで対象リポジトリだけに最小権限を与える
- イメージタグは
latest固定ではなく、コミットハッシュやバージョン番号で不変タグを付け、ロールバックを容易にする - 複数リージョンに実行環境がある場合は地理レプリケーションで取得を高速化する
- ベースイメージの脆弱性対応は ACR Tasks の自動再ビルドで省力化する
- 保持ポリシーで古い未使用イメージを定期的に整理し、容量とコストを抑える
運用・監視
- イメージの取得・書き込み・削除や認証の状況は Azure Monitor / Log Analytics にメトリクスと診断ログとして集約してクエリする
- イメージが取得できない → AcrPull ロール割り当て、ログインサーバー名、ネットワーク(プライベートエンドポイント / ファイアウォール許可)を確認する
- 容量が増え続ける → 未使用タグの削除と保持ポリシー、不要なリポジトリの整理を行う
- レプリケーション先で古いイメージが見える → レプリケーションの同期状況とプッシュ先リージョンを確認する
コスト
| 項目 | 課金の考え方 |
|---|---|
| レジストリ基本料 | 選んだ SKU(Basic / Standard / Premium)ごとの日割り固定料金 |
| ストレージ | SKU の含有容量を超えた保管分に追加課金 |
| 地理レプリケーション | 複製先リージョンごとに追加課金(Premium) |
| データ転送 | リージョンをまたぐ下り転送に課金。近接配信で抑制できる |
| ACR Tasks | ビルド実行時間に応じた課金 |
不要イメージの放置でストレージが膨らみがちです。保持ポリシーとタグ整理を運用に組み込むのが最も効きます。 近接配信が不要なのに最上位 SKU を選ぶとレジストリ基本料が割高になるため、要件に合った SKU を選びましょう。
セキュリティ
- **マネージド ID + Azure RBAC(AcrPull / AcrPush)**で資格情報を埋め込まずに最小権限アクセスを実現する(AWS の IAM ロール相当)
- 管理者ユーザーは共有パスワードになりやすいため本番では無効化し、検証用途に限定する
- ネットワークはプライベートエンドポイントやファイアウォール規則で公開範囲を絞る
- **コンテンツ信頼(署名)**でイメージの改ざんを検知し、信頼できるイメージだけを取得する
- Microsoft Defender for Containers と連携してイメージの脆弱性をスキャンする
管理者ユーザーのパスワードや接続文字列をマニフェストや環境変数に平文で焼き込むのは NG です。 マネージド ID + RBAC を使えば、資格情報そのものを持たずにイメージを取得でき、漏洩・ローテーションの手間を排除できます。
Well-Architected の観点
- セキュリティ: パスワードレス認証(マネージド ID)、プライベートエンドポイント、コンテンツ信頼、脆弱性スキャンで、保管と配布の両面を保護する
- オペレーショナルエクセレンス: ACR Tasks による自動ビルド・自動パッチと保持ポリシーで、イメージのライフサイクル管理を仕組み化する
- 信頼性: 地理レプリケーションでリージョン障害時の取得経路を冗長化し、実行環境の起動を止めない
- コスト最適化: 要件に合った SKU 選定と保持ポリシー、近接配信による転送コスト抑制でムダを削る
試験で問われるポイント
- 「パスワードを埋め込まずに AKS / Container Apps から ACR を引きたい」→ マネージド ID に AcrPull ロールを割り当てるのが定番の答え
- 地理レプリケーションとプライベートエンドポイントは Premium 限定。これらが要件に出たら SKU は Premium を選ぶ
- CI/CD に最小権限を与えたい → トークンとスコープマップでリポジトリ単位に絞る
- 管理者ユーザーは本番非推奨。共有資格情報になるため無効化が望ましい、という出題に注意
- AWS の相当サービスは ECR。対応関係を問う設問で迷わないこと
関連サービス・比較
| 観点 | Azure Container Registry | AWS ECR |
|---|---|---|
| 位置づけ | マネージドなプライベートコンテナレジストリ | マネージドなプライベートコンテナレジストリ |
| 認証 | マネージド ID + Azure RBAC / トークン | IAM ロール / ポリシー |
| 近接配信 | 地理レプリケーション(Premium) | クロスリージョンレプリケーション |
| イメージスキャン | Defender for Containers 連携 | ECR イメージスキャン |
| クラウド側ビルド | ACR Tasks | 外部の CodeBuild 等を併用 |
| 主な利用先 | AKS / Container Apps / App Service | ECS / EKS / Lambda コンテナ |
ハンズオン / CLI例
# リソースグループとレジストリを作成(名前はグローバルで一意・小文字)
az group create --name demo-rg --location japaneast
az acr create \
--resource-group demo-rg \
--name demoacr0627 \
--sku Standard
# ログインしてイメージをプッシュ
az acr login --name demoacr0627
docker tag myapp:1.0 demoacr0627.azurecr.io/myapp:1.0
docker push demoacr0627.azurecr.io/myapp:1.0
# リポジトリとタグを確認
az acr repository list --name demoacr0627 -o table
az acr repository show-tags --name demoacr0627 --repository myapp -o table
# クラウド側でビルドしてそのまま格納(ローカル Docker 不要)
az acr build \
--registry demoacr0627 \
--image myapp:2.0 .
# AKS にマネージド ID 経由で ACR 取得権限を付与(パスワードレス)
az aks update \
--resource-group demo-rg \
--name demo-aks \
--attach-acr demoacr0627
Azure Service
Azure Container Registry (ACR)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
コンテナ
比較で見る軸
クラウド: Azure / カテゴリ: コンテナ / 難易度: basic
導入後に効く点
マネージド ID とトークンで資格情報を埋め込まずに認証でき、地理レプリケーションで近接配信できる。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Azure
- カテゴリ
- コンテナ
- 難易度
- basic
- 関連資格
- —
- 設計柱
- security / operational
判断チェックリスト
- 自社の用途が「コンテナ / security」に近いか確認する。
- 強みである「Docker や OCI 準拠のイメージを安全に保管・配布するプライベートレジストリ。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。