Published on

aws-nukeを触ってみた

Authors

アカウント内のリソースを全削除してくれるライブラリaws-nukeを触ってみました

config.ymlの用意

Cloudshellから実行してみる。configファイルを作成したいが、ブラウザ上で動くターミナルのvimでescキー押せなくて困ったので、以下のコマンド貼り付けで生成する。

THIS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)

cat <<EOF > config.yml
regions:
  - ap-northeast-1
  - us-east-1
  - global

account-blocklist:
  - "000000000000" # https://github.com/rebuy-de/aws-nuke/issues/520

accounts:
  $THIS_ACCOUNT_ID:
    filters:
      IAMRole:
      - "OrganizationAccountAccessRole"
      IAMRolePolicyAttachment:
      - "OrganizationAccountAccessRole -> AdministratorAccess"
      IAMUser:
      - "nuke"
      IAMUserPolicyAttachment:
      - "nuke -> AdministratorAccess"
      IAMUserAccessKey:
      - "nuke -> AKIAIOSFODNN7EXAMPLE"
EOF

最初は削除したくないOrganizationAccountAccessRoleが適切に除外されているか確認したかったが、削除対象が多すぎて見ることができなかった。以下の設定をconfig.ymlに足して削除対象をIAMロールだけにフィルターしてdry-runして確認できた。

accounts:
  $THIS_ACCOUNT_ID: {}

resource-types:
  excludes:
  - IAMUser
  - IAMUserAccessKey
  - IAMUserPolicyAttachment
  - IAMRolePolicyAttachment
  - IAMRole

また実行の際に、nukeという実行用のIAMユーザーを作ってAdministratorAccess権限を与えて削除対象から除外してある。意図としては親アカウントからAssume Roleしてaws-nukeする場合だと、うっかりオペミスでAssume Roleせずに親アカウントを消すリスクがないか心配になったため

アカウントエイリアスつける

エイリアスつける必要があった。無いと以下のエラーが発生

Error: The specified account doesn't have an alias. For safety reasons you need to specify an account alias. Your production account should contain the term 'prod'.

バイナリのインストール

mkdir -p bin && wget -c "https://github.com/rebuy-de/aws-nuke/releases/download/v2.16.0/aws-nuke-v2.16.0-linux-amd64.tar.gz" -O - | sudo tar -xz -C $HOME/bin

実行

# ドライラン
aws-nuke-v2.16.0-linux-amd64 -c config.yml

# ドライラン+ログ出力(--forceでエイリアスを確認する安全措置をスキップ)
aws-nuke-v2.16.0-linux-amd64 -c config.yml --force  |& tee aws-nuke-log.txt

# 本番実行+ログ出力
aws-nuke-v2.16.0-linux-amd64 -c config.yml --force --no-dry-run |& tee aws-nuke-log.txt