コンテンツにスキップ

Chainguard Images

セキュアなソフトウェアサプライチェーンのためのWolfi Linux上に構築された最小限のゼロCVEコンテナイメージ。

コマンド説明
docker pull cgr.dev/chainguard/static:latest最小限の静的ベースイメージをプル
docker pull cgr.dev/chainguard/busybox:latestデバッグ用busyboxイメージをプル
docker pull cgr.dev/chainguard/wolfi-base:latestシェル付きWolfiベースイメージをプル
docker pull cgr.dev/chainguard/python:latestPythonランタイムイメージをプル
docker pull cgr.dev/chainguard/node:latestNode.jsランタイムイメージをプル
docker pull cgr.dev/chainguard/go:latestGoビルドイメージをプル
docker pull cgr.dev/chainguard/nginx:latestnginx Webサーバーイメージをプル
docker pull cgr.dev/chainguard/git:latest最小限のgitイメージをプル
docker pull cgr.dev/chainguard/jdk:latestJava JDKイメージをプル
docker pull cgr.dev/chainguard/rust:latestRustビルドイメージをプル
docker pull cgr.dev/chainguard/redis:latestRedisサーバーイメージをプル
docker pull cgr.dev/chainguard/postgres:latestPostgreSQLイメージをプル
docker pull cgr.dev/chainguard/curl:latest最小限のcurlイメージをプル
コマンド説明
:latestタグ最新ビルド、本番環境対応
:latest-devタグシェルとパッケージマネージャー付きの開発バリアント
-devイメージの:latestapk、シェル、デバッグツールを含む
cgr.dev/chainguard-private/IMAGEプライベート/エンタープライズイメージレジストリ
ダイジェスト固定@sha256:abc123...再現性のために正確なイメージビルドに固定
コマンド説明
FROM cgr.dev/chainguard/static:latestDockerfileで静的イメージを使用
FROM cgr.dev/chainguard/python:latest-devpipとシェル付きの開発バリアントを使用
FROM cgr.dev/chainguard/node:latest AS buildビルドステージとして使用
FROM cgr.dev/chainguard/go:latest AS builderコンパイル用にGoイメージを使用
docker run --rm cgr.dev/chainguard/wolfi-base shインタラクティブシェルを実行
docker run --rm -p 8080:8080 cgr.dev/chainguard/nginxnginxサーバーを実行
docker run --rm cgr.dev/chainguard/python -- python -c "print('hello')"Pythonワンライナーを実行
# ビルドステージ
FROM cgr.dev/chainguard/go:latest AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -ldflags="-s -w" -o /server ./cmd/server

# ランタイムステージ - distroless、シェルなし、パッケージマネージャーなし
FROM cgr.dev/chainguard/static:latest
COPY --from=builder /server /server
EXPOSE 8080
ENTRYPOINT ["/server"]
# pipが利用可能なビルドステージ
FROM cgr.dev/chainguard/python:latest-dev AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
COPY . .

# ランタイムステージ - 最小限のPython、pip・シェルなし
FROM cgr.dev/chainguard/python:latest
COPY --from=builder /install /usr/local
COPY --from=builder /app /app
WORKDIR /app
ENTRYPOINT ["python", "-m", "myapp"]
# ビルドステージ
FROM cgr.dev/chainguard/node:latest-dev AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
RUN npm run build

# ランタイムステージ
FROM cgr.dev/chainguard/node:latest
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
EXPOSE 3000
ENTRYPOINT ["node", "dist/index.js"]
# ビルドステージ
FROM cgr.dev/chainguard/jdk:latest-dev AS builder
WORKDIR /app
COPY . .
RUN ./gradlew build --no-daemon -x test

