Terraform 보안 및 접근 제어

Terraform 보안 및 접근 제어

1️⃣ Terraform 보안 모범 사례

1 상태 파일에 민감 정보 저장 주의

Terraform 상태 파일(terraform.tfstate)에는 암호, 토큰, 키 등이 **평문(plain text)**으로 저장될 수 있습니다.

보안 모범 사례

  • 로컬 상태 저장 금지, 원격 백엔드(S3, Azure, GCP) 사용
  • S3 백엔드의 경우 버킷 암호화 및 IAM 권한 최소화
  • terraform state 명령어를 통해 민감 정보 추적 가능

2 예시: 상태 파일에 비밀번호 노출

{
  "resources": [
    {
      "type": "aws_db_instance",
      "instances": [
        {
          "attributes": {
            "username": "admin",
            "password": "P@ssw0rd123"
          }
        }
      ]
    }
  ]
}

❗ 위 예시는 절대 Git에 커밋하면 안 됩니다.


2️⃣ 민감한 정보 관리 (.gitignore, terraform.tfvars)

1 .tfvars 파일과 .gitignore 활용

민감한 변수는 별도의 파일로 분리하여 관리하고, Git에 커밋되지 않도록 합니다.

📁 예시: terraform.tfvars

db_username = "admin"
db_password = "s3cret"

📁 예시: .gitignore

*.tfstate
*.tfstate.backup
.terraform/
terraform.tfvars

2 환경별 변수 파일 관리 전략

terraform plan -var-file="dev.tfvars"
terraform apply -var-file="prod.tfvars"

3️⃣ Terraform에서 secrets & 환경 변수 활용

1 환경 변수로 민감 정보 전달

Terraform은 TF_VAR_변수명 형식의 환경 변수로 변수를 주입받습니다.

✅ 예시

export TF_VAR_db_password="P@ssword!"
terraform apply

2 CI/CD 환경에서 Secret 관리

  • GitHub Actions: secrets.TF_VAR_db_password로 관리
  • GitLab CI: 환경 변수로 관리 (Protected 설정 권장)

4️⃣ RBAC(Role-Based Access Control) 및 접근 제어

Terraform 자체에 RBAC 기능은 없지만, 클라우드 리소스를 배포하는 대상 플랫폼에서 역할 기반 접근 제어(RBAC)를 적용해야 합니다.

✅ AWS 예시

  • IAM 정책으로 S3, EC2 등의 생성 권한 제한
  • Terraform 전용 사용자 생성 → 최소 권한 부여

✅ Terraform Cloud / Enterprise

  • Team, Workspace 권한 분리 가능
  • Plan-only, Apply 제한 가능

📌 사용자/엔지니어별로 역할을 명확히 하여 실수 방지


5️⃣ terraform validate & terraform fmt 활용한 코드 품질 관리

1 코드 검증 및 포맷팅

  • terraform validate: 코드 구문 오류 확인
  • terraform fmt: 코드 정렬 및 포맷 통일

✅ 예시

terraform validate
terraform fmt -recursive

2 CI/CD에서 자동 검사

# GitHub Actions 예시
- name: Terraform Validate
  run: terraform validate

- name: Terraform Format Check
  run: terraform fmt -check -recursive

6️⃣ Sentinel 정책 관리

1 Sentinel 개요

HashiCorp에서 제공하는 정책 기반 접근 제어 도구
Terraform Cloud 및 Enterprise와 연계하여 사용

📌 조직 정책 예시:

  • 특정 태그가 없는 리소스 생성 방지
  • 고가의 인스턴스 유형 금지

2 예시 정책

import "tfplan"

main = rule {
  all tfplan.resources.aws_instance as _, instances {
    all instances as instance {
      instance.applied.tags["Owner"] is not null
    }
  }
}

위 정책은 모든 EC2 인스턴스에 Owner 태그가 존재해야만 적용됩니다.


✅ 마무리 요약

항목 설명
상태 파일 보안 민감 정보 평문 저장 → 백엔드 + IAM 보호
.tfvars & .gitignore 민감 정보 따로 관리, Git에 노출 방지
환경 변수 활용 CI/CD에서 안전하게 값 전달
RBAC IAM 또는 플랫폼 수준에서 권한 최소화
코드 검사 validate, fmt로 안정적인 코드 유지
Sentinel 기업 환경에서 정책 기반 접근 제어
RSS Feed
마지막 수정일자