跳到主要内容

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 ScoutTrivy
提供元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 vulnerabilitiesCRITICAL な CVE が存在しない
No fixable HIGH or CRITICAL修正可能な HIGH/CRITICAL CVE が存在しない
No unapproved base images承認済みベースイメージのみ使用
No outdated base imagesベースイメージが最新である
Supply chain attestationsSBOM と 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 auditSBOMと脆弱性診断
コンテナイメージ(Docker Hub 中心)Docker Scout本ドキュメント
コンテナイメージ(汎用 CI)TrivySBOMと脆弱性診断
Dockerfile / K8s YAMLTrivy config・CheckovDevSecOpsと静的セキュリティスキャン
ベースイメージ最小化Docker Hardened ImagesDocker Hardened Images と .NET

参考リンク