0Pricing
Security+ Academy · 강의

코드형 인프라 보안 검사

IaC 보안 도구(Checkov, tfsec)로 Terraform, CloudFormation, Helm 차트를 검사해 운영 환경에 도달하기 전에 잘못된 구성을 찾아냅니다.

코드형 인프라 보안 검사은(는) CoddyKit의 무료 Security+ Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Security+ Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Security+ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

Infrastructure as Code 보안 개요

Infrastructure as Code(IaC) 도구인 Terraform, AWS CloudFormation, Ansible, Helm을 사용하면 버전 관리되는 구성 파일에 인프라를 정의할 수 있습니다. 이는 반복 가능성, 감사 가능성, 자동화라는 큰 이점을 제공하지만, 동시에 중요한 보안 위험도 초래합니다. IaC 파일의 잘못된 구성은 대규모로 안전하지 않은 인프라를 생성합니다. 잘못 구성된 Terraform 모듈 하나를 50개 환경에 배포하면 50개의 취약한 시스템이 동시에 만들어집니다. IaC 보안 검사는 구성이 적용되기 전에 구성 파일을 확인하여 이 문제를 해결하고, 개발자 작업 흐름에 보안을 앞단으로 이동시킵니다.

일반적인 IaC 잘못된 구성

보안 검사 도구는 실제 클라우드 환경에서 발견되는 가장 일반적인 IaC 잘못된 구성을 찾습니다. 공개 접근이 활성화되었거나 저장 시 암호화가 적용되지 않은 S3 버킷, 민감한 포트(22, 3389, 1433)에 0.0.0.0/0 인바운드 규칙이 있는 보안 그룹, 암호화되지 않았거나 공개 접근이 가능한 데이터베이스, * Resource 또는 Action 와일드카드를 포함한 IAM 정책, 한 리전에서 비활성화된 CloudTrail, 키 순환이 설정되지 않은 KMS 키, HTTPS 대신 HTTP 리스너를 사용하는 로드 밸런서 등이 그 예입니다. 이러한 결과는 CIS AWS Foundations와 같은 클라우드 보안 벤치마크가 수행하는 Checks와 매우 유사합니다.

# Dangerous Terraform: public S3 bucket + no encryption
resource 'aws_s3_bucket' 'data' {
  bucket = 'my-data-bucket'
  # Missing: server_side_encryption_configuration
  # Missing: aws_s3_bucket_public_access_block
}

Checkov: IaC를 위한 코드로서의 정책

Checkov(Bridgecrew/Prisma Cloud 제공)는 Terraform, CloudFormation, Kubernetes 매니페스트, Helm 차트, Dockerfile을 지원하는 IaC용 인기 오픈 소스 정적 분석 도구입니다. CIS 벤치마크, GDPR, SOC 2, HIPAA에 매핑된 1,000개 이상의 기본 제공 정책이 포함되어 있습니다. checkov -d .를 실행하면 현재 디렉터리의 모든 IaC 파일을 검사하고, 리소스 경로와 수정 지침이 포함된 통과, 실패, 건너뛴 Check 결과를 색상으로 구분해 보고합니다. Checkov는 CI/CD 파이프라인에 통합하여 CRITICAL Check가 실패할 때 배포를 차단할 수 있습니다.

# Install and run Checkov on Terraform files
pip install checkov
checkov -d ./terraform/ --framework terraform

# Fail CI pipeline on HIGH severity findings
checkov -d ./terraform/ --check HIGH --hard-fail-on HIGH

tfsec: Terraform 보안 검사기

tfsec(현재는 Trivy의 IaC 검사 기능에 포함됨)는 Terraform을 위해 특별히 설계된 보안 검사기로, HCL 구문을 깊이 이해하므로 모듈과 변수 파일 전반에서 값을 추적할 수 있습니다. 단순한 검사기와 달리 tfsec는 문제가 여러 파일에 걸쳐 있는 잘못된 구성을 탐지할 수 있습니다. 예를 들어 보안 그룹 규칙만 보면 안전해 보이지만 다른 파일의 리소스에 연결되어 있을 수 있습니다. tfsec는 심각도 수준(CRITICAL, HIGH, MEDIUM, LOW), CWE ID, 수정 문서로 바로 연결되는 링크가 포함된 발견 사항을 생성하므로 개발자가 실제 조치를 취할 수 있습니다.

# Install tfsec and scan Terraform directory
brew install tfsec
tfsec ./terraform/ --format json

# Or use Trivy for unified IaC + container scanning
trivy config ./terraform/

IaC 파일의 비밀 정보

