mcpField
S
scanning-iac-and-images-with-trivy

scanning-iac-and-images-with-trivy

github.com/mukul975セキュリティ35.2k68 回インストール8 週間前に更新
リポジトリ

scanning-iac-and-images-with-trivy について

CI/CD でイメージ、IaC、依存関係を検査する Trivy のスキャンワークフローを扱うスキルです。開発・セキュリティチーム向けに、SBOM 生成、SARIF 出力、ポリシーに基づくビルド失敗の設定も説明します。

主な機能

  1. 01イメージと依存関係の脆弱性スキャン
  2. 02IaC の設定ミス検査
  3. 03ハードコードされたシークレットとライセンスの検出
  4. 04SBOM の生成と再スキャン
  5. 05SARIF 出力とポリシーによるビルド制御

活用シーン

  1. 01イメージのプッシュ前に CI/CD のセキュリティゲートを設置
  2. 02デプロイ前の Terraform や Kubernetes 設定監査
  3. 03SBOM 生成と新たな CVE 公開後の再評価
  4. 04リポジトリ内のハードコード認証情報の検出

インストール

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

$npx skills add https://github.com/mukul975/anthropic-cybersecurity-skills --skill scanning-iac-and-images-with-trivy

インストール後、Claude Code で/scanning-iac-and-images-with-trivyを入力して読み込まれたか確認します。

同梱ファイル

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

LICENSE
references/
api-reference.md
standards.md
scripts/
agent.py

詳細

Trivy で IaC とイメージをスキャンする

概要

Trivy(Aqua Security 提供)は、コンテナイメージ、ファイルシステム、Git リポジトリ、仮想マシンイメージ、Kubernetes クラスター、SBOM ドキュメントなど、幅広い対象の脆弱性(CVE)、設定ミス(IaC)、シークレット、ソフトウェアライセンス、ソフトウェアサプライチェーンの弱点を検出する、包括的なオープンソースのセキュリティスキャナーです。高速で、単一の静的バイナリとして動作し、エージェントが不要で、コードスキャンダッシュボードとの連携に使える機械可読形式(JSON、SARIF、CycloneDX、SPDX)の出力に対応しているため、CI/CD パイプラインの「シフトレフト」ゲートとして広く採用されています。

Trivy には、--scanners で切り替えられる4つの主要なスキャナーがバンドルされています。

  • vuln — OS パッケージとプログラミング言語の依存関係の脆弱性検出(Trivy 脆弱性 DB と照合して CVE を判定)。
  • misconfig — 組み込みおよびカスタムの Rego ポリシーを使用した、Infrastructure-as-Code と設定の不備の検出(Terraform、CloudFormation、Kubernetes マニフェスト、Dockerfile、Helm)。
  • secret — ハードコードされたシークレット/認証情報の検出(API キー、トークン、秘密鍵)。
  • license — ソフトウェアライセンスの識別とポリシーの適用。

このスキルでは、CI/CD パイプラインをゲートする Trivy ベースのスキャンワークフローの構築方法を説明します。具体的には、プッシュ前のイメージスキャン、適用前の IaC スキャン、SBOM の生成と再スキャン、ポリシー違反時のビルド失敗を扱います。こうした弱点の検出は、攻撃者がレジストリに悪意のあるイメージや脆弱なイメージを仕込み、環境全体にデプロイさせる MITRE ATT&CK の手法 T1525(内部イメージの埋め込み) への防御に役立ちます。

使用する場面

  • イメージのプッシュやインフラストラクチャの適用前に、品質/セキュリティゲートとして脆弱性と設定ミスのスキャンを CI/CD パイプラインに組み込む場合。
  • デプロイ前に、レジストリ内のコンテナイメージを監査して既知の CVE を確認する場合。
  • Terraform、CloudFormation、Kubernetes、Dockerfile、Helm の IaC にセキュリティ上の設定ミスがないか検証する場合。
  • サプライチェーンの透明性を高めるために SBOM(CycloneDX/SPDX)を生成し、後に新たに公開された CVE がないか SBOM を再スキャンする場合。
  • 稼働中の Kubernetes クラスターをスキャンし、脆弱なワークロードや設定ミスのある RBAC/リソースを検出する場合。
  • 依存関係に対するライセンスコンプライアンスポリシーを適用する場合。

