Skip to main content

Harbor でプライベートコンテナレジストリを構築する

パブリックな Docker Hub だけに頼るコンテナ運用には、レート制限・セキュリティ・コンプライアンスの面で限界があります。エンタープライズ環境では、イメージの完全な制御、脆弱性の自動スキャン、アクセス制御を備えたプライベートコンテナレジストリが不可欠です。

Harbor は CNCF 卒業プロジェクトのオープンソースコンテナレジストリで、まさにこれらの要件を満たします。Kubo のコンテナ基盤でも Harbor をプライベートレジストリとして活用しており、本記事ではその構築から運用までを実践的に解説します。

Harbor とは: なぜ今プライベートレジストリが必要か

Docker Hub は便利ですが、本番環境では以下の課題が顕在化します:

  • レート制限: 無料アカウントでは 6 時間あたり 100 Pull の制限
  • セキュリティ: 公開イメージの信頼性検証が困難
  • コンプライアンス: イメージの保管場所とアクセスログの管理要件
  • ネットワーク: インターネット経由の Pull による遅延とコスト

VMware のブログでは、Harbor を「モダンプライベートクラウドのためのエンタープライズ対応コンテナレジストリ」と位置づけています。

Harbor の主要機能:

機能説明
コンテナイメージ管理Docker イメージと OCI アーティファクトの保存・配信
Helm チャート管理ChartMuseum 統合による Helm チャートのホスティング
脆弱性スキャンTrivy 内蔵による自動脆弱性スキャン
RBACプロジェクト・ロールベースのアクセス制御
レプリケーション複数レジストリ間のイメージ同期
イメージ署名Cosign / Notary によるイメージ署名検証
ガベージコレクション未使用イメージの自動クリーンアップ

Captain.AI と Harbor を連携させることで、AI ワーカーのコンテナイメージ管理を自動化できます。

Harbor のインストール方法

Harbor は VM ベースのインストールKubernetes 上の Helm デプロイの 2 つの方法で構築できます。

方法1: VM ベースインストール

システム要件

項目最小要件推奨
CPU2 vCPU4 vCPU
メモリ4 GB8 GB
ストレージ40 GB160 GB
OSUbuntu 22.04 / RHEL 9Ubuntu 24.04
DockerDocker Engine 20.10+最新版
Docker Composev2.0+最新版
bash
# 1. Harbor インストーラーのダウンロード
wget https://github.com/goharbor/harbor/releases/download/v2.12.0/harbor-online-installer-v2.12.0.tgz
tar xzvf harbor-online-installer-v2.12.0.tgz
cd harbor

# 2. 設定ファイルの編集
cp harbor.yml.tmpl harbor.yml

harbor.yml の主要設定:

yaml
hostname: harbor.example.com

# HTTPS 設定(本番必須)
https:
  port: 443
  certificate: /etc/ssl/certs/harbor.crt
  private_key: /etc/ssl/private/harbor.key

# 管理者パスワード
harbor_admin_password: StrongPassword123!

# データベース設定
database:
  password: db-password
  max_idle_conns: 100
  max_open_conns: 900

# ストレージ設定
data_volume: /data/harbor
bash
# 3. Trivy 付きでインストール
./install.sh --with-trivy

# 4. 動作確認
docker compose ps
curl -k https://harbor.example.com/api/v2.0/health

Harbor 公式のインストールドキュメントに詳細な手順が記載されています。

方法2: Kubernetes 上の Helm デプロイ

CNCF のデプロイガイドで推奨されている方法です。高可用性が必要な本番環境に適しています。

bash
# Helm リポジトリの追加
helm repo add harbor https://helm.goharbor.io
helm repo update

# values.yaml の作成
cat <<EOF > harbor-values.yaml
expose:
  type: ingress
  ingress:
    hosts:
      core: harbor.example.com
    className: nginx
  tls:
    enabled: true
    certSource: secret
    secret:
      secretName: harbor-tls
externalURL: https://harbor.example.com
persistence:
  enabled: true
  persistentVolumeClaim:
    registry:
      size: 100Gi
    database:
      size: 10Gi
