aws-nuke
aws-nukeはAWSアカウントから全てのリソースを削除する有志によって作られたツールです。
aws-nukeインストール(Mac側)
Macの場合は、homebrewで導入できます。
brew install aws-nuke
aws-nukeを実行する際に指定する設定ファイルを作成します。
~/.config/nuke-config.ymlを作成します。
- regions: 削除したいリージョンの指定
- accounts: 削除したいAWSアカウント
- account-blocklist: 削除したくないAWSアカウント
- resource-types: 削除したいリソース
- excludes: 除外リソース
以下は設定例になります。
- [ACCOUNT_ID]は実行対象のアカウントIDに置き換え
- aws-nukeを実行するIAMユーザー(”admin”)、そのアタッチポリシー、アクセスキーを削除しないフィルタを設定
regions:
- global
- us-east-1
- us-east-2
- us-west-1
- us-west-2
- us-gov-west-1
- ca-central-1
- eu-central-1
- eu-north-1
- eu-west-1
- eu-west-2
- eu-south-1
- eu-west-3
- ap-northeast-1
- ap-northeast-2
- ap-northeast-3
- ap-southeast-1
- ap-southeast-2
- ap-south-1
- ap-east-1
- af-south-1
- cn-north-1
- cn-northwest-1
- me-south-1
- sa-east-1
account-blocklist:
- "999999999999" # production
accounts:
[ACCOUNT_ID]: # 自身のACCOUNT_IDに上書き
filters:
IAMUser:
- "admin"
IAMUserPolicyAttachment:
- property: UserName
value: "admin"
IAMUserAccessKey:
- property: UserName
value: "admin"
AWSクレデンシャル設定(Mac側)
AWSリソース操作の権限を付与するためにクレデンシャルを設定します。
以下のプロファイルを設定します。ここでは、プロファイルをshizukukaiとして設定しています。
- ~/.aws/config
- ~/.aws/credentials
~/.aws/config
[profile shizukukai]
region=ap-northeast-1
output=json
~/.aws/credentials
[shizukukai]
aws_access_key_id=xxxx # awsのアクセスキーID
aws_secret_access_key=xxxx # awsのシークレットアクセスキー
AWSアカウントエイリアス設定(AWS側)
aws-nukeを実行するには事前にアカウントエイリアスを設定しておく必要があります。
検索からIAMダッシュボードに移動して、右上のAWSアカウントのアカウントエイリアスを確認または設定します。
デフォルトではアカウントIDと同様のものが表示されますが、”PROD”を含まない任意の名前を必ずつけてください。
aws-nuke実行
まずはDry-Runを実行し、削除対象リソースを確認します。
forceオプションを指定しない場合、実行後に入力待ちとなるためエイリアスを入力します。
aws-nuke --config ~/.config/nuke-config.yml --profile shizukukai --quiet --force --force-sleep
awsのクレデンシャル設定にエラーがある場合は、以下のエラーメッセージが表示されるので、awsのクレデンシャル設定を再度確認しましょう。
Error: failed get caller identity: NoCredentialProviders: no valid providers in chain. Deprecated.
For verbose messaging see aws.Config.CredentialsChainVerboseErrors
Scan compeleteにて実行計画が表示されます。275 nukeableが削除対象リソースの数となります。
aws-nuke --config ~/.config/nuke-config.yml --profile shizukukai --quiet --force --force-sleep 3
aws-nuke version 2.21.2 - 2022-12-09 - e76d21c263477ebd6648fae19f9e539049ad2b51
Do you really want to nuke the account with the ID xxxxxxxxxxxx and the alias 'yyyyyyyy'?
Waiting 3s before continuing.
...
...
WARN[0355] skipping request: DNS lookup failed for robomaker.sa-east-1.amazonaws.com; assuming it does not exist in this region
Scan complete: 1137 total, 275 nukeable, 862 filtered.
The above resources would be deleted with the supplied configuration. Provide --no-dry-run to actually destroy resources.
Runとして、実際に削除を行う場合は、–no-dry-runオプションを指定して実行します。
aws-nuke --config ~/.config/nuke-config.yml --profile shizukukai --quiet --force --force-sleep 3 --no-dry-run
aws-nuke version 2.21.2 - 2022-12-09 - e76d21c263477ebd6648fae19f9e539049ad2b51
Do you really want to nuke the account with the ID xxxxxxxxxxxx and the alias 'yyyyyyyy'?
Waiting 3s before continuing.
...
...
Removal requested: 0 waiting, 0 failed, 862 skipped, 274 finished
Nuke complete: 0 failed, 862 skipped, 274 finished.
1ファイル削除できませんでしたが、274ファイル削除されました。
- フィルタを指定しない場合、アカウントでのデフォルトVPCやSecurity Groupなども削除されるため注意
- 今回Adminを対象外としましたが、削除対象外にIAMを設定しない場合、IAMリソースも削除されて対象のアカウントにログインできなくなる可能性があるため注意
削除確認
事前事後で利用状況を確認してみました。利用中のリソース一覧は、「AWS Resource Groups & Tag Editor」が便利です。
- 事前 188 resources
- 事後 7 resources
CloudFormationの一部とRDSのセキュリティグループ、KMSは削除されずに残っていました。
CloudFormationに関しては、ネスト関係で自動で削除できなかったようで、個別にアクセスして無事削除できました。
RDSのセキュリティグループに関しては、デフォルトのために特に考慮は不要でした。
KMS関連に関しては、aws側で管理されるcloud9、lambda、s3、secretmanager関連で削除されるべきではない鍵でした。
これで安心して不要な毎月の課金がなくなり、綺麗な状態となりました。