본문으로 건너뛰기

IaC 스캔

Dockerfile에 USER root가 그대로 남아 있거나, Kubernetes 매니페스트에 권한 제한이 빠져 있다면 어떻게 알 수 있을까요? IaC(Infrastructure as Code) 스캔은 인프라를 정의한 코드를 검사하여 보안 설정 오류를 자동으로 찾아냅니다.

IaC 스캔이 왜 중요한가요?

요즘 인프라는 코드로 정의됩니다. Dockerfile, Kubernetes 매니페스트, Terraform 파일이 곧 인프라의 설계도입니다. 이 설계도에 잘못된 설정이 있으면 컨테이너가 과도한 권한으로 실행되거나, 외부에 불필요한 포트가 열리는 등 보안 사고로 이어질 수 있습니다. IaC 스캔은 인프라가 배포되기 전에 코드 수준에서 문제를 발견합니다.

IaC 스캔 결과

개요

  • 분석 대상: Git 저장소의 인프라 정의 코드 (Dockerfile, Kubernetes 매니페스트, Terraform 등)
  • 분석 엔진: Checkov
  • 분석 기준: Checkov 내장 정책 (CIS Benchmark 기반 베스트 프랙티스)
  • 결과 형식: 정책 체크 항목별 통과/실패 판정
IaC와 SAST의 차이

SAST는 애플리케이션 소스 코드의 취약한 로직을 찾고, IaC 스캔은 인프라 설정 코드의 잘못된 구성을 찾습니다. 둘 다 코드를 정적으로 분석하지만 검사 대상이 다릅니다.


Step 1: IaC 스캔 진입

  1. 사이드바의 "보안" 그룹 > [보안 분석] 메뉴를 클릭합니다.
  2. 페이지 상단의 카드 캐러셀에서 분석할 서비스를 선택합니다.
  3. IaC 탭을 선택합니다.
URL로 바로 진입하기

/security?id={서비스ID}&area=iac URL로 진입하면 해당 서비스의 IaC 탭이 바로 열립니다.


Step 2: 스캔 입력 항목

IaC 탭 상단의 트리거 바에서는 다음 항목을 사용합니다.

  • Git 저장소 URL (필수): 인프라 코드가 있는 저장소 URL
  • 브랜치 (선택, 기본 main): 분석할 브랜치명
  • Git 토큰 (선택, Private Repo용): 저장소 읽기 권한이 있는 토큰

Git URL, 브랜치, 토큰은 설정 탭에서 SAST/IaC/시크릿 공통으로 등록할 수 있습니다. 설정 탭에 등록해두면 IaC 스캔 시 자동으로 사용됩니다.

Git 토큰 폴백 동작

Git 토큰을 직접 입력하지 않으면, 백엔드는 설정 탭이나 기관/조직 설정에 저장된 토큰을 자동으로 사용합니다.


Step 3: 스캔 실행

스캔 시작 버튼을 클릭하면 Checkov가 저장소를 클론하여 인프라 정의 파일을 분석합니다. 진행률은 WebSocket을 통해 실시간으로 표시됩니다.

Checkov는 저장소에서 다음과 같은 인프라 정의 파일을 자동으로 탐지하여 검사합니다.

  • Dockerfile: 베이스 이미지, 사용자 권한, 노출 포트 등
  • Kubernetes 매니페스트 (*.yaml): Pod 보안 컨텍스트, 리소스 제한, 권한 설정 등
  • Terraform (*.tf): 클라우드 리소스 설정, 네트워크 규칙, 암호화 설정 등

스캔이 완료되면 결과 화면이 자동으로 갱신됩니다.


Step 4: 결과 확인

4.1 결과 요약

스캔이 완료되면 다음 정보를 확인할 수 있습니다.

  • 총 체크 수: Checkov가 수행한 정책 체크 항목의 총 개수
  • 통과 / 실패: 통과한 항목과 실패한 항목의 수
  • 심각도별 분류: 실패한 항목의 심각도 분포 (Critical/High/Medium/Low/Unknown) — 심각도가 확인되지 않은 항목은 Unknown으로 분류됩니다.

4.2 실패 항목 상세

실패한 체크 항목을 클릭하면 다음 정보를 확인할 수 있습니다.

  • 파일 위치: 문제가 발견된 파일 경로와 라인 번호
  • 정책 ID 및 설명: 어떤 Checkov 정책에 위배되었는지
  • 심각도: 문제의 심각도
  • 권장 조치: 설정을 어떻게 수정해야 하는지 안내

4.3 스캔 이력

IaC 탭의 스캔 이력 테이블에서는 시점별 정책 위반 추세를 확인할 수 있습니다. 매 스캔마다 결과가 누적되므로 보안 개선 진척도를 한눈에 파악할 수 있습니다.

  • 스캔 일시: 각 스캔 실행 시각
  • Critical/High/Medium/Low: 각 심각도별 위반 건수
  • 위반 총계: 누적 위반 수와 이전 스캔 대비 증감 표시 (▲/▼)
  • 보는 중: 현재 결과 영역에 표시 중인 시점을 마크

이력 테이블의 행을 클릭하면 그 시점의 상세 결과(실패한 체크 항목 목록)가 결과 영역에 표시됩니다. 특정 시점 이후의 변화를 비교 분석할 때 유용합니다.


주요 탐지 항목

Dockerfile

  • root 사용자 실행: USER 지시어 없이 컨테이너가 root로 실행되는 경우
  • 고정되지 않은 베이스 이미지 태그: latest 태그 사용으로 재현성이 깨지는 경우
  • 불필요한 패키지 설치: 공격 표면을 넓히는 패키지 포함

Kubernetes 매니페스트

  • 권한 상승 허용: allowPrivilegeEscalation이 제한되지 않은 경우
  • 리소스 제한 누락: CPU/메모리 limit가 설정되지 않은 경우
  • 읽기 전용 루트 파일시스템 미설정: readOnlyRootFilesystem이 적용되지 않은 경우

Terraform

  • 암호화 미설정: 스토리지나 데이터베이스 암호화가 비활성화된 경우
  • 과도하게 개방된 네트워크 규칙: 보안 그룹이 0.0.0.0/0에 포트를 노출하는 경우
컨테이너 권한 설정 주의

컨테이너를 root로 실행하면 컨테이너 탈출(escape) 시 호스트가 위험해질 수 있습니다. Dockerfile에 USER 지시어를 추가하고, Kubernetes에서는 securityContext로 권한을 제한하세요.


문제 해결

스캔 실패

  • 코드 접근 불가: Git 토큰에 저장소 읽기 권한이 있는지 확인하세요. 설정 탭이나 기관 설정의 저장된 토큰이 자동으로 사용됩니다.

  • 인프라 파일 없음: 저장소에 Dockerfile, Kubernetes 매니페스트, Terraform 파일이 없으면 검사 대상이 없어 결과가 비어 있을 수 있습니다.

  • 타임아웃: 대용량 저장소의 경우 분석 시간이 오래 걸릴 수 있습니다. 분석 범위를 특정 브랜치로 제한하세요.

과다 탐지

Checkov 내장 정책은 엄격한 베스트 프랙티스를 기준으로 하므로 실패 항목이 많을 수 있습니다. Critical/High 심각도의 항목부터 우선 처리하세요.


관련 가이드