AWS

AWS - 모든 리소스 삭제하기 (with aws-nuke)

rygus 2025. 8. 4. 22:41
728x90

안녕하세요.

오늘은 AWS에서 모든 리소스를 한 번에 삭제하는 방법을 소개해 드리고자 합니다.

 

# AWS Nuke 란? 

오픈소스 서비스로 AWS 계정에서 삭제 가능한 모든 리소스를 제거하는 툴입니다.

저는 주로 테스트 환경 구성 후 비용 발생 방지를 위해 사용하는데요. 

정말 모든 리소스를 삭제하기 때문에 실제 라이브 환경에서는 사용하지 않으시는 걸 강력히 권장드립니다.

 

# 사용 방법

앞서 말씀드린 대로 굉장히 위험한 오픈소스기 때문에 여러 안전장치들이 존재하는데요.

  • `--no-dry-run` 옵션이 있어야 실제 리소스 삭제 가능
  • AWS 계정에 Alias가 없을 경우 사용 불가능 
  • 반드시 하나 이상의 Block Account ID 명시 필요
  • 리소스 삭제할 Account ID도 반드시 명시
  • config 파일 필요

앞서 말씀드린 대로 삭제할 리소스 등을 명시할 config 파일이 필요합니다. 

config 파일에는 삭제할 어카운트, 삭제하지 말아야할 리소스 등을 기입할 수 있습니다.

# config.yml
regions:	# 리소스들이 위치하는 Region
- ap-northeast-2

account-blocklist:
- "999999999999"	# 리소스를 삭제하면 안 되는 Production Account ID

accounts:
  "1111111111":	# 리소스들을 정리할 Account ID
    filters:
      EC2DefaultSecurityGroupRule:
      EC2DHCPOption:
       - property: DefaultVPC
         value: "true"
      EC2InternetGateway:
        - property: DefaultVPC
          value: "true"
      EC2InternetGatewayAttachment:
        - property: DefaultVPC
          value: "true"
      EC2RouteTable:
        - property: DefaultVPC
          value: "true"
      EC2Subnet:
        - property: DefaultVPC
          value: "true"
      EC2VPC:
        - property: IsDefault
          value: "true"

 

저는 필터를 통해서 기본 VPC 및 기본 IGW 등 기본적으로 리전 당 하나씩 생성되어 있는 리소스들은 삭제되지 않게 막아두었습니다.

그리고 account-blocklist에는 더미 데이터로 99999를 넣었습니다.

 

# 설치 후 실제 테스트

 

아래 깃허브 사이트 접속 후 각자 환경에 맞게 설치합니다.

 

https://github.com/ekristen/aws-nuke?tab=readme-ov-file

 

GitHub - ekristen/aws-nuke: Remove all the resources from an AWS account

Remove all the resources from an AWS account. Contribute to ekristen/aws-nuke development by creating an account on GitHub.

github.com

 

릴리즈에 들어갑니다.

 

 

저는 윈도우 환경이기 때문에 윈도우로 설치하였습니다.

 

설치 후 저는 환경 변수 까지 등록하였습니다. 

 

`aws-nuke version` 명령어 시 아래와 같이 결과가 나오면 성공입니다.

 

이제 계정의 Alias 설정을 해주겠습니다.

IAM 대시보드로 들어가면 오른쪽에 계정 별칭 생성란이 있을 겁니다. 

해당 부분을 통해 생성합니다.

 

 

이제 `aws configure`를 통해 aws cli로 연결합니다. 

저번에도 말씀드렸지만 저는 보여드리기 위해 secret id 등을 모자이크 안 하고 올리는 것이지 

절대 이렇게 관리하시면 안됩니다.

 

이제 아래 config 파일로 명령어를 실행하겠습니다. 

# config.yml
regions:	# 리소스들이 위치하는 Region
- ap-northeast-2

account-blocklist:
- "999999999999"	# 리소스를 삭제하면 안 되는 Production Account ID

accounts:
  "1111111111":	# 리소스들을 정리할 Account ID
    filters:
      EC2DefaultSecurityGroupRule:
      EC2DHCPOption:
       - property: DefaultVPC
         value: "true"
      EC2InternetGateway:
        - property: DefaultVPC
          value: "true"
      EC2InternetGatewayAttachment:
        - property: DefaultVPC
          value: "true"
      EC2RouteTable:
        - property: DefaultVPC
          value: "true"
      EC2Subnet:
        - property: DefaultVPC
          value: "true"
      EC2VPC:
        - property: IsDefault
          value: "true"

 

`aws-nuke run -c ./config.yml` 해당 명령어는 삭제 가능한 리스트만 출력하고 실제 삭제는 진행하지 않습니다.

 

아까 실행 시에 반드시 Alias가 필요하다고 말씀드렸는데요. 

명령어 실행 후 아까 설정한 Alias를 입력해 주시면 됩니다. 

 

실행이 완료되면 이렇게 삭제 가능한 리소스는 would remove로 나옵니다. 

 

이제 실제 삭제를 진행하겠습니다.

`aws-nuke run -c config.yml --no-dry-run` 를 실행합니다.

 

아까와 같이 Alias를 입력합니다.

 

그리고 실행하고 기다리다 보면 실제로 삭제할 것이냐고 한번 더 물어봅니다.

이때도 Alias를 입력합니다.

 

 

정상적으로 삭제되었고 실제 콘솔에서도 삭제된 것을 확인 가능합니다.

 

 

감사합니다.