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 | 기업 환경에서 정책 기반 접근 제어 |
마지막 수정일자