前提条件

  • Trivy の脆弱性データベースをダウンロードするためのネットワークアクセスがある Linux/macOS/Windows ホスト、または CI ランナー。
  • 名前でローカルイメージをスキャンする場合、またはコンテナ化された Trivy を使用する場合は、Docker(任意)。
  • Trivy のインストール(Aqua Security 公式の方法):
# Debian/Ubuntu (APT repository)
sudo apt-get install -y wget gnupg
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | gpg --dearmor | sudo tee /usr/share/keyrings/trivy.gpg > /dev/null
echo "deb [signed-by=/usr/share/keyrings/trivy.gpg] https://aquasecurity.github.io/trivy-repo/deb generic main" | sudo tee /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install -y trivy

# RHEL/CentOS (YUM repository), macOS (Homebrew), and install script
brew install trivy
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sudo sh -s -- -b /usr/local/bin

# Containerized usage (no install)
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy:latest image python:3.10-alpine

# Verify
trivy --version
  • エアギャップ環境やレート制限のある環境では、必要に応じて trivy image --download-db-only で DB を、Java/ポリシーバンドルを事前にダウンロードします。

目標

  • コンテナイメージの OS とプログラミング言語の脆弱性をスキャンし、重大度のしきい値を超えた場合にビルドを失敗させる。
  • IaC(Terraform/Kubernetes/Dockerfile)の設定ミスをスキャンする。
  • リポジトリまたはファイルシステム内のハードコードされたシークレットを検出する。
  • CycloneDX または SPDX の SBOM を生成し、脆弱性がないか再スキャンする。
  • GitHub コードスキャン用の SARIF と、プログラムによるゲート判定用の JSON を出力する。
  • --exit-code を使ってポリシーを適用するよう、Trivy を CI/CD パイプラインに組み込む。

MITRE ATT&CK との対応

手法 ID名前戦術関連性
T1525内部イメージの埋め込み永続化Trivy は、脆弱なイメージや悪意のあるイメージ/レイヤー、および埋め込まれたシークレットを、レジストリに仕込まれて稼働中のワークロードに拡散する前に検出します。

ワークフロー

1. コンテナイメージの脆弱性をスキャンする

レジストリイメージを脆弱性のみ対象としてスキャンし、重大度が高または重大な検出結果に絞り、修正が提供されていない CVE は無視します。

trivy image \
  --scanners vuln \
  --severity HIGH,CRITICAL \
  --ignore-unfixed \
  --format table \
  python:3.10-alpine

tarball として保存されたイメージをスキャンします(イメージをビルド済みでも、まだプッシュしていない場合に便利です)。

docker save myorg/app:1.4.0 -o app.tar
trivy image --input app.tar --severity CRITICAL --format json --output app-vulns.json
2. イメージで複数のスキャナーを有効にする

脆弱性、設定ミス、シークレット、ライセンスの各スキャナーを同時に実行します。

trivy image \
  --scanners vuln,misconfig,secret,license \
  --severity MEDIUM,HIGH,CRITICAL \
  myorg/app:1.4.0

イメージに埋め込まれた設定(Dockerfile と同等のビルド履歴と履歴内のシークレット)をスキャンします。

trivy image --image-config-scanners misconfig,secret myorg/app:1.4.0
3. Infrastructure-as-Code(設定ミス)をスキャンする

config ターゲットを使って、Terraform/Kubernetes/Dockerfile/Helm/CloudFormation の設定ミスをディレクトリ内でスキャンします。

# Scan a Terraform / IaC directory
trivy config \
  --severity HIGH,CRITICAL \
  --format table \
  ./infra

# Scan with custom Rego policies and a specific policy namespace
trivy config \
  --config-policy ./policies \
  --policy-namespaces user \
  ./infra

または、設定ミススキャナーを明示的に指定して、fs(ファイルシステム)ターゲットを使用します。

trivy fs --scanners misconfig,secret --severity HIGH,CRITICAL ./infra
4. リポジトリをスキャンしてシークレットを検出する

ローカルの作業ツリー(またはリモートリポジトリ)をスキャンし、ロックファイル内の脆弱性とハードコードされたシークレットを検出します。

# Local filesystem (dependencies + secrets)
trivy fs --scanners vuln,secret --severity HIGH,CRITICAL .

