본문으로 건너뛰기
Terraform 운영 체크리스트 모음

Terraform 운영 체크리스트 모음

실무에서 바로 쓸 수 있는 체크리스트 모음입니다. PR 설명이나 팀 위키에 복사해서 사용하세요.

Apply 전 검토 체크리스트

### Apply 전 체크리스트

**코드 검토**
- [ ] `terraform fmt`로 포맷 정리 완료
- [ ] `terraform validate`로 문법 검증 통과
- [ ] `tflint` 또는 `tfsec` 경고 없음 (또는 모두 확인됨)

**Plan 결과 검토**
- [ ] `terraform plan` 결과 직접 읽음
- [ ] 추가(+) 리소스 목록 확인 — 의도한 것만 있음
- [ ] 수정(~) 리소스 목록 확인 — 영향 범위 파악됨
- [ ] 삭제(-) 리소스 없음 (있다면 의도적인 삭제인지 재확인)
- [ ] 교체(-/+) 리소스 있다면 다운타임 영향 검토 완료

**환경 확인**
- [ ] 올바른 AWS 계정/프로필로 인증되어 있음
- [ ] 올바른 환경(dev/stage/prod)을 대상으로 함
- [ ] State 백업 완료 (중요 변경 시)

**승인**
- [ ] dev: 본인 승인
- [ ] stage: 팀원 1명 이상 리뷰
- [ ] prod: 팀원 2명 이상 리뷰 + 팀장 승인

Prod 반영 전 승인 체크리스트

### Prod 반영 전 체크리스트

**사전 준비**
- [ ] Stage 환경에서 동일 변경 적용 후 정상 확인됨
- [ ] 변경 영향 범위 문서화 완료
- [ ] 롤백 계획 수립 완료 (롤백 명령어 or 절차 문서)
- [ ] 긴급 연락처 확인 (담당자 온라인 상태)
- [ ] 모니터링 대시보드 준비

**배포 시간대 확인**
- [ ] 트래픽 최소 시간대인지 확인
- [ ] 배포 금지 기간(배포 프리즈)에 해당하지 않음
- [ ] 다른 팀과 배포 충돌 없음

**서비스 영향 확인**
- [ ] 서비스 다운타임 예상 없음 (있다면 사전 공지 완료)
- [ ] 의존 서비스 팀에 사전 통보 완료
- [ ] DB 마이그레이션 필요 시 사전 적용 완료

**최종 승인**
- [ ] Tech Lead / 팀장 승인 (Slack 또는 PR 코멘트)
- [ ] On-call 담당자 인지

변경 후 검증 체크리스트

### Apply 후 검증 체크리스트

**리소스 상태 확인**
- [ ] 신규 생성 리소스 상태 정상 (running/available/active)
- [ ] 수정된 리소스 설정값 반영 확인
- [ ] 삭제된 리소스 없어짐 확인

**서비스 기능 확인**
- [ ] 헬스체크 엔드포인트 200 응답
- [ ] 주요 기능 스모크 테스트 통과
- [ ] 에러율 변화 없음 (CloudWatch/Datadog 확인)
- [ ] 응답 시간 정상 범위 유지

**알림 및 로그**
- [ ] CloudWatch 알람 정상 상태
- [ ] 애플리케이션 로그 오류 없음
- [ ] 변경 완료를 팀 채널에 공지

**문서화**
- [ ] PR 머지 완료
- [ ] 변경 로그(CHANGELOG) 업데이트
- [ ] 운영 위키 업데이트 (필요 시)

State 운영 체크리스트

### State 운영 체크리스트

**주기적 점검**
- [ ] Remote State(S3) 버전 관리 활성화됨
- [ ] State S3 버킷에 퍼블릭 액세스 차단 설정됨
- [ ] State S3 버킷에 암호화 적용됨
- [ ] DynamoDB Lock 테이블 존재 및 정상 동작
- [ ] State 접근 권한이 최소화되어 있음

**백업 확인**
- [ ] S3 버킷 버전 관리로 자동 백업 중
- [ ] 최근 State 변경 이력 확인 가능
- [ ] 복구 절차 문서 최신 상태

**Drift 점검** (월 1회 권장)
- [ ] `terraform plan -refresh-only` 실행 결과 확인
- [ ] 예상치 못한 Drift 없음
- [ ] 발견된 Drift는 티켓 등록 완료

PR 리뷰 체크리스트

### Terraform PR 리뷰 체크리스트

**코드 품질**
- [ ] 변수명이 명확하고 일관성 있음
- [ ] 하드코딩된 값 없음 (IP, AMI ID, 계정 ID 등)
- [ ] 민감 정보(비밀번호, 키 등)가 코드에 없음
- [ ] 공통 태그(common_tags)가 모든 리소스에 적용됨

**구조 검토**
- [ ] 새 리소스가 적절한 모듈/파일에 배치됨
- [ ] 불필요한 중복 없음
- [ ] 변수에 type과 description이 있음
- [ ] output이 필요한 값을 내보내고 있음

**안전성 검토**
- [ ] `prevent_destroy`가 필요한 리소스에 적용됨
- [ ] 교체(-/+) 리소스의 다운타임 영향 검토됨
- [ ] 삭제 리소스가 있다면 의도적인지 확인됨
- [ ] `depends_on`이 적절히 설정됨

**보안 검토**
- [ ] 보안 그룹 규칙이 최소 권한 원칙을 따름
- [ ] S3 버킷에 퍼블릭 액세스 차단 설정됨
- [ ] IAM 역할/정책이 최소 권한으로 설정됨
- [ ] 암호화가 필요한 리소스에 암호화 적용됨

보안 검토 체크리스트

### Terraform 코드 보안 검토 체크리스트

**네트워크 보안**
- [ ] 0.0.0.0/0 인바운드 규칙 없음 (필수 서비스 제외)
- [ ] SSH(22), RDP(3389) 직접 공개 없음
- [ ] 데이터베이스 포트가 공개 서브넷에 노출 안 됨
- [ ] NAT Gateway를 통한 아웃바운드 트래픽 제어

**데이터 보안**
- [ ] S3 버킷 암호화 (AES-256 또는 KMS)
- [ ] EBS 볼륨 암호화
- [ ] RDS 스토리지 암호화
- [ ] 전송 중 암호화 (HTTPS/TLS 강제)

**접근 제어**
- [ ] IAM 역할/정책 최소 권한 원칙 준수
- [ ] 루트 계정 직접 사용 없음
- [ ] MFA 강제 정책 적용
- [ ] Access Key 대신 IAM Role 사용 (EC2/ECS/Lambda)

**비밀정보 관리**
- [ ] 하드코딩된 비밀번호/키 없음
- [ ] AWS Secrets Manager 또는 SSM Parameter Store 사용
- [ ] `sensitive = true` 변수에 적절히 표시됨
- [ ] terraform.tfvars에 비밀정보 없음 (Git에 올라가지 않도록)

**감사 및 모니터링**
- [ ] CloudTrail 활성화 (모든 리전)
- [ ] VPC Flow Logs 활성화
- [ ] S3 액세스 로깅 활성화 (중요 버킷)
- [ ] GuardDuty 활성화