sca-trivy について
sca-trivyは、開発者やセキュリティチーム向けに、Trivyを使ったコンテナ、プロジェクトファイル、リポジトリのスキャン手順をまとめたスキルです。脆弱性の評価と修正、CI/CD連携、SBOM生成のワークフローとスクリプトを含みます。
主な機能
- 01コンテナと依存関係の脆弱性スキャン
- 02IaCの設定ミス検出
- 03シークレットとライセンスのスキャン
- 04CVSSに基づく修正レポート
- 05CycloneDXとSPDX形式のSBOM生成
- 06CI/CDテンプレートとベースライン追跡
活用シーン
- 01コンテナイメージの脆弱性修正を優先付け
- 02依存関係を確認し更新後に再スキャン
- 03TerraformとKubernetesの設定を点検
- 04コンプライアンスやサプライチェーン審査用のSBOM生成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agentsecops/ secopsagentkit --skill sca-trivyインストール後、Claude Code で/sca-trivyを入力して読み込まれたか確認します。
詳細
Trivy によるソフトウェア構成分析
概要
Trivy は、コンテナ、ファイルシステム、Git リポジトリを対象とする包括的なセキュリティスキャナーです。OS パッケージやアプリケーションの依存関係に含まれる脆弱性(CVE)、IaC の設定ミス、公開されたシークレット、ソフトウェアライセンスを検出します。このスキルでは、脆弱性スキャン、SBOM の生成、CI/CD との統合、CVSS および OWASP の標準に沿った修正の優先順位付けのワークフローを提供します。
クイックスタート
コンテナイメージの脆弱性をスキャンします。
# Install Trivy
brew install trivy # macOS
# or: apt-get install trivy # Debian/Ubuntu
# or: docker pull aquasec/trivy:latest
# Scan container image
trivy image nginx:latest
# Scan local filesystem for dependencies
trivy fs .
# Scan IaC files for misconfigurations
trivy config .
# Generate SBOM
trivy image --format cyclonedx --output sbom.json nginx:latest
主なワークフロー
ワークフロー 1:コンテナイメージのセキュリティ評価
進捗:
[ ] 1. 対象のコンテナイメージを特定する(repository:tag)
[ ] 2. trivy image <image-name> で包括的な Trivy スキャンを実行する
[ ] 3. 重大度(CRITICAL、HIGH、MEDIUM、LOW)ごとに脆弱性の検出結果を分析する
[ ] 4. CVE の検出結果を CWE カテゴリおよび OWASP の参照情報に対応付ける
[ ] 5. 利用可能なパッチと更新済みのベースイメージを確認する
[ ] 6. アップグレードの推奨事項を含む、優先順位を付けた修正レポートを作成する
各ステップを順に進めます。完了した項目にチェックを付けてください。
ワークフロー 2:依存関係の脆弱性スキャン
プロジェクトの依存関係をスキャンし、既知の脆弱性を検出します。
# Scan filesystem for all dependencies
trivy fs --severity CRITICAL,HIGH .
# Scan specific package manifest
trivy fs --scanners vuln package-lock.json
# Generate JSON report for analysis
trivy fs --format json --output trivy-report.json .
# Generate SARIF for GitHub/GitLab integration
trivy fs --format sarif --output trivy.sarif .
脆弱性ごとに、次の手順を実施します。
- CVE の詳細と CVSS スコアを確認する
- 修正済みバージョンが利用可能か確認する
- 言語固有のガイダンスについて、
references/remediation_guide.mdを参照する - 依存関係をパッチ適用済みのバージョンに更新する
- 再スキャンして修正を検証する
ワークフロー 3:Infrastructure as Code のセキュリティ
IaC ファイルの設定ミスを検出します。
# Scan Terraform configurations
trivy config ./terraform --severity CRITICAL,HIGH
# Scan Kubernetes manifests
trivy config ./k8s --severity CRITICAL,HIGH
# Scan Dockerfile best practices
trivy config --file-patterns dockerfile:Dockerfile .
# Generate report with remediation guidance
trivy config --format json --output iac-findings.json .
検出結果をカテゴリごとに確認します。
- セキュリティ:認証、認可、暗号化
- コンプライアンス:CIS ベンチマーク、セキュリティ標準
- ベストプラクティス:リソース制限、不変性、最小権限
ワークフロー 4:CI/CD パイプラインとの統合
GitHub Actions
name: Trivy Security Scan
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: '.'
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
- name: Upload results to GitHub Security
uses: github/codeql-action/upload-sarif@v2
with:
sarif_file: 'trivy-results.sarif'
GitLab CI
trivy-scan:
stage: test
image: aquasec/trivy:latest
script:
- trivy fs --exit-code 1 --severity CRITICAL,HIGH --format json --output trivy-report.json .
artifacts:
reports:
dependency_scanning: trivy-report.json
when: always
allow_failure: false
追加のプラットフォームには、assets/ci_integration/ にある同梱テンプレートを使用してください。
ワークフロー 5:SBOM の生成
サプライチェーンの透明性を高めるため、ソフトウェア部品表を生成します。
# Generate CycloneDX SBOM
trivy image --format cyclonedx --output sbom-cyclonedx.json nginx:latest
# Generate SPDX SBOM
trivy image --format spdx-json --output sbom-spdx.json nginx:latest
# SBOM for filesystem/project
trivy fs --format cyclonedx --output project-sbom.json .
SBOM の用途:
- 脆弱性の追跡:依存関係を監視して、新たな CVE を検出する
- ライセンスコンプライアンス:ライセンス上の義務とリスクを特定する
- サプライチェーンセキュリティ:コンポーネントの由来を検証する
- 規制コンプライアンス:CISA の SBOM 要件を満たす
セキュリティ上の考慮事項
機密データの取り扱い
- レジストリの認証情報:環境変数または認証情報ヘルパーを使用し、決してハードコードしないでください
- スキャンレポート:脆弱性の詳細やパッケージのバージョンが含まれるため、機密情報として扱ってください
- SBOM ファイル:内部アーキテクチャが明らかになる場合があるため、適切にアクセスを管理してください
- シークレットスキャン:
--scanners secretを有効にして、イメージ内で公開されている認証情報を検出してください
アクセス制御
- コンテナレジストリへのアクセス:イメージのスキャンにはプル権限が必要です
- ファイルシステムへのアクセス:依存関係マニフェストと IaC ファイルに対する読み取り権限が必要です
- CI/CD との統合:API トークンとレジストリの認証情報をシークレット管理で保護してください
- レポートの保存:脆弱性レポートと SBOM 成果物へのアクセスを制限してください
監査ログ
コンプライアンスおよびインシデント対応のため、次の情報を記録してください。
- スキャン実行のタイムスタンプと対象範囲(イメージ、ファイルシステム、リポジトリ)
- 重大度レベルごとの脆弱性件数
- ポリシー違反とブロックの判断
- SBOM の生成および配布イベント
- 修正措置とバージョン更新
コンプライアンス要件
- PCI-DSS 6.2:システムコンポーネントが既知の脆弱性から保護されていることを確認する
- SOC2 CC7.1:セキュリティに影響する可能性のある変更を検出し、対応する
- NIST 800-53 SI-2:欠陥の修正と脆弱性スキャン
- CIS ベンチマーク:コンテナと Kubernetes のセキュリティ強化
- OWASP Top 10 A06:脆弱で古いコンポーネント
- CWE-1104:保守されていないサードパーティコンポーネントの使用
同梱リソース
スクリプト(scripts/)
trivy_scan.py- JSON/SARIF 出力と重要度フィルタリングに対応した包括的なスキャンsbom_generator.py- CycloneDX および SPDX 形式に対応した SBOM の生成vulnerability_report.py- Trivy の出力を解析し、CVSS スコアを含む修正レポートを生成baseline_manager.py- 新たな脆弱性のみを追跡するためのベースライン作成
リファレンス(references/)
scanner_types.md- 脆弱性、設定ミス、シークレット、ライセンスのスキャンに関する詳細ガイドremediation_guide.md- 言語およびエコシステム固有の修正戦略cvss_prioritization.md- CVSS スコアの解釈と脆弱性の優先順位付けフレームワークiac_checks.md- CIS ベンチマークとの対応付けを含む IaC セキュリティチェックの全リスト
アセット(assets/)
trivy.yaml- セキュリティポリシーと無視ルールを含むカスタム Trivy 設定ci_integration/github-actions.yml- セキュリティゲートを含む GitHub Actions ワークフロー一式ci_integration/gitlab-ci.yml- 依存関係スキャンを含む GitLab CI パイプライン一式ci_integration/jenkins.groovy- Trivy 統合を含む Jenkins パイプラインpolicy_template.rego- カスタム脆弱性ポリシー用の OPA ポリシーテンプレート
よくあるパターン
パターン 1:複数段階のセキュリティスキャン
複数のスキャン種別を組み合わせた包括的なセキュリティ評価:
# 1. Scan container image for vulnerabilities
trivy image --severity CRITICAL,HIGH myapp:latest
# 2. Scan IaC for misconfigurations
trivy config ./infrastructure --severity CRITICAL,HIGH
# 3. Scan filesystem for dependency vulnerabilities
trivy fs --severity CRITICAL,HIGH ./app
# 4. Scan for exposed secrets
trivy fs --scanners secret ./app
# 5. Generate comprehensive SBOM
trivy image --format cyclonedx --output sbom.json myapp:latest
パターン 2:ベースラインによる脆弱性追跡
新たな脆弱性のみを追跡するベースラインスキャンを実装します:
# Initial scan - create baseline
trivy image --format json --output baseline.json nginx:latest
# Subsequent scans - detect new vulnerabilities
trivy image --format json --output current.json nginx:latest
./scripts/baseline_manager.py --baseline baseline.json --current current.json
パターン 3:ライセンスコンプライアンススキャン
ライセンスコンプライアンスのリスクを検出します:
# Scan for license information
trivy image --scanners license --format json --output licenses.json myapp:latest
# Filter by license type
trivy image --scanners license --severity HIGH,CRITICAL myapp:latest
検出結果を確認します:
- 高リスク:GPL、AGPL(強いコピーレフト)
- 中リスク:LGPL、MPL(弱いコピーレフト)
- 低リスク:Apache、MIT、BSD(寛容なライセンス)
パターン 4:カスタムポリシーの適用
OPA でカスタムセキュリティポリシーを適用します:
# Create Rego policy in assets/policy_template.rego
# Deny images with CRITICAL vulnerabilities or outdated packages
# Run scan with policy enforcement
trivy image --format json --output scan.json myapp:latest
trivy image --ignore-policy assets/policy_template.rego myapp:latest
統合ポイント
CI/CD 統合
- GitHub Actions:ネイティブの
aquasecurity/trivy-actionを使用し、SARIF を Security タブにアップロード - GitLab CI:Security Dashboard 用の依存関係スキャンレポート形式
- Jenkins:JUnit XML レポートを生成する Docker ベースのスキャン
- CircleCI:アーティファクトストレージを備えた Docker executor
- Azure Pipelines:タスクベースの統合と結果の公開
コンテナプラットフォーム
- Docker:レジストリへのプッシュ前にイメージをスキャン
- Kubernetes:実行時スキャンに trivy-operator を使用するアドミッションコントローラー
- Harbor:レジストリスキャン用の Trivy 組み込み統合
- AWS ECR:拡張スキャンを有効にして、プッシュ時にイメージをスキャン
- Google Artifact Registry:脆弱性スキャンとの統合
セキュリティツールのエコシステム
- SIEM 統合:JSON の検出結果を Splunk、ELK、または Datadog にエクスポート
- 脆弱性管理:SARIF/JSON を Snyk、Qualys、または Rapid7 にインポート
- SBOM ツール:CycloneDX および SPDX と dependency-track、GUAC との互換性
- ポリシー適用:コードとしてのカスタムポリシーに向けた OPA/Rego 統合
トラブルシューティング
問題:誤検知が多い
症状:ユースケースに該当しない脆弱性が多数報告される
解決策:
.trivyignoreファイルを使用して、理由を添えて特定の CVE を抑制します- 悪用可能性でフィルタリングします:
trivy image --ignore-unfixed myapp:latest - 重要度でフィルタリングします:
--severity CRITICAL,HIGH - 誤検知の妥当性を確認するため、ベンダー固有のセキュリティ勧告を確認します
- よくあるパターンについては
references/false_positives.mdを参照してください
問題:大きなイメージでのパフォーマンス問題
症状:スキャンに過度な時間がかかる、またはメモリ使用量が多い
解決策:
- キャッシュ済みの DB を使用します:
trivy image --cache-dir /path/to/cache myapp:latest - 不要なスキャナーをスキップします:
--scanners vuln(config、secret を除外) - 初回の DB ダウンロード後はオフラインモードを使用します:
--offline-scan - タイムアウトを延長します:
--timeout 30m - 特定のレイヤーをスキャンします:削除済みパッケージを除外するには
--removed-pkgsを使用します
問題:特定の言語で脆弱性が検出されない
症状:アプリケーションの依存関係で、想定される CVE が検出されません
解決策:
- 言語のサポートを確認します:サポートされている言語とファイルパターンを確認してください
- 依存関係マニフェストが存在することを確認します(package.json、go.mod、requirements.txt)
- 正確なバージョン検出のために、ロックファイルを含めます
- コンパイル済みバイナリの場合は、ソースコードを別途スキャンします
- 言語固有の要件については、
references/scanner_types.mdを参照してください
問題:レジストリの認証エラー
症状:プライベートコンテナーイメージをスキャンできません
解決策:
# Use Docker credential helper
docker login registry.example.com
trivy image registry.example.com/private/image:tag
# Or use environment variables
export TRIVY_USERNAME=user
export TRIVY_PASSWORD=pass
trivy image registry.example.com/private/image:tag
# Or use credential file
trivy image --username user --password pass registry.example.com/private/image:tag
高度な設定
Trivy のカスタム設定
設定ファイル trivy.yaml を作成します:
# trivy.yaml
vulnerability:
type: os,library
severity: CRITICAL,HIGH,MEDIUM
ignorefile: .trivyignore
ignore-unfixed: false
skip-files:
- "test/**"
- "**/node_modules/**"
cache:
dir: /tmp/trivy-cache
db:
repository: ghcr.io/aquasecurity/trivy-db:latest
output:
format: json
severity-sort: true
次のように使用します:trivy image --config trivy.yaml myapp:latest
Trivy の無視ファイル
特定の CVE を抑制するには、.trivyignore を作成します:
# .trivyignore
# False positive - patched in vendor fork
CVE-0000-12345
# Risk accepted by security team - JIRA-1234
CVE-0000-67890
# No fix available, compensating controls in place
CVE-0000-11111
オフラインのエアギャップ環境でのスキャン
エアギャップ環境では、次のようにします:
# On internet-connected machine:
trivy image --download-db-only --cache-dir /path/to/db
# Transfer cache to air-gapped environment
# On air-gapped machine:
trivy image --skip-db-update --cache-dir /path/to/db --offline-scan myapp:latest