aws-nukeで安全なクリーンアップを実現! 必要なリソースを守る実践テクニック5選

1. はじめに

NTT西日本の桂川です。
本記事では、AWSリソースを安全にクリーンアップするためのaws-nukeの実践テクニックをご紹介します。
aws-nukeは、AWSアカウント内のリソースを一括で削除できるオープンソースツールです。
便利なツールですが、誤って意図しないリソースを削除してしまうリスクもあるため、慎重な運用が求められます。

aws-nukeを使用することで、AWSアカウント内のリソースを効率的に一括削除できるため、削除作業の効率化や不要なリソースの削除によるコスト削減を目的に導入している方も多いのではないでしょうか。
一方で、実際の運用では「セキュリティ統制やコスト管理のために保持すべきリソース」が存在するケースもあり、aws-nukeの運用に課題を感じている方もいるのではないかと思います。

そこで本記事では、こうしたリソースを保護するために活用できる「5つの実践テクニック」を解説します。
なお、本記事の内容は2025年11月時点の情報に基づいています。

< 目次 >

2. 対象読者

本記事の対象読者は、以下のような方々を想定しています。

  • AWS運用自動化に関心があり、効率化やコスト削減を検討している方
  • aws-nuke導入を検討しており、基本的な使い方を知りたい方
  • aws-nuke運用で削除したくないリソースを除外する設定方法を知りたい方

3. 背景・目的

検証用途で使用しているAWSアカウント(以降、検証環境)があり、検証終了後に不要なコストが発生しないよう、その都度リソースの削除を行っていました。
しかし、当初はリソース削除を手作業で行っていたため、削除作業に時間が掛かる上、削除漏れが頻発するという問題がありました。
そこで、作業効率化を目的にAWSアカウント内のリソースを一括で削除することができるaws-nukeの導入を検討し始めました。
aws-nukeを活用することでAWSアカウント内のリソースを効率的に一括削除でき、削除漏れを防ぎながら作業時間を短縮することができます。
一方で、その際に課題となったのが、検証環境内の「セキュリティ統制やコスト管理のために保持すべきリソース」を削除しないように保護する方法でした。
検証環境では、セキュリティ統制やコスト管理のためにAWS CloudTrailやAWS Budgetsなどのリソースが存在しており、aws-nukeでこれらのリソースが削除されないよう保護することが求められました。
今回のようにAWSアカウント内の一部リソースを保護したい要件があり、aws-nukeの運用に課題を感じている方も多いのではないでしょうか。
そこで本記事では、リソースを保護するために活用できる「5つの実践テクニック」をご紹介したいと思います。

4. aws-nuke とは?

aws-nukeは、AWSアカウント内のリソースを一括で削除できるオープンソースツールです。
現在「rebuy-de/aws-nuke(バージョン2)」は、メンテナンスが停止されており、「rebuy-de」から派生した「ekristen/aws-nuke(バージョン3)」への切り替えが推奨されています。
aws-nukeを導入する際は、「ekristen/aws-nuke(バージョン3)」を 使用することをお勧めします。

