Cloud Service
Artifact Registry
Google Cloud のフルマネージドなアーティファクト管理サービス。コンテナイメージと言語パッケージを一元的に保存・配布できる。AWS の Amazon ECR と CodeArtifact に相当。
- 1.コンテナイメージと言語パッケージを同じ仕組みで保管できるマネージドレジストリ。
- 2.リポジトリ単位でフォーマットと地域を決め、IAM で誰がpush/pullできるか制御する。
- 3.脆弱性スキャンやリモート/仮想リポジトリで供給網のセキュリティと配信を最適化する。
解決する課題
ビルドしたコンテナイメージやライブラリを、自前のサーバーやストレージを用意せずに安全に保管・配布できる場所が手に入ります。
- ビルドしたコンテナイメージを一元管理し、Cloud Run / GKE / Compute Engine からそのまま pull したい
- npm・Maven・Python(PyPI)・Go・Apt・Yum など言語/OS パッケージを社内レジストリとして持ちたい
- 外部の公開レジストリ(Docker Hub・npm 公式など)への依存をキャッシュして可用性と速度を上げたい
- 保存したイメージを脆弱性スキャンし、安全なものだけをデプロイしたい
- リポジトリへの push/pull を IAM できめ細かく制御したい
主要概念と用語
- リポジトリ(repository): アーティファクトを入れる単位。作成時にフォーマット(Docker / npm / Maven / Python など)とロケーション(地域)を1つ決める。最上位の管理単位
- フォーマット: そのリポジトリが扱う種類。コンテナイメージのほか各種言語/OS パッケージに対応
- アーティファクト: 保存する実体。コンテナイメージや各言語のパッケージ
- イメージのパス:
ロケーション-docker.pkg.dev/プロジェクトID/リポジトリ名/イメージ名:タグの形式で参照 - 標準リポジトリ(standard): 自分でアーティファクトを push して保管する通常のリポジトリ
- リモートリポジトリ(remote): Docker Hub や npm 公式など外部レジストリのキャッシュとして振る舞う読み取り用リポジトリ
- 仮想リポジトリ(virtual): 複数のリポジトリ(標準・リモート)を1つのエンドポイントに束ねる入口。優先順位を付けて検索できる
- タグとダイジェスト: タグは可変の別名、ダイジェスト(sha256)は内容に固定で紐づく不変の識別子
仕様・制限・クォータ
- リポジトリはフォーマットとロケーションを作成時に固定する(後から種類は変えられない)
- ロケーションはリージョンまたはマルチリージョンを選べる。デプロイ先と同じ地域に置くと pull が速くコスト効率も良い
- 認証は IAM ベース。Docker クライアントには
gcloud auth configure-dockerで認証ヘルパーを設定する - 同一リポジトリ内で複数フォーマットは混在できない(Docker 用と npm 用は別リポジトリ)
- ストレージ容量・リクエスト数などに各種クォータ/上限があり、必要に応じて引き上げ申請ができる
内部の仕組み
Artifact Registry はリポジトリ単位でアーティファクトを管理するマネージドサービスです。コンテナイメージは内部的にレイヤー(blob)とマニフェストに分けて保存され、同一レイヤーは重複排除されます。データは選んだロケーションに保管され、Google 管理鍵で保存時に自動暗号化されます。
- 標準リポジトリは push されたアーティファクトをそのまま保管する
- リモートリポジトリは初回 pull 時に上流(Docker Hub・npm 公式など)から取得してキャッシュし、2回目以降は手元から返す。上流障害やレート制限の影響を受けにくくなる
- 仮想リポジトリは複数のリポジトリへの単一の入口となり、優先度順に検索して最初に見つかったものを返す。利用側はエンドポイントを1つだけ知っていればよい
旧サービスである Container Registry(gcr.io) の後継にあたり、コンテナに加えて言語パッケージまで同じ仕組みで扱える点が大きな違いです。AWS でいえば、コンテナの Amazon ECR と言語パッケージの AWS CodeArtifact を1つにまとめたような位置づけです。
設計パターン / ベストプラクティス
- リポジトリは用途/環境ごとに分割(本番用・開発用など)し、IAM で push/pull 権限を分ける
- デプロイ先(Cloud Run / GKE)と同じリージョンにリポジトリを置き、レイテンシと下り課金を抑える
- 外部公開レジストリはリモートリポジトリでキャッシュし、上流のレート制限・障害から切り離す
- 利用側からは仮想リポジトリを入口にし、内部の構成(標準/リモートの組み合わせ)を隠蔽する
- デプロイ参照は可変のタグではなくダイジェスト(sha256)固定にして、再現性を担保する
- 不要な古いイメージはクリーンアップポリシーで自動削除し、ストレージコストを抑える
運用・監視
- Cloud Audit Logs で誰がいつ push/pull・設定変更したかを監査
- Cloud Monitoring でストレージ使用量やリクエスト傾向を可視化
- pull 失敗(403 / unauthorized)の多くは IAM ロール不足(読み取りなら Artifact Registry Reader)か認証ヘルパー未設定が原因
- 容量増加にはクリーンアップポリシーでタグなしイメージや古いバージョンを定期削除
- リポジトリの設定(フォーマット・ロケーション・暗号化)は describe コマンドで確認できる
コスト
主に「保存しているアーティファクトの容量」と「リポジトリからの下りネットワーク転送(egress)」に課金されます。同一リージョン内の Google Cloud サービスへの転送は割安または無料の範囲があり、別地域やインターネットへの転送ほど高くなります。
デプロイ先と同じリージョンにリポジトリを置けば下り転送を最小化できます。さらにクリーンアップポリシーで不要な古いイメージ・タグなしイメージを自動削除すれば、保管容量の無駄を継続的に減らせます。
セキュリティ
- アクセス制御は Cloud IAM。読み取りは Artifact Registry Reader、書き込みは Writer といった事前定義ロールで最小権限を割り当てる
- 脆弱性スキャン(Artifact Analysis) を有効化し、保存イメージの既知 CVE を検出する
- Binary Authorization と組み合わせ、署名・スキャン済みの信頼できるイメージだけを Cloud Run / GKE にデプロイできるよう強制する
- 保存時暗号化は既定で有効(Google 管理鍵)。要件に応じて CMEK(Cloud KMS 管理鍵) に切り替えられる
- リポジトリは既定で非公開。必要な主体にだけ権限を付与し、
allUsersのような広い公開は避ける
プロジェクト全体に広い権限(Editor 相当)を付けて全員が全リポジトリへ push できる状態は NG。 本番リポジトリは push を CI のサービスアカウントに限定し、利用者には pull のみを与えるなど用途ごとに最小権限を徹底します。
Well-Architected の観点
- セキュリティ: IAM による最小権限、脆弱性スキャン、Binary Authorization での署名済みイメージ強制、CMEK 暗号化により、サプライチェーン全体を保護する
- 運用上の優秀性: CI/CD(Cloud Build など)と統合し、ビルド成果物の保管からデプロイまでを自動化。クリーンアップポリシーやリモート/仮想リポジトリで運用負荷を下げる
試験で問われるポイント
- Container Registry(gcr.io)の後継が Artifact Registry であること。新規はこちらを使う
- コンテナイメージだけでなく言語パッケージ(npm・Maven・Python・Go など)も扱える点
- リポジトリは作成時にフォーマットとロケーションを固定する(後で種類は変更不可)
- リモートリポジトリ=外部レジストリのキャッシュ、仮想リポジトリ=複数を束ねる単一の入口という役割の違い
- push/pull の制御は IAM。読み取り専用には Reader ロールを与える
- 脆弱性スキャン(Artifact Analysis)+ Binary Authorization で安全なイメージのみデプロイを強制する流れ
- AWS 対応: コンテナは Amazon ECR、言語パッケージは AWS CodeArtifact に相当
関連サービス・比較
| 観点 | Artifact Registry(GCP) | AWS の対応 |
|---|---|---|
| 位置づけ | コンテナ+言語パッケージの統合レジストリ | Amazon ECR + AWS CodeArtifact |
| コンテナイメージ | 対応(Docker / OCI) | Amazon ECR |
| 言語パッケージ | npm / Maven / Python / Go など | AWS CodeArtifact |
| 権限付与 | Cloud IAM のロール | IAM ポリシー / リポジトリポリシー |
| 脆弱性スキャン | Artifact Analysis | ECR イメージスキャン |
| 外部キャッシュ | リモートリポジトリ | ECR プルスルーキャッシュ |
| 旧サービス | Container Registry(gcr.io)の後継 | (ECR が継続) |
ハンズオン / CLI例
# Docker フォーマットのリポジトリを東京リージョンに作成
gcloud artifacts repositories create my-repo \
--repository-format=docker \
--location=asia-northeast1 \
--description="App container images"
# Docker クライアントに認証ヘルパーを設定(このレジストリ向け)
gcloud auth configure-docker asia-northeast1-docker.pkg.dev
# ローカルイメージにタグを付けて push
docker tag web:latest \
asia-northeast1-docker.pkg.dev/PROJECT_ID/my-repo/web:latest
docker push \
asia-northeast1-docker.pkg.dev/PROJECT_ID/my-repo/web:latest
# あるサービスアカウントに pull(読み取り)権限だけを付与
gcloud artifacts repositories add-iam-policy-binding my-repo \
--location=asia-northeast1 \
--member="serviceAccount:web-sa@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/artifactregistry.reader"
# リポジトリ内のイメージとタグを一覧
gcloud artifacts docker images list \
asia-northeast1-docker.pkg.dev/PROJECT_ID/my-repo
Google Cloud Service
Artifact Registryを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
コンテナ
比較で見る軸
クラウド: Google Cloud / カテゴリ: コンテナ / 難易度: basic
導入後に効く点
リポジトリ単位でフォーマットと地域を決め、IAM で誰がpush/pullできるか制御する。
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- Google Cloud
- カテゴリ
- コンテナ
- 難易度
- basic
- 関連資格
- —
- 設計柱
- security / operational
判断チェックリスト
- 自社の用途が「コンテナ / security」に近いか確認する。
- 強みである「コンテナイメージと言語パッケージを同じ仕組みで保管できるマネージドレジストリ。」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。