イメージスキャンとは?出荷前に脆弱性を見つける
イメージスキャンは、既知の CVE がイメージが本番に到達する前に捉えるために、コンテナイメージの内容を脆弱性データベースと突き合わせて分析します。
イメージは、それが含むパッケージと同じだけしか安全ではなく、それらのパッケージは時間とともに既知の脆弱性を蓄積します。イメージスキャンはこのチェックを自動化します: イメージに含まれるものを一覧化し、開示された脆弱性のフィードと比較して、注意が必要なものにフラグを立てます。
スキャナが見るもの
スキャナは software bill of materials - イメージ内のすべての OS パッケージと言語依存関係 - を構築し、それぞれを NVD やディストリの advisory などの脆弱性データベースと突き合わせます。多くは漏洩した secret やリスクのある設定ミスも検出します。
深刻度とポリシー
finding は等級付けされます(低から重大まで)。一般的な CI ポリシーは、修正可能な高または重大な脆弱性で build を失敗させ、より低い深刻度や修正不可能なものは警告付きで通す、というものです。
一般的なツール
- Trivy - 人気があり、高速で、オープンソース。
- Grype - Anchore のスキャナ、SBOM ツールの Syft と組み合わさる。
- Snyk や registry ネイティブなスキャナ(ECR、GHCR)で統合されたワークフローを。
典型的な gate
CI では trivy image --severity HIGH,CRITICAL --exit-code 1 myapp:ci を実行するかもしれません。非ゼロの exit は job を失敗させ、脆弱なイメージが昇格やデプロイされるのをブロックします。
pipeline におけるスキャン
脆弱なイメージが決して出荷されないよう、build の後、push や deploy の前にスキャンしましょう。大きなイメージではスキャンが遅くなることがあります。イメージを小さく保つほど(distroless、マルチステージ)、スキャンは速くクリーンになります。
重要なポイント
- スキャンはイメージのパッケージを既知の脆弱性データベースと突き合わせます。
- リスクのあるイメージをブロックするため、修正可能な高・重大な finding で CI を gate しましょう。
- 小さいイメージはスキャンが速く、finding が少ない傾向があります。
関連ガイド
What Is a Distroless Image? Containers Without an OSA distroless image contains your app and runtime but no shell or package manager. Learn what is stripped out…
What Is a Container Registry? Where Images LiveA container registry stores and distributes images by repository and tag. Learn how push and pull work, what…
What Is a Base Image? The Foundation of Every BuildA base image is the starting point a Dockerfile builds on via FROM. Learn how to choose one, the trade-offs o…