본문 바로가기
클라우드

💣 AWS 계정을 한 방에 청소하는 도구 — aws-nuke 완전 정복

by gasbugs 2026. 4. 15.

 

"테스트 계정인데 리소스가 수백 개... 콘솔에서 하나씩 지우다가 지쳐본 적 있으신가요?"


🎯 이 글에서 다루는 것

  • aws-nuke가 무엇인지, 왜 쓰는지
  • 삭제 가능한 리소스와 삭제 불가능한 리소스의 차이
  • config 파일 작성법 (보호할 리소스 골라내기)
  • dry-run으로 안전하게 사용하는 실전 패턴
  • 실무에서 자주 겪는 실패 패턴과 해결책

📌 도입 / 배경

클라우드 환경에서 일하다 보면 이런 상황이 반드시 찾아옵니다.

개발팀이 테스트용으로 만들어 놓은 EC2 인스턴스, S3 버킷, RDS, Lambda, IAM Role, EKS 클러스터... 언제 만들었는지도 모를 리소스들이 AWS 계정 곳곳에 쌓여 있습니다. 콘솔에서 하나씩 클릭해서 지우자니 수십 개 리전, 수백 개 리소스가 가로막고, Terraform destroy는 state 파일이 없으면 손도 못 씁니다.

 

이런 상황에서 등장하는 구원투수가 바로 aws-nuke입니다.

AWS Organizations 환경에서 멤버 계정을 완전히 초기화해야 할 때, 또는 학습/실습용 계정을 주기적으로 청소해야 할 때 aws-nuke는 가장 강력한 선택지입니다. 단, 이름 그대로 핵폭탄 수준의 도구이기 때문에 사용법을 정확히 알고 써야 합니다.


🔍 aws-nuke란?

aws-nuke는 AWS 계정 내의 리소스를 대량으로 삭제하는 오픈소스 CLI 도구입니다. Go 언어로 작성되었으며, AWS SDK를 통해 300개 이상의 리소스 타입을 탐지하고 제거합니다.

 

원래는 rebuy-de/aws-nuke로 시작했지만, 현재는 ekristen/aws-nuke 포크가 활발히 유지보수되고 있습니다. v3로 리라이팅되어 libnuke 라이브러리 기반으로 동작하며, azure-nuke, gcp-nuke 등으로도 확장되고 있습니다.

 

왜 aws-nuke를 쓰는가?

상황 이유
테스트 계정 주기적 청소 방치 리소스로 인한 비용 절감
Organizations 멤버 계정 초기화 계정 재활용 전 클린 상태 확보
보안 감사 후 정리 불필요한 IAM, 열린 SG 등 제거
CI/CD 파이프라인 정리 테스트 후 자동 cleanup

🔍 삭제 가능한 리소스 범위

aws-nuke는 AWS SDK 기반으로 동작하기 때문에 AWS API로 삭제 가능한 모든 리소스가 대상입니다. 주요 서비스별로 정리하면 아래와 같습니다.

카데고리 삭제 가능 리소스
Compute EC2 Instance, AMI, Snapshot, Auto Scaling Group, Lambda
Storage S3 Bucket/Object, EBS Volume, EFS, Glacier
Database RDS, DynamoDB, ElastiCache, Redshift, DocumentDB
Network VPC, Subnet, IGW, NAT GW, ELB/ALB/NLB, Transit GW
IAM User, Role, Policy, Group, Access Key, MFA Device
Container ECR Repository, EKS Cluster, ECS Cluster/Service
Serverless Lambda, API Gateway v1/v2, EventBridge
Security KMS Key(스케줄), Secrets Manager, ACM, WAF
Monitoring CloudWatch Alarm, Log Group, Dashboard

🔍 삭제되지 않는 리소스

aws-nuke라도 건드리지 못하는 것들이 있습니다.

❌ 구조적으로 불가능한 것들