ekristen/aws-nuke(バージョン3)」では、新機能や改善によって運用の柔軟性と効率性が向上しています。
例えば、新しく追加されたGlobalフィルター(すべてのリソースに適用できるフィルター)を活用することで、より簡単にフィルタ条件を設定することができ、運用効率を高めることが可能です。
もし、現在「rebuy-de/aws-nuke(バージョン2)」をご利用中であれば、一度リリース内容(README.md -> What's New in Version 3)をご確認いただくことをお勧めします。

4.1 前提条件

aws-nukeを利用するためには、以下の事前準備が必要となります。

  • AWSアカウントエイリアスが設定されている必要があります。
    • AWSアカウントエイリアスに「prod」という文字が含まれる場合、aws-nukeを実行時にエラーが発生する為、ご注意ください。

4.2 考慮事項

  • aws-nukeは、オープンソースツールであり、AWS公式のツールではありません。
  • 本番環境でのご使用はお控えください。
    • すべてのリソースが削除されても問題のない環境で使用することが前提となります。
    • 細心の注意を払ったとしてもフィルタリング設定の誤りやaws-nukeの不具合などにより、意図せずリソースが削除される可能性があります。
    • 復元できないリソースが含まれる環境では、使用を避けてください。

5. 実行方法

「AWS CloudShell(以降、CloudShell)」でaws-nukeを実行する方法について紹介します。

① CloudShellを起動します

実行方法①

② aws-nukeをダウンロードします

以下のコマンドは、2025年11月時点の最新バージョン(v3.61.0)をダウンロードする例です。
最新のリリースバージョンは、公式リポジトリで確認し、必要に応じてURLを修正してください。

wget -c https://github.com/ekristen/aws-nuke/releases/download/v3.61.0/aws-nuke-v3.61.0-linux-amd64.tar.gz

ダウンロードしたファイルを展開します。

tar -zxvf aws-nuke-v3.61.0-linux-amd64.tar.gz

③ aws-nukeの設定ファイルを作成します

詳細は、「6. 設定ファイルの基本構成」を参照ください。

vim nuke-config.yml

④ aws-nukeを実行します

aws-nukeは、デフォルトは dry run が実行されます。
dry run で削除対象のリソースを必ず確認してからリソース削除を実行してください。

./aws-nuke run --config nuke-config.yml

「--no-dry-run」フラグを指定することで、リソース削除を実行することができます。

./aws-nuke run --config nuke-config.yml --no-dry-run

6. 設定ファイルの基本構成

aws-nukeの設定ファイルについて解説します。
本章では、設定ファイルの基本構成と各セクションの概要について紹介します。
詳細は、公式マニュアルをご参照ください。
各セクションの設定例は、次章で解説します。

公式マニュアル:docs/config.md

◆ 設定ファイル例

blocklist:
  - 123456789012
    
blocklist-terms:
  - "production"

regions:
  - global
  - ap-northeast-1

accounts:
  111122223333:
    filters:
      __global__:
        - property: tag: env
          value: "prd"
      IAMUser:
        - type: contains
          value: "admin"

resource-types:
  excludes:
    - IAMRole
  • blocklist:削除対象から除外するAWSアカウントを指定します。
  • blocklist-terms:削除対象から除外するAWSアカウントのエイリアス名に含まれる文字列を指定します。
  • regions:対象リージョンを指定します。
  • accounts:対象アカウントとフィルタリング設定を指定します。
    • filters:削除対象から除外するリソースの条件を指定します。
  • resource-types:対象リソースとフィルタリング設定を指定します。
    • excludes:削除対象から除外するリソースの条件を指定します。

7. リソース保護に役立つ実践テクニック

リソースを保護するために活用できる「5つの実践テクニック」を紹介します。

7.1 ブロックリスト

ブロックリストを使用してアカウント内のリソースを保護する方法について紹介します。

◆ 目的

  • 意図しないリソース削除からアカウントを保護する

◆ 設定内容

  • 指定したアカウントID(123456789012)を削除対象から除外する
  • 指定したAWSアカウントエイリアス名(production)を含むAWSアカウントを削除対象から除外する

◆ 設定例

blocklist:
  - 123456789012
    
blocklist-terms:
  - "production"

「blocklist」に アカウントID や 「blocklist-terms」に AWSアカウントエイリアス名を設定することで、対象アカウントのリソースを保護することが可能です。
マルチアカウント環境では、意図しないアカウントでaws-nukeを実行してしまう可能性があるため、設定を強く推奨します。
「blocklist」には、最低でも1つのアカウントIDを設定する必要があるため、保護対象のアカウントが存在しない場合は、ダミーのアカウントIDを設定ください。

◆ 設定例(保護対象のアカウントが存在しない場合)

blocklist:
  - 000000000000    # ダミーのアカウントID
    
blocklist-terms:
  - "production"

◆ 実行環境のAWSアカウントIDの確認方法
CloudShellから以下のコマンドを実行することでAWSアカウントIDを確認することが可能です。
aws-nukeを実行前に実行環境のAWSアカウントIDを確認してください。

aws sts get-caller-identity

7.2 タグ条件によるフィルタリング

タグ条件を使用してリソースを保護する方法について紹介します。

◆ 目的

  • 特定のタグが設定されたリソースを一括で保護する

◆ 設定内容

  • 指定したタグ条件(「env」タグに「prd」を設定)に一致するすべてのリソースを削除対象から除外する

◆ 設定例

accounts:
  111122223333:
    filters:
      __global__:
        - property: tag: env
          value: "prd"

フィルタリング条件としてタグを設定することで、特定のタグが設定されたリソースを保護することができます。
タグ条件は、リソースタイプ毎に設定することも可能ですが、Globalフィルターとタグ条件を組み合わせることで、すべてのリソースに適用されるタグ条件を設定することが可能です。
アカウント内で特定のタグが設定されたリソースを一括で保護することが可能なため、運用効率を向上させることができます。

7.3 文字列条件によるフィルタリング

文字列条件を使用してリソースを保護する方法について紹介します。

◆ 目的

  • 特定のリソース名が設定されたリソースを保護する

◆ 設定内容

  • 指定した文字列条件(リソース名に「admin」が含まれる)に一致するIAMユーザーを削除対象から除外する

◆ 設定例

accounts:
  111122223333:
    filters:
      IAMUser:
        - type: contains
          value: "admin"

フィルタリング条件として文字列を設定することで、特定のリソース名が設定されたリソースを保護することができます。
一部のAWSサービスではタグを設定できない場合もあるため、そのような場合に文字列条件を設定することで、特定のリソース名が設定されたリソースを保護することが可能です。

aws-nukeでは、以下の比較条件を設定することができます。

◆ 比較条件

exact:文字列と完全一致することを確認します。

contains:文字列が設定された文字列を含むことを確認します。

glob:文字列が設定されたGlobパターンと一致することを確認します。

regex:文字列が設定された正規表現と一致することを確認します。

7.4 時間条件によるフィルタリング

時間条件を使用してリソースを保護する方法について紹介します。

◆ 目的

  • 最新のリソースを保護し、古いリソースを削除する

◆ 設定内容

  • 指定した時間条件(作成日時が現在日時から過去1時間以内)に一致するS3オブジェクトを削除対象から除外する

◆ 設定例

accounts:
  111122223333:
    filters:
      S3Object:
        - type: dateOlderThanNow
           property: CreationDate   # フィルタリング条件として使用するプロパティを設定します。
           value: -1h
           invert: true             # フィルタリング判定結果の反転を行います。

フィルタリング条件として時間を設定することで、特定の時間より前や後に作成されたリソースを保護することができます。
「invert」を「true」に設定することで現在日時の過去1時間以内に作成された最新のS3オブジェクトは保護し、それ以外の古いS3オブジェクトを削除することができます。

下図にフィルタリング動作の詳細を示します。
「dateOlderThanNow」を設定することで作成日時が判定日時(現在日時の1時間前)より古い日時のリソースが保護されます。

時間条件①

「invert」を「true」を設定することでフィルタリング判定結果が反転されるため、 判定日時(現在日時の1時間前)より新しい日時のリソースが保護されます。

時間条件②

7.5 プリセット

プリセットを使用してフィルタリング条件を管理する方法について紹介します。

◆ 目的

  • フィルタリング条件を一括管理することで設定誤りの防止、管理負荷を軽減する

◆ 設定内容

  • 共通フィルタリング条件(「env」タグに「prd」を設定)に一致する複数アカウントのすべてのリソースを削除対象から除外する

◆ 設定例

blocklist:
  - 123456789012
    
blocklist-terms:
  - "production"

regions:
  - global
  - ap-northeast-1

accounts:
  111122223333:
    presets:
      - "common"
  444455556666:
    presets:
      - "common"
  777788889999:
    presets:
      - "common"

presets:
  common:
    filters:
      __global__:
        - property: tag: env
          value: "prd"

プリセットを設定することで、複数アカウントのフィルタリング条件をまとめて管理することができます。
アカウント毎にフィルタリング条件の管理が不要となるため、フィルタリング設定の誤りや管理負荷を軽減することが可能です。

8. まとめ

本記事では、aws-nukeによるリソース削除を行う際にリソースを保護するために活用できる「5つの実践テクニック」をご紹介しました。
aws-nukeを利用することで、AWSアカウントのクリーンアップ作業を効率化し、運用負荷を軽減することができます。
aws-nukeは、すべてのリソースが削除されても問題のない環境で使用することが前提ですが、その中でも保護したいリソースがある場合は、本記事で紹介した方法を参考にしていただければと思います。

最後になりますが、細心の注意を払ったとしてもフィルタリング設定の誤りやaws-nukeの不具合などにより、意図せずリソースが削除される可能性があります。
aws-nukeを実行時には、dry run で削除対象のリソースを必ず確認してからリソース削除を実行してください。
また、必要に応じてバックアップや復旧手段を確保した上で、すべてのリソースが削除されても問題のない環境で必ず検証を実施してください。 復元できないリソースが含まれる環境では、使用を避けるようお願いします。

本記事が、皆様の業務改善に少しでもお役に立てれば幸いです。

執筆者

桂川 裕幸(NTT西日本 ビジネス営業本部 エンタープライズビジネス営業部所属)
AWSを活用したクラウドシステムの設計・構築に携わっています。
サーバーレスアーキテクチャが好きです。
2025 Japan AWS All Certifications Engineers に選出。

参考資料・出典

本記事を執筆するにあたり、以下のサイトを参考にさせていただきました。

github.com

github.com

github.com

商標 

  • 「aws-nuke」は、MITライセンスで公開されているオープンソースツールです。
  • 「AWS」、「AWS CloudShell」、「AWS CloudTrail」、「AWS Budgets」は、Amazon Web Services, Inc.またはその関連会社の商標もしくは登録商標です。
  • 「GitHub」は、GitHub, Inc.またはその関連会社の商標もしくは登録商標です。

免責事項

  • 本記事では、aws-nukeを使用したAWSアカウント内のリソース削除に関する設定例を紹介しました。
  • 本記事は情報提供を目的としたものであり、動作保証を行うものではありません。
  • 本記事の内容を実環境で利用する場合は、自己責任でお願いします。
  • 本記事の内容を実施した結果発生する損失・損害については一切の責任を負いかねます。

© NTT WEST, Inc.