mcpField
D
docker-security

docker-security

github.com/full-stack-skillsセキュリティ3122 回インストール4 週間前に更新
リポジトリ

docker-security について

docker-securityは、Docker利用者向けのセキュリティ強化ガイドです。イメージ、ビルド、実行時設定、シークレット、ホスト監査を例とチェックリストで扱います。

主な機能

  1. 01イメージとDockerfileの強化
  2. 02実行時の権限制限
  3. 03BuildKitとDocker secrets
  4. 04Docker Benchによる監査
  5. 05強化手順とよくある落とし穴

活用シーン

  1. 01コンテナを非rootで実行する設定
  2. 02ケイパビリティ制限と読み取り専用化
  3. 03ビルド時または実行時のシークレット注入
  4. 04CISガイダンスに沿ったDocker設定確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/full-stack-skills/docker-skills --skill docker-security

インストール後、Claude Code で/docker-securityを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

agents/
openai.yaml
examples/
01-secure-dockerfile.md
02-docker-bench.md
references/
01-capabilities.md
02-cis-checklist.md
03-secrets-management.md

詳細

Docker セキュリティ — 安全強化と保護

ライフサイクル全体にわたって Docker を保護するための包括的なガイダンスです。

使用するタイミング

ユーザーが次の項目に言及した場合は、必ずこのスキルを使用してください。

  • 「docker セキュリティ」、「イメージセキュリティ」、「コンテナーセキュリティ」
  • 「非 root で実行」、「rootless」、「最小権限」
  • 「seccomp」、「AppArmor」、「SELinux」
  • 「Docker Bench」、「CIS」
  • 「シークレット管理」
  • 「イメージ署名」、「コンテンツトラスト」

セキュリティモデル — 多層防御

Layer 1: Image Security    — minimal base, non-root, pinned versions
Layer 2: Build Security    — secret injection, noCOPY secrets
Layer 3: Runtime Security  — capabilities, seccomp, AppArmor, read-only
Layer 4: Registry Security — content trust, signing, vulnerability scan
Layer 5: Host Security     — Docker Bench, CIS, user namespace

イメージセキュリティチェックリスト

#実践項目方法
1最小限のベースイメージalpine または distroless を使用します(Go → scratch)
2非 root ユーザーDockerfile の末尾に USER 1000:1000 を指定します
3バージョンを固定alpine:latest ではなく FROM alpine:3.20@sha256:... を使用します
4ADD より COPY を使用ADD は tar を自動展開するため、予期しない動作につながります
5イメージにシークレットを含めない--secret または実行時の注入を使用します
6.dockerignore.env、.git、認証情報を除外します
セキュアな Dockerfile
FROM alpine:3.20
RUN apk add --no-cache ca-certificates
RUN addgroup -S app && adduser -S -G app app
COPY --chown=app:app ./app /app
WORKDIR /app
USER app
CMD ["./server"]

実行時のセキュリティ

ケイパビリティ(最小権限)
# Drop ALL capabilities, add only what's needed
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx

# Common needed caps: NET_BIND_SERVICE, CHOWN, DAC_OVERRIDE
# NEVER: --privileged (gives full host access)
ルートファイルシステムを読み取り専用にする
# Prevents container from writing anywhere (except volumes/tmpfs)
docker run --read-only --tmpfs /tmp --tmpfs /run nginx
Seccomp プロファイル
# Custom seccomp profile (block syscalls)
docker run --security-opt seccomp=profile.json app

# Unconfined (NEVER in production)
docker run --security-opt seccomp=unconfined app
新しい権限の付与を禁止
# Prevent privilege escalation via setuid binaries
docker run --security-opt no-new-privileges app

シークレット管理

BuildKit シークレット(ビルド時)
# syntax=docker/dockerfile:1
FROM alpine
RUN --mount=type=secret,id=aws_creds \
  AWS_ACCESS_KEY_ID=$(cat /run/secrets/aws_creds) \
  aws s3 cp s3://bucket/file .
docker build --secret id=aws_creds,src=$HOME/.aws/credentials -t app .
Docker シークレット(Swarm の実行時)
echo "mysecretpassword" | docker secret create db_password -
docker service create --secret db_password postgres

Docker Bench Security による監査

docker run --rm \
  --pid host --network host \
  -v /var/run/docker.sock:/var/run/docker.sock \
  docker/docker-bench-security