가장 심각한 IaC 보안 문제 중 하나는 구성 파일에 비밀 정보를 하드코딩하는 것입니다. 여기에는 Git에 커밋된 비밀번호, API 키, TLS 개인 키, 데이터베이스 연결 문자열이 포함됩니다. IaC 저장소는 여러 팀이 공유하고 버전 관리 기록에 저장되는 경우가 많으므로, 비밀 정보가 단 한 번이라도 커밋되면 사실상 영구적으로 유출된 것으로 간주해야 합니다(Git 기록은 변경할 수 없습니다). Checkov, detect-secrets, git-secrets, TruffleHog와 같은 도구는 비밀 정보 패턴을 검사합니다. 해결 방법은 환경 변수나 비밀 정보 저장소에서 참조하는 입력 변수를 사용하는 것이며, 값을 절대 하드코딩해서는 안 됩니다.

# Bad: hardcoded password in Terraform
resource 'aws_db_instance' 'main' {
  password = 'supersecret123'  # NEVER DO THIS
}

# Good: read from variable, inject from secrets manager
variable 'db_password' { sensitive = true }
resource 'aws_db_instance' 'main' {
  password = var.db_password
}

코드로서의 정책: OPA와 Sentinel

코드로서의 정책(Policy as Code, PaC) 프레임워크를 사용하면 보안 팀이 사용자 지정 규칙을 코드로 작성하고 일관되게 적용할 수 있습니다. Conftest와 함께 사용하는 Open Policy Agent(OPA)를 이용하면 Terraform 계획, Kubernetes 매니페스트, Helm 값 등 모든 구조화된 데이터를 검증하는 Rego 정책을 CI/CD 파이프라인에서 작성할 수 있습니다. HashiCorp Sentinel은 Terraform Enterprise와 Cloud에 기본으로 포함되어 있으며, '모든 S3 Bucket은 암호화가 활성화되어야 한다'와 같은 정책을 계획 수립 시 적용할 수 있습니다. 따라서 정책을 위반하는 모든 적용 작업이 차단됩니다. 이러한 도구를 사용하면 보안 요구 사항을 코드로 정의하고, 해당 인프라와 함께 버전 관리할 수 있습니다.

# Example Conftest OPA policy: deny public S3
# deny[msg] {
#   input.resource.aws_s3_bucket[name]
#   input.resource.aws_s3_bucket_public_access_block == null
#   msg := sprintf('Bucket %v lacks public access block', [name])
# }

변경 감지: 구성과 실제 상태 비교

구성 변경(Configuration drift)은 배포된 인프라의 실제 상태가 IaC 정의와 달라질 때 발생합니다. 클라우드 콘솔에서 누군가 수동으로 변경하는 경우가 흔한 원인입니다. 개발자의 작업을 '일시적으로' 차단하지 않도록 수동으로 추가한 보안 그룹 규칙이 영구적인 보안 공백이 될 수 있습니다. 변경 감지 도구는 원하는 상태(IaC 파일)와 실제 배포 상태를 지속적으로 비교하고 차이가 발생하면 경고합니다. AWS Config, Terraform Cloud의 변경 감지, CSPM 도구(Prisma Cloud, Wiz)가 모두 이 기능을 제공합니다. 콘솔 변경으로 발생한 잘못된 보안 구성은 공격자가 발견하기 전에 탐지됩니다.

# Terraform: detect drift between state and actual cloud resources
terraform plan -refresh-only
# If output shows changes, someone modified infrastructure outside Terraform

변경 불가능한 인프라와 GitOps

변경 불가능한 인프라란 서버와 구성을 기존 위치에서 수정하지 않고, 변경할 때마다 새 리소스(새 AMI, 새 컨테이너 이미지)를 만든 다음 기존 리소스를 교체하는 방식을 의미합니다. 모든 인프라 변경이 Git 풀 리퀘스트를 거쳐야 하고 IaC 검사 및 승인 작업 흐름을 시작하는 GitOps와 결합하면, 설계상 구성 변경을 제거할 수 있습니다. 무언가를 수동으로 변경할 수 없다면 변경이 발생할 수도 없기 때문입니다. Kubernetes용 ArgoCD와 Terraform용 Atlantis 같은 도구는 변경 사항이 발생하면 자동 조정 또는 경고를 실행하는 GitOps 작업 흐름을 구현합니다.

SAST와 IaC 검사의 차이

IaC 보안 검사는 때때로 SAST(정적 애플리케이션 보안 검사)와 혼동되지만, 두 검사는 서로 다른 산출물을 대상으로 합니다. SAST는 애플리케이션 소스 코드(Python, Java, JavaScript)를 분석하여 SQL 삽입이나 버퍼 오버플로와 같은 취약점을 찾습니다. IaC 검사는 인프라 구성 파일을 분석하여 클라우드 보안 잘못된 구성을 찾으며, 애플리케이션 코드는 관여하지 않습니다. 완전한 DevSecOps 파이프라인에는 두 검사가 모두 포함됩니다. 애플리케이션 코드에는 SAST를 적용하고 인프라 파일에는 IaC 검사를 적용합니다. 두 검사는 배포 전에 CI/CD에서 실행됩니다. 일부 통합 플랫폼(Snyk IaC, Prisma Cloud)은 애플리케이션과 인프라 검사를 하나의 도구로 결합합니다.

