aws-nuke(取扱注意)でAWSアカウントを掃除してみた

aws-nuke(取扱注意)でAWSアカウントを掃除してみた

2025年8月時点では、[rebuy-de/aws-nuke]がすでにアーカイブされ、[https://github.com/ekristen/aws-nuke] というGithub Forkでメンテされてます。なので、aws-nukeをご利用する際には、[https://github.com/ekristen/aws-nuke] というRepoを基準にしましょう

はじめに

検証用 AWS アカウントで実験を重ねていると、不要リソースがどんどん増え「片付け」が大変になることがあります。
本番ではない、万が一削除されても影響が小さいアカウントであれば、リソースを一括で消してしまう方が楽な場合も多いでしょう。

そこで今回は、自分普段使っている一括削除ツール aws-nuke の基本的な使い方を紹介します。

⚠️ 注意
aws-nuke で削除したリソースは 復旧できません
作業前に必ず 公式ドキュメント を熟読し、理解したうえで実行してください。

実行環境

  • 実行端末 Apple M1 Max Macbook Pro (MacOS)
  • Package Management Homebrew 4.5.13
  • Text Editor はお好み(例:Cursor)※ターミナルのみでも可

手順

参考リンク: 公式Doc

インストール

AWS Nukeリポジトリをクローンしてビルドしても構いませんが、Homebrew で簡単に入ります。

brew install ekristen/tap/aws-nuke

AWS Profileを用意する

AWS Nukeを実行する際に、リソースを削除するには、対象アカウントの権限が必要です。

ここでは例として AdministratorAccess を付与したプロファイル my-aws-profile を使用します。

コマンドでは --profile my-aws-profile のように指定します。

公式DocのWarning事項を確認する

https://aws-nuke.ekristen.dev/warning/ に記載の注意事項を必ず確認してください。

特に重要なポイントは以下のとおりです。

  • --no-dry-run を付けない限り、削除は実行されない(デフォルトはスキャンのみ)。まずは Dry-Run で結果を確認しましょう。
  • 削除実行時は 2 回 の確認プロンプトが表示される。
  • アカウントに Alias が設定されていない 場合、ツールは実行されない。
  • Alias に prod が含まれると実行不可(誤爆防止)。
  • config.yaml に blocklist が無い、または空だと実行不可。ブロック対象が無い場合でもダミー値を入れる必要あり。
  • accounts セクションに対象アカウント ID を必ず登録する。

configファイルを作る

config.yamlに最初

regions:
  - ap-northeast-1 # 対象のAWSリージョンを指定

blocklist:
- "999999999999" # ブロックしたい(このツールを実行してはいけない)アカウントがなくてもダミーの文字列が必要

accounts:
  "012345678901": {my-aws-account} # 掃除したい対象のAWSアカウント

除外したいリソースをconfig.yamlに入れる

このコマンドでリソース名一覧をプリントする

 aws-nuke resource-types

(もしくは aws-nuke resource-types >> resource-types.txtでファイルに出力する )

resource-typesを確認したら、削除してほしくないリソースをconfig.yamlに入れるとこうなります。
(特にSecurityHubの自動セキュリティチェック系、IAM権限系、CloudFormationスタック系、Route53ドメイン系を消して欲しくないため)

regions:
  - ap-northeast-1 # 対象のAWSリージョンを指定

blocklist:
- "999999999999" # ブロックしたい(このツールを実行してはいけない)アカウントがなくてもダミーの文字列が必要

accounts:
  "012345678901": {my-aws-account} # 掃除したい対象のAWSアカウント

resource-types:
  excludes:
    - SecurityHub
    - IAMAccountSettingPasswordPolicy                            
    - IAMGroup                                                   
    - IAMGroupPolicy                                             
    - IAMGroupPolicyAttachment                                   
    - IAMInstanceProfile                                         
    - IAMInstanceProfileRole                                     
    - IAMLoginProfile                                            
    - IAMOpenIDConnectProvider                                   
    - IAMPolicy                                                  
    - IAMRole                                                    
    - IAMRolePolicy                                              
    - IAMRolePolicyAttachment                                    
    - IAMRolesAnywhereCRL                                        
    - IAMRolesAnywhereProfile                                    
    - IAMRolesAnywhereTrustAnchor                                
    - IAMSAMLProvider                                            
    - IAMServerCertificate                                       
    - IAMServiceSpecificCredential                               
    - IAMSigningCertificate                                      
    - IAMUser                                                    
    - IAMUserAccessKey                                           
    - IAMUserGroupAttachment                                     
    - IAMUserHTTPSGitCredential                                  
    - IAMUserMFADevice                                           
    - IAMUserPolicy                                              
    - IAMUserPolicyAttachment                                    
    - IAMUserSSHPublicKey                                        
    - IAMVirtualMFADevice  
    - Route53HealthCheck                                         
    - Route53HostedZone                                          
    - Route53Profile                                             
    - Route53ProfileAssociation                                  
    - Route53ResolverEndpoint                                    
    - Route53ResolverRule                                        
    - Route53ResourceRecordSet                                   
    - Route53TrafficPolicy       
    - CloudTrailTrail     
    - CloudFormationStack
    - CloudFormationStackSet
    - CloudFormationType                                                              

aws-nuke初回実行:AWSアカウントスキャン

nukeコマンドに configファイルを指定、AWS Profileを指定して実行する。
(デフォルトはDry Runですので、スキャンするだけになる)

aws-nuke nuke -c config.yaml --profile my-aws-profile

(もしくは、仮にaliasがmy-aws-accountの場合、echo my-aws-account | aws-nuke nuke -c config.yaml --profile my-aws-profile >> remove_list.txt でスキャン結果をremove_list.txt に出力する)

スキャン完了までは少し時間がかかります。

aws-nuke本実行:AWSリソース一括削除

「aws-nuke初回実行:AWSアカウントスキャン」の結果を確認し、問題がなければaws-nuke本実行を行います。

コマンドは以下となります。

aws-nuke nuke -c config.yaml --profile my-aws-profile --no-dry-run

AWSアカウントのaliasの入力は2回聞かれます。(1回目:スキャン開始時、2回目:スキャン完了・削除開始前)

削除対象が多い場合は時間がかかります。
進行状況はコンソールに逐次表示されるため、気長に待ちましょう。

まとめ

aws-nuke を使えば、検証用アカウントを短時間で「まっさら」な状態に戻せます。

ただし 復旧不能 かつ 強力すぎる ツールであるため、以下を徹底してください。

  • 削除してはいけないアカウントやリソースを 誤って指定しない
  • 必ず Dry-Run で結果を確認
  • 実行前に バックアップやスナップショットを取るの推奨
  • 公式ドキュメントを確認し、挙動をチェックする
    安全に使いこなして、快適な検証ライフを送りましょう!

aws-nukeツールの使い方は、設定によってカスタマイズできる(filtering)ので、詳細は公式Docをご確認ください:
https://aws-nuke.ekristen.dev/config-filtering/

参考リンク

この記事をシェアする

facebookのロゴhatenaのロゴtwitterのロゴ

© Classmethod, Inc. All rights reserved.