IaC 보안
IaC 보안이란
Terraform·CloudFormation·Kubernetes YAML·Dockerfile 등 인프라를 코드로 정의하는 IaC 파일의 보안 설정 오류(퍼블릭 S3 버킷·암호화 미적용·과도한 권한 등)를 배포 전에 탐지하는 검사입니다. 잘못된 인프라 설정은 애플리케이션 취약점보다 더 넓은 범위의 피해를 유발할 수 있어 코드 리뷰 단계에서의 차단이 중요합니다.
도구 비교
| 도구 | 특징 | 지원 대상 | 라이선스 |
|---|---|---|---|
| Checkov | 광범위한 커버리지·커스텀 정책 지원 | Terraform·K8s·CF·Dockerfile·ARM | Apache-2.0 |
| tfsec | Terraform 전용·빠른 속도 | Terraform | MIT |
| Trivy | IaC 스캔 포함 (컨테이너와 통합) | Terraform·K8s·Dockerfile | Apache-2.0 |
| Kubesec | Kubernetes 전용 보안 점수 | Kubernetes YAML | Apache-2.0 |
멀티 IaC 환경에는 Checkov, Terraform만 사용한다면 tfsec, 컨테이너 보안과 통합하려면 Trivy를 권장합니다.
Checkov 설정
Checkov는 500개 이상의 내장 정책을 제공하며 별도 서버 없이 로컬과 CI 모두에서 실행됩니다. SARIF 포맷 출력을 지원해 GitHub Security 탭과 연동하면 PR에서 바로 결과를 확인할 수 있습니다.
기본 사용법
# 현재 디렉토리 전체 스캔
checkov -d .
# 특정 프레임워크만 스캔
checkov -d . --framework terraform
checkov -d . --framework kubernetes
# 특정 검사 항목만 실행
checkov -d . --check CKV_AWS_18,CKV_AWS_19
# 결과를 JSON으로 출력
checkov -d . -o json > checkov-report.json
GitHub Actions
# .github/workflows/iac-security.yml
name: IaC Security — Checkov
on:
pull_request:
branches: [main, develop]
jobs:
checkov:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Checkov
uses: bridgecrewio/checkov-action@master
with:
directory: .
framework: terraform,kubernetes,dockerfile
soft_fail: false
output_format: cli,sarif
output_file_path: console,checkov-results.sarif
- name: Upload SARIF
uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: checkov-results.sarif
GitLab CI
# .gitlab-ci.yml (iac-security 잡 부분)
iac-security:
stage: test
image: bridgecrew/checkov:latest
script:
- checkov -d .
--framework terraform,kubernetes,dockerfile
--output cli
--soft-fail false
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
tfsec 설정 (Terraform 전용)
tfsec은 Terraform에 특화된 도구로 실행 속도가 빠르고 AWS·Azure·GCP 등 주요 클라우드 프로바이더의 보안 규칙이 내장돼 있습니다. Checkov와 병행해 Terraform 전용 심층 검사를 추가할 때도 유용합니다.
GitHub Actions
# .github/workflows/iac-security-tfsec.yml (Terraform 전용)
name: IaC Security — tfsec
on:
pull_request:
branches: [main]
jobs:
tfsec:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tfsec
uses: aquasecurity/tfsec-action@v1.0.0
with:
soft_fail: false
예외 처리
불가피하게 특정 검사를 건너뛰어야 할 경우 인프라 코드에 인라인 주석으로 이유를 명시합니다.
# Terraform 인라인 예외 예시
resource "aws_s3_bucket" "logs" {
bucket = "my-log-bucket"
# checkov:skip=CKV_AWS_18:접근 로그 버킷은 자체 로깅 불필요
# checkov:skip=CKV_AWS_52:MFA 삭제는 로그 버킷 특성상 불필요
}
# Kubernetes 인라인 예외 예시
metadata:
annotations:
checkov.io/skip1: "CKV_K8S_14=테스트 환경 전용 파드"
주요 검사 항목
처음 도입 시 아래 항목부터 우선 검사를 활성화하면 실질적인 리스크를 빠르게 줄일 수 있습니다. 팀이 결과에 익숙해진 뒤 전체 정책으로 확대하는 것을 권장합니다.
| 항목 | Checkov ID | 설명 |
|---|---|---|
| S3 퍼블릭 접근 차단 | CKV_AWS_53 | 버킷 퍼블릭 접근 차단 설정 |
| S3 암호화 | CKV_AWS_19 | 서버 사이드 암호화 활성화 |
| 보안 그룹 0.0.0.0 | CKV_AWS_25 | SSH 포트 전체 개방 금지 |
| K8s 루트 실행 금지 | CKV_K8S_6 | 컨테이너 루트 실행 차단 |
| K8s 리소스 제한 | CKV_K8S_11 | CPU·메모리 limits 설정 |
| 최신 API 버전 | CKV_K8S_35 | 지원 종료 API 버전 사용 금지 |
셀프 스터디
위 수정기는 브라우저에서 바로 사용 가능합니다. 원본 .tf 파일에 수정 내용을 직접 반영한 전체 파일 생성이 필요하면 아래 agent를 사용하세요.
사전 조건: Trusted OSS 저장소 클론 필요
cd agents/iac-fixer
claude
agent가 아래를 자동으로 수행합니다.
- Checkov / tfsec / Trivy IaC 결과 자동 감지
- 수정 가능 항목 → 수정 코드 직접 생성
- 수정 불가 항목 → checkov:skip 주석 자동 삽입
- 원본 파일 제공 시 전체 수정 파일 생성
IaC 보안 수정기
Checkov 결과 파일을 업로드하면 위반 항목별 수정된 코드를 자동으로 생성합니다. 리포트가 아닌 바로 적용할 수 있는 수정 파일을 제공합니다.