KMS Customer Managed Key (CMK): AWS API 자체에 즉시 삭제 기능이 없습니다. ScheduleKeyDeletion API를 통해 최소 7일 대기 후 삭제됩니다. aws-nuke는 이 스케줄 등록만 해줄 뿐, 실제 키는 7일 후에 사라집니다. AWS 관리형 키(aws/s3, aws/rds 등)는 삭제 자체가 불가능합니다.

 

Secrets Manager Secret: 기본적으로 7~30일 복구 대기 기간이 존재합니다. --force-delete-without-recovery 옵션으로 즉시 삭제할 수 있지만, 삭제 후 같은 이름으로 재생성이 불가능한 기간이 생깁니다.

 

Default VPC 기본 리소스: Default Security Group, Default Network ACL은 AWS 구조상 삭제 불가입니다. aws-nuke 실행 시 filtered 처리되어 건너뜁니다.

 

AWS 관리형 IAM Policy: arn:aws:iam::aws:policy/ 접두사가 붙은 AWS 소유 정책은 삭제 불가입니다.

Root IAM User: AWS 계정 구조상 삭제 자체가 불가능합니다.

 

⚠️ 조건부로 실패하는 것들

EKS/ECS가 생성한 연관 리소스: EKS 클러스터를 삭제하기 전에 클러스터가 생성한 ENI, ELB, Security Group이 남아 있으면 VPC 삭제 시 DependencyViolation 오류가 발생합니다.

 

IAM Role + Policy 의존성: IAM Role에 Policy가 붙어 있는 경우 삭제 순서를 잘못 처리하면 DeleteConflict 오류가 납니다. aws-nuke가 재시도 로직을 갖추고 있지만 완벽하지는 않습니다.


💻 설치 및 설정

설치

# macOS (Homebrew)
brew install ekristen/tap/aws-nuke

# Linux (Binary 직접)
wget https://github.com/ekristen/aws-nuke/releases/latest/download/aws-nuke-v3.x.x-linux-amd64.tar.gz
tar -xzf aws-nuke-*.tar.gz
mv aws-nuke /usr/local/bin/

사전 조건

aws-nuke를 실행하려면 반드시 계정 Alias가 설정되어 있어야 합니다. 실수로 잘못된 계정을 날리는 것을 방지하기 위한 안전장치입니다.

# 계정 Alias 생성
aws iam create-account-alias --account-alias my-test-account

# 확인
aws iam list-account-aliases

기본 config 파일 작성

# nuke-config.yaml

regions:
  - ap-northeast-2   # 서울 리전
  - global           # IAM 등 글로벌 리소스

# 절대 건드리지 않을 계정 (프로덕션 등)
account-blocklist:
  - "111111111111"

accounts:
  "222222222222":   # 정리할 계정 ID
    filters: {}     # 필터 없음 = 전부 삭제

💻 보호할 리소스 골라내기 (필터링)

aws-nuke의 핵심 강점은 세밀한 필터링입니다. 세 가지 방식으로 리소스를 보호할 수 있습니다.

방법 1: 리소스 타입 전체 제외

resource-types:
  excludes:
    - IAMUser          # IAM 유저 전체 보호
    - KMSKey           # KMS 키 전체 보호
    - Route53HostedZone

방법 2: 특정 리소스만 보호 (필터)

accounts:
  "222222222222":
    filters:
      # 이름으로 보호
      IAMRole:
        - "OrganizationAccountAccessRole"
        - "prod-deploy-role"

      # 태그로 보호
      EC2Instance:
        - type: exact
          property: tag:DoNotNuke
          value: "true"

      # 글로브 패턴으로 보호
      S3Bucket:
        - type: glob
          value: "prod-*"

      # Secret 보호
      SecretsManagerSecret:
        - "prod/db/password"

방법 3: 삭제할 것만 지정 (가장 안전)

resource-types:
  targets:
    - EC2Instance
    - ECSCluster
    - ECSService
    - RDSInstance
    - S3Bucket

 

