Skip to Content
프로젝트원큐오더종료Terraform 정리 교훈

Terraform 정리 작업에서 배운 교훈

프로젝트 종료 시 terraform destroy를 실행하면서 IAM 그룹이 삭제되어 AWS 콘솔에 다시 접근할 수 없는 상황을 겪었습니다. 이 경험을 통해 Terraform의 prevent_destroy 속성에 대해 알게 된 경험을 공유합니다.

AWS IAM 접근 제한

실제 사용했던 IAM 구성

terraform destroy 명령어 실행 당시, 다음과 같이 Terraform으로 그룹과 그룹 멤버십을 다음과 같이 관리하고 있었습니다:

iam.tf
# ---------- 개발자 그룹 생성 ---------- resource "aws_iam_group" "wonq_developer" { name = "wonq-developer" path = "/" } resource "aws_iam_group_policy_attachment" "developer_readonly" { group = aws_iam_group.wonq_developer.name policy_arn = "arn:aws:iam::aws:policy/ReadOnlyAccess" } # ---------- 관리자 그룹 생성 ---------- resource "aws_iam_group" "wonq_administrator" { name = "wonq-administrator" path = "/" } # ---------- 팀원들을 그룹에 추가 ---------- # 본인은 관리자 그룹과 개발자 그룹 모두에 추가 resource "aws_iam_user_group_membership" "nam_seunghyeon" { user = "sw1_user2" groups = [ aws_iam_group.wonq_administrator.name, aws_iam_group.wonq_developer.name, ] } # 팀원들은 개발자 그룹에만 추가

전체 IAM 설정은 GitHub 에서 확인 가능합니다.

이로 인해 IAM 그룹과 사용자들이 모두 삭제되어 AWS 콘솔에 접근할 수 없게 되었습니다. 프로젝트 종료가 목적이었기에 큰 문제는 없었지만, 만약 운영 중인 서비스에서 이런 일이 발생했다면 심각한 장애로 이어질 수 있었을 것입니다.

prevent_destroy 속성이란?

앞서 언급한 prevent_destroy는 Terraform의 lifecycle 블록에서 제공하는 안전장치로, 실수로 중요한 리소스가 삭제되는 것을 방지하는 기능입니다.

기본 사용법

resource "aws_instance" "example" { ami = data.aws_ami.ubuntu.id instance_type = "t2.micro" vpc_security_group_ids = [aws_security_group.sg_web.id] user_data = <<-EOF #!/bin/bash apt-get update apt-get install -y apache2 sed -i -e 's/80/8080/' /etc/apache2/ports.conf echo "Hello World" > /var/www/html/index.html systemctl restart apache2 EOF tags = { Name = "terraform-learn-state-ec2" drift_example = "v1" } lifecycle { prevent_destroy = true } }

삭제 시도 시 발생하는 오류

$ terraform destroy Error: Instance cannot be destroyed Resource aws_iam_user_group_membership.critical_admin has lifecycle.prevent_destroy set, but the plan calls for this resource to be destroyed.

결론

이번 경험을 통해 얻은 핵심 교훈은 prevent_destroy가 단순한 옵션이 아닌 필수 안전장치라는 점입니다. 특히 IAM, 프로덕션 DB, 도메인 등의 중요 리소스는 반드시 보호 설정을 해야 하며, 프로젝트 초기부터 리소스 보호 전략을 수립하고 적용하는 것이 중요합니다. 이 작은 설정 하나가 큰 사고를 예방할 수 있다는 점을 잊지 않으려고 합니다.

참고 자료

Last updated on