# ランタイムステージ
FROM cgr.dev/chainguard/jre:latest
COPY --from=builder /app/build/libs/app.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app/app.jar"]
コマンド説明
chainctl auth loginChainguardで認証
chainctl auth login --headlessヘッドレス環境でログイン
chainctl auth configure-dockerChainguardレジストリを使用するようDockerを設定
chainctl images list利用可能なChainguardイメージを一覧表示
chainctl images repos list --group=GROUP_IDグループのイメージリポジトリを一覧表示
chainctl images diff IMAGE1 IMAGE22つのイメージバージョンを比較
chainctl images history cgr.dev/chainguard/pythonイメージバージョン履歴を表示
images.chainguard.devを参照すべてのイメージのWebカタログ
コマンド説明
crane ls cgr.dev/chainguard/pythonイメージの利用可能なタグを一覧表示
crane manifest cgr.dev/chainguard/python:latestイメージマニフェストを表示
crane config cgr.dev/chainguard/python:latestイメージ設定を表示
docker inspect cgr.dev/chainguard/python:latestイメージメタデータを検査
docker history cgr.dev/chainguard/python:latestイメージレイヤーを表示
dive cgr.dev/chainguard/python:latestイメージレイヤーをインタラクティブに探索
コマンド説明
cosign verify --certificate-oidc-issuer=https://token.actions.githubusercontent.com --certificate-identity-regexp='chainguard' cgr.dev/chainguard/pythonイメージ署名を検証
cosign verify-attestation --type spdx cgr.dev/chainguard/pythonSBOMアテステーションを検証
cosign verify-attestation --type vuln cgr.dev/chainguard/python脆弱性アテステーションを検証
cosign tree cgr.dev/chainguard/pythonサプライチェーンアーティファクトを表示
cosign verify-attestation --type slsaprovenance cgr.dev/chainguard/pythonSLSAプロベナンスを検証
# Chainguardイメージの署名を検証
cosign verify \
  --certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
  --certificate-identity-regexp="chainguard" \
  cgr.dev/chainguard/python:latest

# SBOMアテステーションを検証して出力
cosign verify-attestation \
  --type spdx \
  --certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
  --certificate-identity-regexp="chainguard" \
  cgr.dev/chainguard/python:latest | jq -r '.payload' | base64 -d | jq .

# 脆弱性スキャンアテステーションを検証
cosign verify-attestation \
  --type vuln \
  --certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
  --certificate-identity-regexp="chainguard" \
  cgr.dev/chainguard/python:latest
コマンド説明
grype cgr.dev/chainguard/pythonGrypeでイメージの脆弱性をスキャン
grype cgr.dev/chainguard/python --only-fixed修正可能な脆弱性のみ表示
trivy image cgr.dev/chainguard/pythonTrivyスキャナーでスキャン
trivy image --severity HIGH,CRITICAL cgr.dev/chainguard/python高/クリティカルのみスキャン
docker scout cves cgr.dev/chainguard/pythonDocker Scoutでスキャン
chainctl images vulns cgr.dev/chainguard/pythonchainctl経由で既知の脆弱性を表示
コマンド説明
apk updateパッケージインデックスを更新(devイメージ内)
apk add curlパッケージをインストール
apk add --no-cache python3 py3-pipインデックスをキャッシュせずにインストール
apk add --virtual .build-deps gcc musl-dev仮想ビルド依存関係をインストール
apk del .build-deps仮想パッケージグループを削除
apk del curlパッケージを削除
apk list --installedインストール済みパッケージを一覧表示
apk search nginx利用可能なパッケージを検索
apk info python3パッケージの詳細を表示
apk info -L python3パッケージ内のファイルを一覧表示
コマンド説明
melange keygenパッケージ用の署名鍵を生成
melange build recipe.yaml --signing-key melange.rsaレシピからAPKパッケージをビルド
melange build recipe.yaml --arch x86_64,aarch64複数アーキテクチャ向けにビルド
melange bump recipe.yaml 1.2.3レシピのバージョンをバンプ
package:
  name: myapp
  version: 1.0.0
  epoch: 0
  description: My custom application
  copyright:
    - license: Apache-2.0

environment:
  contents:
    packages:
      - build-base
      - go
      - ca-certificates-bundle

pipeline:
  - uses: git-checkout
    with:
      repository: https://github.com/org/myapp
      tag: v${{package.version}}

  - uses: go/build
    with:
      packages: ./cmd/myapp
      output: myapp
      ldflags: -s -w

  - uses: strip
コマンド説明
apko build config.yaml tag output.tarYAML設定からOCIイメージをビルド
apko publish config.yaml tagイメージをビルドしてレジストリにプッシュ
apko build config.yaml tag output.tar --arch x86_64,aarch64マルチアーキテクチャイメージをビルド
docker load < output.tarビルドしたイメージをDockerにロード
contents:
  packages:
    - ca-certificates-bundle
    - wolfi-baselayout
    - myapp
  repositories:
    - https://packages.wolfi.dev/os
    - /path/to/local/packages

accounts:
  groups:
    - groupname: nonroot
      gid: 65532
  users:
    - username: nonroot
      uid: 65532
      gid: 65532
  run-as: 65532