trivy:
  enabled: true
EOF

# Harbor のデプロイ
helm install harbor harbor/harbor \
  -f harbor-values.yaml \
  -n harbor --create-namespace

Kubo の Kubernetes クラスタでは、Helm デプロイが推奨されます。

RBAC とプロジェクト管理

Harbor の RBAC はプロジェクト単位でアクセス権限を管理します。

ロール階層

ロールPushPullスキャンメンバー管理設定変更
Project Admin
Maintainer××
Developer×××
Guest××××
Limited Guest×△(特定タグ)×××

プロジェクト設定例

bash
# Harbor CLI でプロジェクト作成
curl -X POST "https://harbor.example.com/api/v2.0/projects" \
  -H "Authorization: Basic $(echo -n 'admin:password' | base64)" \
  -H "Content-Type: application/json" \
  -d '{
    "project_name": "production",
    "metadata": {
      "public": "false",
      "auto_scan": "true",
      "prevent_vul": "true",
      "severity": "high"
    }
  }'

prevent_vul: trueseverity: high を設定すると、HIGH 以上の脆弱性を含むイメージの Pull がブロックされます。HostMyCode のセキュリティハードニングガイドで詳しく解説されています。

Trivy 統合による脆弱性管理

Harbor に内蔵された Trivy は、イメージの Push 時に自動で脆弱性スキャンを実行します。

自動スキャンの設定

  1. プロジェクト設定 > Configuration で「Automatically scan images on push」を有効化
  2. 脆弱性の重大度閾値を設定(例: HIGH 以上の脆弱性でブロック)
  3. スキャンスケジュールを設定(例: 毎日深夜に全イメージを再スキャン)

スキャン結果の確認

bash
# API でスキャン結果を取得
curl "https://harbor.example.com/api/v2.0/projects/production/repositories/myapp/artifacts/latest/additions/vulnerabilities" \
  -H "Authorization: Basic $(echo -n 'admin:password' | base64)"

スキャン結果は Harbor UI で視覚的に確認でき、CVE ID、重大度、修正可能バージョンが表示されます。

CVE ホワイトリスト

誤検出や許容済みの脆弱性は、プロジェクト単位で CVE ホワイトリストに登録できます。Aqua Security の Harbor Scanner Trivy リポジトリに詳細な設定方法があります。

レプリケーションとディザスタリカバリ

Harbor のレプリケーション機能は、複数のレジストリインスタンス間でイメージを自動同期します。

レプリケーションターゲット

Harbor は以下のレジストリとの双方向レプリケーションをサポートします:

レプリケーションポリシー

json
{
  "name": "sync-to-dr",
  "src_registry": { "id": 0 },
  "dest_registry": { "id": 1 },
  "dest_namespace": "production",
  "trigger": {
    "type": "event_based"
  },
  "filters": [
    { "type": "name", "value": "production/**" },
    { "type": "tag", "value": "v*" }
  ],
  "enabled": true
}

イベントベーストリガー(Push 時に即座にレプリケーション)と、スケジュールベーストリガー(定期的な同期)を選択できます。

Shipyard のレジストリ比較記事では、Harbor のレプリケーション機能がエンタープライズ環境での大きな差別化要因として評価されています。

まとめ: エンタープライズ対応のコンテナレジストリ

Harbor は、以下の機能を統合したエンタープライズ対応のプライベートコンテナレジストリです:

  • Trivy 内蔵: Push 時自動スキャンで脆弱性を即座に検出
  • RBAC: プロジェクト・ロール単位のきめ細かいアクセス制御
  • レプリケーション: マルチレジストリ間のイメージ同期と DR 対策
  • イメージ署名: Cosign / Notary による改ざん防止
  • Helm チャートホスティング: Kubernetes デプロイの統合管理

Kubo では、コンテナワークロードの本番基盤として Harbor を中核に据えたイメージ管理パイプラインを構築しています。Captain.AI との連携により、イメージの脆弱性対応から自動デプロイまでをワンストップで実現できます。

Harbor の導入やコンテナレジストリの運用について、ぜひお問い合わせください。

← Back to all posts