명시한 타입만 삭제하고 나머지는 전부 보호합니다. 처음 사용할 때 가장 권장되는 방식입니다.

필터 연산자 종류

연산자 설명 예시
exact 완전 일치 (기본값) "my-bucket"
glob 와일드카드 "prod-*"
regex 정규식 "^prod-.*"
contains 포함 여부 "production"
dateOlderThan 날짜 조건 value: 7d

💻 실전 실행 패턴

Step 1: Dry-run으로 먼저 확인

aws-nuke run --config nuke-config.yaml --dry-run

 

출력 예시:

ap-northeast-2 - EC2Instance - 'i-0abc1234def' - would remove
ap-northeast-2 - IAMRole - 'OrganizationAccountAccessRole' - filtered by config
ap-northeast-2 - EC2SecurityGroup - 'sg-default' - cannot delete group 'default'
  • would remove → 삭제 예정
  • filtered by config → 설정에 의해 보호됨
  • cannot delete → 구조적으로 삭제 불가

Step 2: 목록 검토 후 실제 실행

aws-nuke run --config nuke-config.yaml --no-dry-run

 

실행 시 계정 Alias를 직접 입력해야 하는 확인 단계를 거칩니다.

Step 3: 복잡한 환경은 2~3회 반복

EKS, ECS처럼 의존성이 복잡한 리소스가 있는 경우 1회 실행으로 완전히 정리되지 않을 수 있습니다. 오류가 남아 있으면 동일한 명령을 반복 실행합니다.


⚠️ 주의사항 / 흔한 실수

  • 프로덕션 계정을 account-blocklist에 반드시 등록하세요. config 파일에 실수로 프로덕션 계정 ID를 넣으면 되돌릴 방법이 없습니다.
  • EKS 클러스터는 삭제 순서가 중요합니다. 클러스터가 프로비저닝한 ELB, ENI를 먼저 정리하지 않으면 VPC 삭제가 실패합니다. EKS 환경에서는 kubectl로 Service/Ingress 오브젝트를 먼저 삭제한 뒤 aws-nuke를 실행하는 것이 안전합니다.
  • KMS는 즉시 삭제가 아닙니다. aws-nuke 실행 후 KMS CMK가 KMS_KEY_DELETION_SCHEDULED 상태로 남아 있는 것은 정상입니다. 7일 후 자동 삭제됩니다.
  • Deletion Protection이 걸린 리소스는 별도 설정 필요합니다. RDS, EC2 등에 삭제 보호가 설정되어 있으면 feature-flags에서 명시적으로 해제해야 합니다.
feature-flags:
  disable-deletion-protection:
    RDSInstance: true
    EC2Instance: true
    CloudformationStack: true

 

IAM 의존성 오류는 재시도로 해결됩니다. DeleteConflict 오류가 나더라도 aws-nuke는 재시도 로직이 있습니다. 1회 실행으로 안 되면 한 번 더 실행하세요.


✅ 정리 / 마무리

aws-nuke는 AWS 계정 청소에 있어 현재 가장 강력한 도구입니다. 300개 이상의 리소스 타입을 지원하고, 세밀한 필터링으로 보호할 리소스를 골라낼 수 있으며, dry-run 모드로 실행 전 검증도 가능합니다.

핵심 원칙을 다시 정리하면 아래와 같습니다.

  • 항상 account-blocklist에 프로덕션 계정 등록
  • 처음에는 resource-types.targets로 삭제 대상만 명시
  • 반드시 --dry-run 먼저 실행 후 목록 검토
  • EKS/ECS 환경은 의존성 정리 후 2~3회 반복 실행 고려
  • KMS, Secrets Manager는 즉시 삭제가 아님을 인지

다음 단계로는 aws-nuke를 AWS Lambda + EventBridge와 연동해 주기적 자동 cleanup 파이프라인을 구성하거나, AWS Organizations 전체 멤버 계정에 순차 적용하는 자동화 스크립트를 구성해 보시면 좋습니다.