ワークフロー — セキュリティ強化の手順

Step 1: イメージセキュリティ: docker scout cves <image> で脆弱性をスキャン → ベースイメージ/依存関係を更新 Step 2: Dockerfile の強化: USER を非 root に設定し、ADD より COPY を優先し、digest を固定 Step 3: 実行時のセキュリティ: --read-only、--cap-drop=ALL、--security-opt no-new-privileges Step 4: 監査チェック: docker run --rm docker/docker-bench-security を実行し、項目ごとに修正 Step 5: CI ゲート: Scout ポリシーにより critical/high CVE を含むマージをブロック

注意点 — よくある落とし穴

  • --privileged フラグ: ホストへの完全なアクセスを許可します。本番環境では絶対に使用しないでください。→ 復旧方法: 代わりに --cap-add=NET_BIND_SERVICE のように必要な権限のみを指定し、docker inspect --format='{{.HostConfig.Privileged}}' で監査します。
  • Dockerfile に API キーを記述: ENV API_KEY=xxx はイメージレイヤーに永久に書き込まれます。→ 復旧方法: docker run -e API_KEY=$KEY または BuildKit の --mount=type=secret を使用して、実行時に注入します。
  • root コンテナー: デフォルトのユーザーは root です。コンテナーからの脱出により、ホスト上でも root 権限を取得されるおそれがあります。→ 復旧方法: Dockerfile では必ず USER 1000:1000 を指定し、docker exec myapp whoami で確認します。
  • Docker ソケットのマウント: -v /var/run/docker.sock を指定すると、コンテナーからすべてのコンテナーを制御できます。→ 復旧方法: ソケットのマウントではなく、TLS 認証を使用する Docker API を使用します。本番環境ではソケットをマウントしないでください。
  • CVE の修正を無視: docker scout を実行しても、検出された問題を修正しないことです。→ 復旧方法: CI ポリシーで critical/high CVE をブロックし、ベースイメージを定期的に更新します。

範囲 — 対応できること/できないこと

分類シナリオ説明
✅ 対応可能Dockerfile のセキュリティ強化USER を非 root に設定し、ADD より COPY を優先し、digest を固定
✅ 対応可能実行時のセキュリティ設定seccomp/AppArmor/ケイパビリティ/読み取り専用
✅ 対応可能シークレット管理Docker secrets + BuildKit --secret + Vault
✅ 対応可能セキュリティ監査(Docker Bench Security)CIS チェックリスト + 項目ごとの修正
⚠️ 条件付きイメージ署名(Notary)環境変数 DOCKER_CONTENT_TRUST=1 が必要
⚠️ 条件付き完全なコンプライアンスチェックScout スキャンと組織のセキュリティポリシーの併用が必要
❌ 範囲外CVE 脆弱性スキャンdocker-scout を使用します
❌ 範囲外ホストシステムのセキュリティオペレーティングシステムの範囲
❌ 範囲外ネットワークセキュリティ/ファイアウォールネットワーク管理者の担当範囲

このスキルを使用しない場合

❌ 使用しない✅ 代わりに使用
脆弱性スキャンdocker-scout
Docker の基本docker-basics
本番環境へのデプロイdocker-production
レジストリ管理docker-hub

セキュリティと安定性

  • すべてのセキュリティ対策は、CIS Docker Benchmark および Docker の公式セキュリティガイダンスに基づいています。
  • 設定のドリフトを検出するため、CI/CD で Docker Bench Security を定期的に実行してください。
  • CVE 通知を受け取るため、Docker のセキュリティアドバイザリーを購読してください。
  • 実行可能なスクリプトは含まれていません。ガイダンスのみです。

📚 公式ドキュメントの参考資料

ドキュメントURL
Docker セキュリティhttps://docs.docker.com/security/
Docker Hardened Imageshttps://docs.docker.com/dhi/
Docker Scouthttps://docs.docker.com/scout/
Docker Bench Securityhttps://docs.docker.com/engine/security/bench/
seccomp の設定https://docs.docker.com/engine/security/seccomp/
AppArmorhttps://docs.docker.com/engine/security/apparmor/

🧭 Docker Skills Journey

📍 現在の位置:docker-security — セキュリティ強化

← 前へ:docker-build | → 次へ:docker-scout / docker-cicd

コメント