피드로 돌아가기
Dev.toDevOps
원문 읽기
Your Dockerfile Scanner Should Break the Build
docker-scan-lite가 exit code 0 고정에서 --exit-code 플래그 도입으로 CI/CD 파이프라인 실패 조건 추가
AI 요약
Context
docker-scan-lite는 Dockerfile 보안 취약점을 스캔했으나 항상 exit code 0을 반환하여 CI 파이프라인이 경고를 무시하고 계속 진행했다. 결과적으로 USER root 설정, 하드코딩된 AWS 키, 평문 환경변수 등 심각한 보안 이슈가 있는 이미지도 배포되었다.
Technical Solution
- exit-code 플래그 추가:
docker-scan-lite -f Dockerfile --exit-code high로 지정 심각도 이상 이슈 발견 시 0 이외의 코드 반환 - GitHub Action에 fail-on 파라미터 통합:
with: fail-on: high로 선언적 실패 조건 설정 - 다단계 빌드(multi-stage) 인식 추가: builder stage 이슈는 무시하고 최종 실행 stage의 이슈만 검사
- 검사 범위 축소: 모든 URL이 데이터베이스 연결 문자열로 오탐되는 현상 제거, postgres://, mysql://, mongodb:// 프로토콜만 감지
- SARIF 형식 출력 지원: GitHub Security 탭에 CodeQL 발견사항과 함께 Dockerfile 이슈 표시
- 새로운 검사 규칙 추가: HEALTHCHECK 미지정(INFO), USER 명령어 미지정(MEDIUM), FROM scratch에 "latest 태그 없음" 오탐 제거
Impact
CRITICAL 수준 이슈 목록: USER root(보안 이슈), 하드코딩된 시크릿(보안 이슈), 평문 민감 환경변수(보안 이슈)
Key Takeaway
CI/CD 보안 검사는 경고만으로는 무효하며 파이프라인 자동 중단 메커니즘이 필수이다. 또한 빌드 stage와 실행 stage를 구분하고 오탐을 줄이는 것이 실제 도입을 위한 전제조건이다.
실천 포인트
Dockerfile 스캐닝을 도입하는 팀에서 --exit-code 플래그를 기본값으로 적용하고 CI 파이프라인 실패 조건과 연결하면 보안 규칙을 우회하기 어렵게 만들 수 있다. 동시에 multi-stage 빌드 인식과 프로토콜 기반 필터링으로 오탐을 50% 이상 줄일 수 있어 개발자 피로도를 낮출 수 있다.