container-image-hardening について
本番利用に向けてDockerfileとコンテナイメージを点検・強化するスキルです。ビルド手法、脆弱性、ランタイム設定、検証を確認し、強化済みDockerfileとCIゲート設定を作成します。
主な機能
- 01Dockerfileのビルド手法を確認
- 02イメージの脆弱性を検査
- 03ランタイムのセキュリティ設定を強化
- 04レイヤーと非root実行を検証
- 05スキャン報告とCIゲートを作成
活用シーン
- 01リリース前のDockerfile点検
- 02CIへの脆弱性チェック追加
- 03コンテナの実行権限を縮小
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ securityskills/ skills --skill container-image-hardeningインストール後、Claude Code で/container-image-hardeningを入力して読み込まれたか確認します。
詳細
コンテナーイメージのハードニング
Dockerfile とイメージをレビューし、本番環境で安全に使用できるよう修正します。
Dockerfile のレビューチェックリスト
- ベースイメージ:公式の特定タグまたはダイジェストを使用し、最小構成のバリアント(
alpine、distroless、slim)を選択します。latestは使用しません - マルチステージビルド:コンパイラーやパッケージマネージャーなどのビルドツールチェーンを最終イメージに含めません
- 非 root ユーザー:専用の UID を指定した
USERディレクティブを使用します。イメージ内で sudo は使用しません - シークレットなし:認証情報を含む
ENVを使用せず、.envをCOPYせず、シークレットをレイヤーに埋め込みません(後から削除しても残ります) - 依存関係を固定:ロックファイルを使用します(
npm ci、ハッシュ付きのpip install -r requirements.txt) - ヘルスチェックを定義します。初期化を確実に行うには
CMDよりENTRYPOINTを使用します - レイヤーの整理:apt の操作をまとめ、同じレイヤー内でリストをクリーンアップします。
.dockerignoreに.gitとビルド成果物を含めます
スキャンとゲート
trivy image --severity HIGH,CRITICAL --exit-code 1 <image>
grype <image>
docker scout cves <image>
- 修正が利用可能な重大な CVE がある場合、CI を失敗させます
- ベースイメージの更新を追跡します(Dockerfile 用の renovate/dependabot)
ランタイムのハードニング
read_only: true
cap_drop: ["ALL"]
security_opt: ["no-new-privileges:true"]
tmpfs: [/tmp]
- DoS の影響を抑えるため、リソース制限(CPU/メモリ)を設定します
- ルートファイルシステムを読み取り専用にし、書き込み可能なパスには明示的に tmpfs を使用します
検証
docker history <image>— シークレットらしきレイヤーがないことを確認しますdive <image>— イメージ効率と無駄な容量を確認します- イメージのユーザーとして実行します:
docker run --rm <image> idで非 root ユーザーであることを確認します
成果物
ハードニング済みの Dockerfile、変更前後のスキャンレポート、CI ゲートの設定。
コメント
Markdown 対応