Trivy 실무 스터디 가이드

데이터 엔지니어 · AI 엔지니어를 위한 핵심 요약
v0.60+ 2026.03 작성 🔍 취약점 스캔 📦 IaC 🧩 SBOM

1. Trivy란?

Trivy(Aquasecurity)는 컨테이너 이미지, 파일 시스템, Git 저장소, Kubernetes 클러스터, IaC 템플릿 등 다양한 대상에서 취약점(CVE), IaC misconfiguration, 비밀 정보를 탐지하는 오픈소스 보안 스캐너입니다. 단일 바이너리로 배포되며, 빠른 속도와 높은 탐지율로 업계 표준으로 자리잡았습니다.

3대 핵심 능력

🔐 취약점 스캔

OS 패키지, 언어별 라이브러리( pip, npm, gem, cargo … )의 CVE를 빠르게 탐지합니다.

⚙️ IaC 보안

Terraform, CloudFormation, Dockerfile, Kubernetes manifest의 잘못된 설정을 감사합니다.

📋 SBOM 생성

SPDX, CycloneDX 형식의 소프트웨어 자재 명세서를 자동 생성하여 공급망 보안을 지원합니다.

2. 왜 써야 하는가?

기존 스캐너(Clair, Snyk, Grype) 대비 Trivy의 강점은 속도, 단일 바이너리, 폭넓은 대상에 있습니다. 아래 비교표를 확인하세요.

특성 Trivy Clair Grype Snyk (유료)
설치 방식 단일 바이너리 Docker / 복잡한 클러스터 바이너리 + DB 업데이트 npm / 유료 에이전트
대상 범위 이미지, fs, Git, K8s, IaC 이미지 전용 이미지, fs 이미지, 코드, IaC
SBOM SPDX, CycloneDX 제한적 CycloneDX CycloneDX (유료)
속도 (이미지 1GB) ~8초 ~25초 ~12초 ~15초 (클라우드)
오픈소스 ✅ Apache 2.0 ✅ Apache 2.0 ✅ Apache 2.0 ❌ 부분 유료

💡 AI/데이터 파이프라인에서는 학습 이미지, 모델 서빙 이미지의 취약점을 CI 단계에서 빠르게 걸러낼 수 있어 MLOps 보안에 최적입니다.

3. 핵심 개념

Trivy는 내부적으로 취약점 DB를 주기적으로 업데이트하며, 스캔 시점의 DB 스냅샷을 이용합니다. 아래 아키텍처는 동작 흐름을 나타냅니다.

+----------------------------------------------+ | Trivy Architecture | +----------------------------------------------+ | CLI / Library (Python, Go) | | | | | v | | +---------+ +----------+ +-----------+ | | | Scanner |---| Parser |---| Reporter | | | +---------+ +----------+ +-----------+ | | | | | | | v v v | | +--------------------------------------+ | | | Vulnerability DB (SQLite) | | | | · NVD · GHSA · RedHat · Alpine ·.. | | | +--------------------------------------+ | | | (주기적 업데이트, github releases) | | +--------------------------------------+ | | | IaC Policies / Checks (Rego) | | | +--------------------------------------+ | +----------------------------------------------+ 입력: 이미지 / fs / Git / K8s / IaC 출력: JSON, Table, SARIF, HTML

핵심 용어:

⚠ 중요: 오프라인 환경에서는 trivy image --offline-scan 또는 --cache-dir로 DB를 사전 다운로드해야 합니다.

4. 퀵스타트

4.1 설치

macOS / Linux 권장 방법:

# macOS (Homebrew)
brew install trivy

# Linux (스크립트)
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh

# 검증
trivy --version

Python 환경에서 라이브러리로 사용하려면:

# pip 설치 (실험적)
pip install trivy

4.2 기본 설정 (trivy.yaml)

프로젝트 루트에 trivy.yaml을 두면 자동 로드됩니다.

# trivy.yaml
severity: HIGH,CRITICAL
exit-code: 1
ignorefile: .trivyignore
format: table
vuln-type: os,library
scan:
  skip-dirs:
    - /usr/lib
    - /node_modules

4.3 첫 예제 (Python + CLI)

CLI – 이미지 스캔

# 가장 기본적인 명령어
trivy image python:3.12-slim

# 심각도 필터 + JSON 출력
trivy image --severity HIGH,CRITICAL --format json python:3.12-slim

Python SDK 예제

import trivy

# 이미지 스캔 (간략)
results = trivy.scan_image("python:3.12-slim")
for vuln in results.get("vulnerabilities", []):
    print(f"{vuln['PkgName']} : {vuln['VulnerabilityID']} ({vuln['Severity']})")

# 파일 시스템 스캔
fs_results = trivy.scan_filesystem("/path/to/project")
print(fs_results["metadata"])

💡 팁: CI/CD 파이프라인에서는 --exit-code 1 옵션을 사용하여 취약점 발견 시 파이프라인을 실패시킬 수 있습니다.

5. 핵심 설정 레퍼런스

주요 CLI 옵션과 환경 변수를 표로 정리했습니다.

옵션 / 환경변수 설명 예시
--severity 출력할 심각도 수준 (UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL) --severity HIGH,CRITICAL
--exit-code 취약점 발견 시 exit code 설정 (기본 0) --exit-code 1
--format 출력 형식 (table, json, sarif, html, cyclonedx, spdx) --format json
--cache-dir DB 캐시 디렉토리 경로 (기본 ~/.cache/trivy) TRIVY_CACHE_DIR=/data/trivy-cache
--ignorefile 무시할 취약점 목록 파일 .trivyignore
TRIVY_DB_REPOSITORY 취약점 DB 미러 URL (오프라인) ghcr.io/aquasecurity/trivy-db

6. 실무 팁 & 트러블슈팅

🐌 느린 DB 업데이트

원인: 최초 DB 다운로드가 느리거나 네트워크 제한.
해결: trivy image --download-db-only로 미리 받아두거나, 사내 미러(TRIVY_DB_REPOSITORY) 사용.

🔒 프라이빗 레지스트리

원인: Docker Hub 외 레지스트리 접근 실패.
해결: --image-config docker 또는 환경변수 DOCKER_CONFIG 설정.

📦 오탐(False Positive) 처리

원인: 특정 CVE가 실제 환경에 영향 없음.
해결: .trivyignore에 ID 추가 CVE-2023-xxxxx.

🧹 디스크 공간 부족

원인: 캐시 디렉토리가 너무 큼.
해결: trivy image --clear-cache 또는 TRIVY_CACHE_DIR을 SSD로 지정.

🔥 자주 겪는 문제: FATAL image scan error: scan error: unable to initialize a scanner: unable to parse image
→ 이미지가 손상되었거나 OCI 형식이 아닙니다. docker pull로 재시도하거나 --platform 옵션을 명시하세요.

7. 참고 자료

📚 추가 학습: Trivy Operator(K8s), Trivy SBOM 생성, trivy fs --ignore-unfixed 등 심화 기능은 공식 문서를 참고하세요.