CI/CD에 IaC 검사 통합하기

효과적인 IaC 보안 검사는 선택 사항이 아니라 자동화하고 강제해야 합니다. 일반적인 CI/CD 통합 방식은 다음과 같습니다. 모든 풀 리퀘스트에서 Checkov와 tfsec를 실행하고, CRITICAL 발견 사항이 있으면 파이프라인을 실패 처리하며, 개발자가 확인할 수 있도록 발견 사항을 풀 리퀘스트 댓글로 게시합니다. 또한 문서화된 사유와 함께 억제된 발견 사항 목록을 유지하고, 매일 밤 배포된 리소스를 검사하여 변경 여부를 확인합니다. Checkov와 함께 pre-commit 같은 도구를 사용하는 커밋 전 훅은 코드가 파이프라인에 도달하기 전에도 문제를 찾을 수 있습니다. 거짓 양성 관리도 중요합니다. 관련 없는 발견 사항을 너무 많이 본 개발자는 이를 무시하기 시작하기 때문입니다.

# GitHub Actions: IaC security scanning
# - name: Run Checkov IaC Scan
#   uses: bridgecrewio/checkov-action@master
#   with:
#     directory: terraform/
#     framework: terraform
#     soft_fail: false  # fail PR on findings
#     output_format: sarif  # upload to GitHub Security tab

Terraform 상태 보안

Terraform의 상태 파일(terraform.tfstate)에는 관리되는 모든 리소스의 전체 목록이 포함되며, 데이터베이스 비밀번호, TLS 개인 키, IAM 액세스 키 ID와 같은 민감한 출력 값이 평문으로 들어 있는 경우가 많습니다. 상태 파일을 Git에 커밋해서는 절대 안 됩니다. 대신 원격 백엔드(DynamoDB 잠금 기능을 사용하는 AWS S3, Terraform Cloud 또는 GitLab 관리 상태)를 사용하고 서버 측 암호화를 활성화해야 합니다. 상태 백엔드에 대한 접근은 IAM을 통해 엄격하게 통제해야 합니다. 상태 파일을 읽을 수 있는 사람은 누구나 모든 인프라 세부 정보를 열거하고 포함된 비밀 정보를 추출할 가능성이 있기 때문입니다.

# Secure Terraform remote backend
terraform {
  backend 's3' {
    bucket         = 'my-terraform-state'
    key            = 'prod/terraform.tfstate'
    region         = 'us-east-1'
    encrypt        = true
    kms_key_id     = 'arn:aws:kms:us-east-1:123:key/abc'
    dynamodb_table = 'terraform-state-lock'
  }
}

빠른 확인

이 lesson에서 다룬 CompTIA Security+(SY0-701) 개념을 제대로 이해했는지 확인해 보십시오.

lesson 요약

이 lesson에서는 다음 내용을 배웠습니다. 공개 S3 Bucket, 개방된 보안 그룹, 하드코딩된 비밀 정보와 같은 IaC 잘못된 구성은 배포 전에 Checkov와 tfsec 같은 도구로 자동 탐지됩니다. 코드로서의 정책 프레임워크(OPA/Conftest, HashiCorp Sentinel)를 사용하면 조직의 사용자 지정 보안 요구 사항을 자동화된 파이프라인 통과 조건으로 적용할 수 있습니다. 또한 Terraform 상태 파일에는 민감한 리소스 세부 정보가 포함될 수 있으므로 엄격한 접근 제어가 적용된 암호화된 원격 백엔드에 저장해야 합니다. 다음에서는 APT 수명 주기와 정교한 위협이 네트워크 내부에 지속적으로 남는 방식을 살펴봅니다.

자주 묻는 질문

“코드형 인프라 보안 검사” 강의는 무료인가요?

네 — “코드형 인프라 보안 검사” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Security+ Academy 강의 전체를 잠금 해제할 수 있습니다. Security+ Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“코드형 인프라 보안 검사”에서 뭘 배우나요?

IaC 보안 도구(Checkov, tfsec)로 Terraform, CloudFormation, Helm 차트를 검사해 운영 환경에 도달하기 전에 잘못된 구성을 찾아냅니다. 브라우저에서 직접 실행하는 실습 코드로 Security+ Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Security+ Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Security+ Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“코드형 인프라 보안 검사” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Security+ Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Security+ Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 컨테이너 보안: 이미지 강화 및 런타임 보호
  2. Kubernetes 보안: RBAC, 네트워크 정책 및 파드 보안
  3. 서버리스 및 함수 보안
  4. 코드형 인프라 보안 검사
← Security+ Academy(으)로 돌아가기