Docker Scout によるコンテナセキュリティ
Docker Scout とは
Docker Scout は Docker 社が提供する公式のコンテナセキュリティツールです。Docker Desktop 4.17 以降に同梱されており、追加インストール不要で利用できます。
イメージの脆弱性(CVE)スキャン・SBOM 生成・ベースイメージ改善提案・ポリシー評価を一貫して行えるのが特徴で、Docker エコシステム(Docker Hub・Docker Desktop・Docker Build Cloud)とネイティブに統合されています。
Trivy との使い分け
SBOMと脆弱性診断 では Trivy によるコンテナスキャンを紹介しています。Docker Scout と Trivy の違いを以下に整理します。
| Docker Scout | Trivy | |
|---|---|---|
| 提供元 | Docker 社(公式) | Aqua Security(OSS) |
| インストール | Docker Desktop に同梱 | 別途インストール |
| 統合先 | Docker Hub・Desktop・Build Cloud | 幅広い CI/CD |
| ポリシー評価 | ✅ Docker Hub ベース | ❌ |
| ベースイメージ提案 | ✅ | ❌ |
| IaC スキャン | ❌ | ✅ |
| コスト | 無料(制限あり)〜有料 | OSS(無料) |
選び方の目安: Docker Hub 中心の開発フローなら Docker Scout、CI/CD に幅広く組み込む場合は Trivy が適しています。両方を組み合わせることも一般的です。
セットアップ
Docker Desktop(GUI)
Docker Desktop 4.17 以降では Docker Scout タブが標準搭載されています。ローカルのイメージ一覧から任意のイメージを選択すると、スキャン結果を GUI で確認できます。
CLI の確認
# バージョン確認(Docker Desktop に同梱)
docker scout version
# Docker Hub へログイン(ポリシー評価・リモートスキャンに必要)
docker login
スタンドアロンインストール(CI 環境など)
# Linux / macOS
curl -fsSL https://raw.githubusercontent.com/docker/scout-cli/main/install.sh | sh
# インストール確認
docker scout version
基本コマンド
quickview — 即時サマリー
イメージ全体のセキュリティ状態をワンコマンドで把握します。
docker scout quickview myapp:latest
# Docker Hub のイメージを直接スキャン(ローカルビルド不要)
docker scout quickview docker/scout-demo-service:latest
出力例:
Your image myapp:latest
Base image mcr.microsoft.com/dotnet/aspnet:8.0-alpine
Vulnerabilities
0C 0H 2M 5L myapp:latest
0C 0H 1M 4L mcr.microsoft.com/dotnet/aspnet:8.0-alpine
Policy status FAILED (2/5 policies met)
cves — CVE 詳細一覧
# 全 CVE を表示
docker scout cves myapp:latest
# CRITICAL・HIGH のみ絞り込み
docker scout cves --only-severity critical,high myapp:latest
# パッケージ名でフィルタ
docker scout cves --only-package openssl myapp:latest
# JSON 出力(CI/CD 連携向け)
docker scout cves --format json --output cves.json myapp:latest
# SARIF 形式(GitHub Security タブ連携)
docker scout cves --format sarif --output cves.sarif myapp:latest
出力例(抜粋):
✗ HIGH CVE-2024-2511
openssl 3.1.4
https://www.cve.org/CVERecord?id=CVE-2024-2511
Fixed version: 3.1.5
recommendations — ベースイメージ改善提案
Scout の強力な機能の一つが、より安全なベースイメージへの切り替え提案です。
docker scout recommendations myapp:latest
出力例:
Base image mcr.microsoft.com/dotnet/aspnet:8.0
Recommended updates
Tag Vulnerabilities Size
8.0-alpine 0C 0H 1M 3L ↓ 50MB smaller
8.0.x-alpine 0C 0H 1M 3L Pinned digest
→ Switch to 8.0-alpine to reduce vulnerabilities and image size
Docker Hardened Images と .NET と組み合わせると、さらにゼロ CVE を目指したベースイメージ移行の方針を立てられます。
sbom — SBOM 生成・確認
# SBOM を標準出力(SPDX JSON)
docker scout sbom myapp:latest
# ファイルに出力(CycloneDX JSON)
docker scout sbom --format cyclonedx --output sbom.json myapp:latest
# SBOM ファイルをもとに CVE をスキャン
docker scout cves sbom://sbom.json
SBOM フォーマットの詳細は SBOMと脆弱性診断 を参照してください。
compare — バージョン間の差分比較
イメージ更新前後のセキュリティ状態を比較できます。
# 2 つのタグを比較
docker scout compare myapp:v1.0 myapp:v1.1
# フィーチャーブランチのイメージを main と比較
docker scout compare --to myapp:latest myapp:feature-branch
# 修正済み CVE の差分のみ表示
docker scout compare --only-fixed myapp:v1.0 myapp:v1.1
ポリシー評価(Policy Evaluation)
ポリシー評価は Docker Hub と連携し、組織全体のセキュリティ基準を一元管理する機能です。
組み込みポリシー
| ポリシー | 内容 |
|---|---|
| No CRITICAL vulnerabilities | CRITICAL な CVE が存在しない |
| No fixable HIGH or CRITICAL | 修正可能な HIGH/CRITICAL CVE が存在しない |
| No unapproved base images | 承認済みベースイメージのみ使用 |
| No outdated base images | ベースイメージが最新である |
| Supply chain attestations | SBOM と Provenance が添付されている |
# ポリシー評価結果を確認
docker scout policy myapp:latest
出力例:
Policy status FAILED (3/5 policies met)
✓ No CRITICAL vulnerabilities
✓ No fixable HIGH or CRITICAL
✗ No unapproved base images (base image not in allowed list)
✗ Supply chain attestations (SBOM attestation missing)
✓ No outdated base images
Attestation(来歴証明)の付与
ポリシー「Supply chain attestations」を通過するには、ビルド時に SBOM と Provenance を付与します。
# BuildKit で SBOM + Provenance 付きビルド
docker buildx build \
--sbom=true \
--provenance=mode=max \
--tag myapp:latest \
--push \
.
Docker Build Cloud は Provenance 付きビルドをデフォルトでサポートしており、このポリシーを容易に満たせます。
GitHub Actions への統合
docker/scout-action を使うと、PR ごとにスキャン結果をコメントとして投稿できます。
name: Docker Scout Scan
on:
push:
branches: [main]
pull_request:
jobs:
scout:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write # PR コメント書き込みに必要
security-events: write # SARIF アップロードに必要
steps:
- uses: actions/checkout@v4
- name: Build Docker image
run: docker build -t myapp:${{ github.sha }} .
- name: Docker Scout CVE スキャン
uses: docker/scout-action@v1
with:
command: cves
image: myapp:${{ github.sha }}
sarif-file: cves.sarif
only-severities: critical,high
exit-code: true # CRITICAL/HIGH が検出されればジョブ失敗
- name: GitHub Security タブへアップロード
uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: cves.sarif
- name: ベースイメージ提案を PR にコメント
if: github.event_name == 'pull_request'
uses: docker/scout-action@v1
with:
command: recommendations
image: myapp:${{ github.sha }}
to: myapp:latest
github-token: ${{ secrets.GITHUB_TOKEN }}
compare で差分を PR コメントに投稿
- name: 差分比較(PR コメント)
if: github.event_name == 'pull_request'
uses: docker/scout-action@v1
with:
command: compare
image: myapp:${{ github.sha }}
to: myapp:latest
only-severities: critical,high
github-token: ${{ secrets.GITHUB_TOKEN }}
GitHub Actions の基本については GitHub ActionsとWorkflowの基礎 を参照してください。
.NET プロジェクトでの活用
ベースイメージ選定フロー
.NET + Docker Scout の統合ワークフロー
アプリ層(NuGet)とコンテナ層(OS パッケージ)の2段階でスキャンすることで、サプライチェーン全体をカバーできます。
jobs:
build-and-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '8.x'
- name: アプリ層スキャン(NuGet 脆弱性チェック)
run: dotnet list package --vulnerable --include-transitive
- name: Docker イメージビルド(SBOM + Provenance 付き)
uses: docker/build-push-action@v6
with:
push: false
tags: myapp:${{ github.sha }}
sbom: true
provenance: mode=max
- name: コンテナ層スキャン(Docker Scout)
uses: docker/scout-action@v1
with:
command: cves
image: myapp:${{ github.sha }}
only-severities: critical,high
exit-code: true
ツールの使い分けまとめ
| スキャン対象 | 推奨ツール | 参照ドキュメント |
|---|---|---|
| NuGet / npm パッケージ | dotnet list package --vulnerable・npm audit | SBOMと脆弱性診断 |
| コンテナイメージ(Docker Hub 中心) | Docker Scout | 本ドキュメント |
| コンテナイメージ(汎用 CI) | Trivy | SBOMと脆弱性診断 |
| Dockerfile / K8s YAML | Trivy config・Checkov | DevSecOpsと静的セキュリティスキャン |
| ベースイメージ最小化 | Docker Hardened Images | Docker Hardened Images と .NET |