entrypoint:
  command: /usr/bin/myapp

archs:
  - x86_64
  - aarch64

environment:
  APP_ENV: production
  PORT: "8080"

サプライチェーンアーティファクト

Section titled “サプライチェーンアーティファクト”
コマンド説明
cosign download sbom cgr.dev/chainguard/pythonイメージSBOMをダウンロード
syft cgr.dev/chainguard/pythonSyftでSBOMを生成
syft cgr.dev/chainguard/python -o spdx-jsonSPDX SBOMを生成
syft cgr.dev/chainguard/python -o cyclonedx-jsonCycloneDX SBOMを生成
cosign download attestation cgr.dev/chainguard/pythonすべてのアテステーションをダウンロード
cosign verify-attestation --type slsaprovenance cgr.dev/chainguard/pythonSLSAプロベナンスを検証
chainctl images vulns cgr.dev/chainguard/python既知の脆弱性を表示

Kubernetesアドミッションポリシー

Section titled “Kubernetesアドミッションポリシー”
# Sigstore Policy Controller - Chainguard署名を要求
apiVersion: policy.sigstore.dev/v1beta1
kind: ClusterImagePolicy
metadata:
  name: require-chainguard-signatures
spec:
  images:
    - glob: "cgr.dev/chainguard/**"
    - glob: "cgr.dev/chainguard-private/**"
  authorities:
    - keyless:
        url: https://fulcio.sigstore.dev
        identities:
          - issuerRegExp: ".*"
            subjectRegExp: ".*chainguard.*"
        ctlog:
          url: https://rekor.sigstore.dev
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
  name: require-chainguard-images
spec:
  validationFailureAction: Enforce
  background: true
  rules:
    - name: check-image-registry
      match:
        any:
          - resources:
              kinds:
                - Pod
      validate:
        message: "Only Chainguard images from cgr.dev are allowed."
        pattern:
          spec:
            containers:
              - image: "cgr.dev/chainguard/*"
            initContainers:
              - image: "cgr.dev/chainguard/*"
# GitHub Actions - デプロイ前に検証とスキャン
name: Image Verification
on:
  push:
    branches: [main]

jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - name: Install cosign
        uses: sigstore/cosign-installer@v3

      - name: Verify image signature
        run: |
          cosign verify \
            --certificate-oidc-issuer="https://token.actions.githubusercontent.com" \
            --certificate-identity-regexp="chainguard" \
            cgr.dev/chainguard/python:latest

      - name: Scan for vulnerabilities
        uses: anchore/grype-action@v0
        with:
          image: cgr.dev/chainguard/python:latest
          fail-on: high
  1. マルチステージビルドを使用する-devイメージ(コンパイラとパッケージマネージャーを含む)でビルドし、最終成果物のみを最小限のランタイムイメージにコピーしましょう。

  2. ダイジェストでイメージを固定する — 本番デプロイではタグの代わりに@sha256:...ダイジェストを使用し、再現性を保証しましょう。

  3. 適切なベースイメージを選択する — OS依存関係のないコンパイル済みバイナリにはstaticを、シェルが必要な場合はwolfi-baseを、インタープリタ言語には言語固有のイメージを使用しましょう。

  4. CI/CDで署名を検証する — ビルドやデプロイの前に、必ずcosignでChainguardイメージの署名を検証しましょう。

  5. ゼロCVEイメージでもスキャンする — 検証ステップとして脆弱性スキャンを実行しましょう。Chainguardイメージはゼロの結果を返すはずで、パイプラインが本物のイメージを使用していることを確認できます。

  6. -devバリアントはビルドステージでのみ使用する-devイメージを本番環境に出荷しないでください。攻撃対象を増加させるツールが含まれています。

  7. nonrootとして実行する — Chainguardイメージはデフォルトでnonrootユーザーです。Dockerfileでrootに切り替えずにこれを維持しましょう。

  8. イメージポリシーを適用する — Kyverno、OPA Gatekeeper、またはSigstore Policy Controllerを使用して、クラスター内のコンテナレジストリを制限しましょう。

  9. SBOMを生成して保存する — SyftまたはcosignでSBOMをダウンロードし、コンプライアンスと監査証跡に活用しましょう。

  10. イメージを最新に保つ — Chainguardはイメージを頻繁に再ビルドします。最新のセキュリティパッチを取得するためにダイジェストを定期的に更新しましょう。