본문으로 건너뛰기

Trivy 보안 스캔 가이드

Day 4 CI/CD — 컨테이너 이미지 취약점 스캔을 파이프라인에 넣는 방법

목차


왜 Trivy인가

  • OS 패키지·언어 의존성·설정 이슈를 한 번에 스캔
  • CLI 하나로 로컬·CI 동일 명령 사용
  • GitHub Actions / GitLab CI 모두 붙이기 쉬움

설치

# macOS
brew install trivy

# 버전 확인
trivy --version

기본 스캔

# 로컬 이미지
trivy image nginx:latest

# CRITICAL / HIGH 만
trivy image --severity CRITICAL,HIGH my-app:1.0.0

# 결과를 파일로
trivy image -f table -o trivy-report.txt my-app:1.0.0

# JSON (CI 파싱용)
trivy image -f json -o trivy.json my-app:1.0.0

파일시스템·IaC도 가능합니다.

trivy fs .
trivy config ./k8s/

CI 연동 패턴

GitHub Actions (개념)

- name: Build image
run: docker build -t my-app:${{ github.sha }} .

- name: Trivy scan
run: |
trivy image --exit-code 1 --severity CRITICAL,HIGH my-app:${{ github.sha }}

--exit-code 1 이면 CRITICAL/HIGH 발견 시 잡 실패 → 배포 차단.

GitLab CI (개념)

trivy:
stage: test
image: aquasec/trivy:latest
script:
- trivy image --exit-code 1 --severity CRITICAL,HIGH $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA

Day 4의 GitHub Public + GitLab Private 흐름에서는:

  1. GitHub에서 빌드·Trivy
  2. 통과 시 GitLab Registry 푸시 / 배포 트리거

자세한 하이브리드는 github-public+gitlab-private 참고.


결과 해석

Severity권장 대응
CRITICAL배포 차단, 즉시 패치/베이스 이미지 교체
HIGH일정 내 패치, 예외는 문서화
MEDIUM 이하백로그 관리

베이스 이미지를 alpine / distroless 등으로 바꾸면 노이즈가 줄어드는 경우가 많습니다.


Day 4와의 관계

문서역할
Day 4 READMEIngress + 하이브리드 CI 전체
Ingress Nginx클러스터 진입점
이 문서이미지 보안 게이트

관련 문서

그래프 뷰

그래프 데이터 로딩 중…
현재: Trivy 보안 스캔 가이드
노드 클릭 → 이동 · 드래그 → 위치 조정