목차
Terraform State 관리 보안, 왜 지금 당장 점검해야 할까요?
인프라를 코드로 관리하다 보면 어느 순간 이런 상황을 마주하게 되더라고요. 팀원이 실수로 terraform.tfstate 파일을 Git에 커밋해버린 거죠. 그 안에 RDS 비밀번호, IAM 액세스 키, 각종 민감한 리소스 정보가 그대로 담긴 채로요. 저도 몇 년 전에 비슷한 아찔한 경험을 했는데, 그때부터 Terraform State 관리 보안을 진지하게 고민하기 시작했습니다.
Terraform 1.7 버전이 릴리즈되면서 State 암호화 관련 기능이 꽤 강화됐거든요. 공식 문서만 봐서는 어디서부터 시작해야 할지 막막한 분들이 많으실 것 같아서, 제가 직접 실무에서 적용해본 경험을 바탕으로 정리해봤습니다.
이 글에서는 Terraform Remote Backend 설정부터 S3 State 암호화, 접근 제어까지 실제로 동작하는 코드와 함께 단계별로 알아볼게요.
▲ Terraform State 관리 보안의 전체 아키텍처 — S3 Remote Backend, DynamoDB Lock, KMS 암호화가 어떻게 연결되는지 한눈에 볼 수 있습니다.
Terraform State란 뭐고, 왜 위험할까요?
먼저 개념부터 짚고 넘어가야 할 것 같아요. Terraform State는 쉽게 말해서 "현재 인프라의 실제 상태를 기록해둔 스냅샷 파일"이에요. Terraform이 리소스를 생성하거나 수정할 때, 무엇이 어떻게 배포되어 있는지 이 파일을 기준으로 판단하거든요.
문제는 이 State 파일 안에 뭐가 들어있느냐인데요. 민감한 정보의 보고입니다.
- 데이터베이스 연결 문자열과 비밀번호
- IAM(Identity and Access Management) 키
- TLS 인증서와 개인 키
- 각종 API 토큰과 시크릿 값
- VPC, 서브넷, 보안 그룹 상세 정보
이걸 로컬에 저장하거나 Git에 올리면... 네, 생각만 해도 아찔하죠. 그래서 Terraform Remote Backend(원격 상태 저장소)를 써야 하고, 거기에 암호화와 접근 제어까지 겹겹이 설정해야 합니다.
Local vs Remote Backend 비교
| 항목 | Local Backend (로컬) | Remote Backend (S3 등) |
|---|---|---|
| 저장 위치 | 개발자 PC 로컬 | 클라우드 스토리지 |
| 팀 협업 | ❌ 불가 (충돌 위험) | ✅ 가능 (잠금 지원) |
| 보안 | ❌ 취약 (암호화 없음) | ✅ KMS 암호화 가능 |
| State Lock | ❌ 없음 | ✅ DynamoDB로 지원 |
| 버전 관리 | ❌ 수동 관리 필요 | ✅ 자동 버저닝 |
| 접근 제어 | ❌ OS 권한만 | ✅ IAM 정책으로 세밀하게 |
이 표 하나로 왜 Terraform Remote Backend를 써야 하는지 충분히 설명되는 것 같네요. 😅
사전 준비: IAM 권한과 AWS CLI 설정
본격적인 설정 전에 준비물부터 챙겨봅시다. 저는 AWS를 기준으로 설명할 건데요, 다른 클라우드도 개념은 거의 동일합니다.
필요한 IAM 권한 목록
State 관리용 IAM 사용자나 역할에는 최소한 이 권한들이 필요합니다. 제가 처음 설정할 때 권한 하나 빠뜨려서 한참 헤맸거든요 ㅎㅎ
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListBucket",
"s3:GetBucketVersioning",
"s3:GetObject",
"s3:PutObject",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::terraform-state-bucket",
"arn:aws:s3:::terraform-state-bucket/*"
]
},
{
"Effect": "Allow",
"Action": [
"dynamodb:DescribeTable",
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:DeleteItem"
],
"Resource": "arn:aws:dynamodb:*:*:table/terraform-lock"
},
{
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey"
],
"Resource": "arn:aws:kms:*:*:key/*"
}
]
}
이 정책을 IAM 사용자에게 할당하면, Terraform State 관리에 필요한 최소 권한을 갖추게 됩니다.
'IT > Cloud' 카테고리의 다른 글
| [Cloud] AWS EC2 자동 복구 설정 가이드 (2026년) (2) | 2026.04.14 |
|---|---|
| [Cloud] Ansible Vault: 민감 정보 안전 관리 및 자동화 보안 강화 가이드 (0) | 2026.04.12 |
| [Cloud] Pulumi vs Terraform: 2026년 IaC 도구 완벽 비교 분석 (0) | 2026.04.09 |
| [Cloud] GitHub Actions OIDC로 AWS/GCP/Azure 클라우드 보안 강화 가이드 (2026년 최신) (1) | 2026.04.07 |
| [AWS] 온프레미스 엔지니어를 위한 AWS 클라우드 기본 개념 총정리 (0) | 2026.04.02 |
| [AWS] 인프라 엔지니어가 알려주는 AWS 초보자 공부 가이드 — 어디서부터, 어떻게 시작할까 (1) | 2026.04.01 |