# Remote Git repository
trivy repository --scanners vuln,secret https://github.com/myorg/myrepo
5. SBOM を生成して再スキャンする

イメージから CycloneDX SBOM を生成し、その後 SBOM 自体をスキャンして脆弱性を検出します(保存した SBOM は、新しい CVE が公開された際に再評価できます)。

# Generate CycloneDX SBOM
trivy image --format cyclonedx --output sbom.cdx.json myorg/app:1.4.0

# Generate SPDX SBOM
trivy image --format spdx-json --output sbom.spdx.json myorg/app:1.4.0

# Re-scan the SBOM for vulnerabilities later
trivy sbom --severity HIGH,CRITICAL sbom.cdx.json
6. コードスキャンダッシュボード向けに SARIF を出力する

GitHub Advanced Security/コードスキャンへの取り込み用に SARIF を生成します。

trivy image \
  --format sarif \
  --output trivy-results.sarif \
  --severity HIGH,CRITICAL \
  myorg/app:1.4.0
7. 終了コードで CI/CD パイプラインを制御する

選択した重要度以上の検出結果がある場合にパイプラインのステップが失敗するよう、--exit-code 1 を使用します。「すべてをレポートする」実行(終了コード 0)と「適用する」実行(終了コード 1)を分けます。

# 1) Informational report (never fails the build)
trivy image --severity LOW,MEDIUM,HIGH,CRITICAL --exit-code 0 --format table myorg/app:1.4.0

# 2) Enforcement gate (fails build on HIGH/CRITICAL with a fix available)
trivy image \
  --severity HIGH,CRITICAL \
  --ignore-unfixed \
  --exit-code 1 \
  --format json --output gate.json \
  myorg/app:1.4.0

公式アクションを使用する GitHub Actions のステップ例:

- name: Run Trivy image scan (gate)
  uses: aquasecurity/trivy-action@master
  with:
    image-ref: 'myorg/app:1.4.0'
    format: 'sarif'
    output: 'trivy-results.sarif'
    severity: 'HIGH,CRITICAL'
    ignore-unfixed: true
    exit-code: '1'
8. 誤検知と DB を管理する

.trivyignore ファイルを使って許容済みのリスクに該当する検出結果を抑制し、DB を最新の状態に保ちます。

# .trivyignore — one CVE/AVD/secret rule ID per line
echo "CVE-2023-12345" >> .trivyignore
echo "AVD-AWS-0089"   >> .trivyignore

# Refresh DBs explicitly (useful for caching layers in CI)
trivy image --download-db-only
trivy image --download-java-db-only

# Scan a Kubernetes cluster (summary report)
trivy k8s --report summary --severity HIGH,CRITICAL cluster

ツールとリソース

ツール/リソース目的リンク
Trivyコアスキャナー CLIhttps://github.com/aquasecurity/trivy
Trivy Documentation公式ドキュメント(ターゲット、スキャナー、フラグ)https://trivy.dev/latest/docs/
trivy-actionGitHub Actions との連携https://github.com/aquasecurity/trivy-action
Trivy Operatorクラスター内 Kubernetes の継続的なスキャンhttps://github.com/aquasecurity/trivy-operator
Trivy vulnerability DBOSS 脆弱性データソースhttps://github.com/aquasecurity/trivy-db
CycloneDXTrivy が出力する SBOM 標準https://cyclonedx.org/

検証基準

  • Trivy がインストールされ、trivy --version で有効なバージョンが表示される。
  • 重要度フィルターを適用してコンテナイメージの脆弱性をスキャンする。
  • 複数のスキャナー(vuln、misconfig、secret、license)を使ってイメージをスキャンする。
  • trivy config で IaC ディレクトリをスキャンし、設定ミスを確認する。
  • リポジトリに対してシークレットスキャンを実行する。
  • CycloneDX/SPDX SBOM を生成し、trivy sbom で再スキャンして成功する。
  • コードスキャンダッシュボード向けに SARIF 出力を生成する。
  • --exit-code 1 により、HIGH/CRITICAL の検出結果がある場合に CI/CD ゲートでビルドが失敗する。
  • 許容済みのリスクに該当する検出結果について、根拠を記録したうえで .trivyignore を設定する。

コメント