LoginSignup
7
1

More than 1 year has passed since last update.

aws-nuke でリソースを削除して心を軽くする

Posted at

はじめに

DX技術本部の yu-yama です。

AWSで sandbox アカウントを作り検証を続けていると、知らず知らずのうちにセキュリティグループ、スナップショット、IAMロールなどが増えていて心をざわざわさせられませんか。
いつかは整理したいと思いつつ先延ばしに...
そんなあなたに aws-nuke 。リソースを消せるだけ消して心をスッキリ軽くしてみましょう。

kafun_sukkiri.png

aws-nuke とは

AWSのリソースを削除するツールで、

機能として

  • リージョンの指定
  • 削除するリソースタイプの指定
  • 削除しないリソースタイプの指定(除外指定)
  • リソースのフィルタリング
    • 削除するリソースタイプのうち、特定のリソースのみ削除させたくない場合などに使用

があります。

早速 nuke してみましょう!

事前準備

削除されるアカウントのAWSクレデンシャル1

削除されるアカウントにエイリアスを設定

インストール

GitHubから使いたい環境にあった最新リリースをダウンロードします。
今回は削除されるアカウントとは別で立てたEC2(Amazon Linux)からaws-nuke-v2.15.0-linux-amd64.tar.gzのバイナリを使用して実行します。

バイナリダウンロード

$ wget https://github.com/rebuy-de/aws-nuke/releases/download/v2.15.0/aws-nuke-v2.15.0-linux-amd64.tar.gz

解凍

$ tar -zxvf aws-nuke-v2.15.0-linux-amd64.tar.gz

確認

$ ./aws-nuke-v2.15.0-linux-amd64 -h
20210806_screenshot_02.png

設定ファイル作成

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

nuke-config例.yml
regions:
- eu-west-1 # 消したいリージョン
- global # グローバルサービスも消したい場合

account-blocklist:
- "999999999999" # 消したくないAWSアカウント。特に指定しなくて良いがこの部分を消すとエラーになるのでこのまま

accounts:
  "000000000000": {} # 消したいAWSアカウント

今回はバージニア北部(us-east-1)のリソースを削除してみます。IAMUserはglobalリソースのため、バージニア北部リージョンのみ指定だと消えないですが念のため除外リソースとして指定します。2

nuke-config.yml
regions:
- us-east-1 # 消したいリージョン

account-blocklist:
- "999999999999" # 消したくないAWSアカウント。特に指定しなくて良いがこの部分を消すとエラーになるのでこのまま

resource-types:
  # IAMユーザは消したくない
  excludes:
  - IAMUser

accounts:
  "123456789012": {} # 消したいAWSアカウント

dry-run

削除されるリソースを確認します。

$ ./aws-nuke-v2.15.0-linux-amd64 -c ./nuke-config.yml --access-key-id <access-key> --secret-access-key <secret-key>

コマンド実行後、削除対象のアカウントが本当に正しいかアカウントエイリアスの入力を求められるので入力します。

no-dry-run

削除されるリソースを確認し、よければオプションno-dry-run を付けて実行します。

$ ./aws-nuke-v2.15.0-linux-amd64 -c ./nuke-config.yml --access-key-id <access-key> --secret-access-key <secret-key> --no-dry-run

コマンド実行後、削除対象のアカウントが本当に正しいかアカウントエイリアスの入力を求められるので入力します。本当に?本当にいいの?と2回聞かれます。

実行が終わると、削除結果が表示されます。
20210806_screenshot_03.png

感想

まあまあスッキリ。

設定ファイルを以下のようにすると

nuke-config.yml
regions:
- global # globalを指定

account-blocklist:
- "999999999999" # 消したくないAWSアカウント。特に指定しなくて良いがこの部分を消すとエラーになるのでこのまま

resource-types:
  targets:
  - IAMRole

accounts:
  "123456789012": {} # 消したいAWSアカウント

IAMRoleを削除できるのですが、事前にIAMロールからポリシーをデタッチしておかないと失敗します。この部分は手間なので惜しいところ。

また、IAMユーザ以外は全て消すぞと指定すると

nuke-config.yml
regions:
- global # globalを指定

account-blocklist:
- "999999999999" # 消したくないAWSアカウント。特に指定しなくて良いがこの部分を消すとエラーになるのでこのまま

resource-types:
  # IAMユーザは消したくない
  excludes:
  - IAMUser

accounts:
  "123456789012": {} # 消したいAWSアカウント

IAMユーザーは残るのですが、中の認証情報やIAMグループの情報も全て消えてしまう3ので注意しましょう。

使い方としてはリージョン指定で定期的に実行すると、いい感じで消してくれてスッキリできると思います。

では。

参考リンク


  1. nukeのREADMEに記載がなかったのでAdministratorAccessポリシーをアタッチしたクレデンシャルで検証しました。 

  2. nuke公式にもそう定義されている 

  3. ログインできなくなります!Rootアカウントに助けを求めましょう 

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1