【AWS】デフォルトVPCを一括削除する
はじめに
AWSアカウントを新規に作成すると、各リージョン内にデフォルトでVPCが用意されます。
このデフォルトVPCはインターネットとの接続が可能になっており、
ユーザーが簡単にVPC内にリソースをデプロイできるようになっています。
便利ではあるものの裏を返せば、意図せずインターネットに公開してしまうリスクも孕んでいます。特別な要件が無い限りデフォルトVPCは削除しておくことが望まれます。
そこで今回は、全リージョンのデフォルトVPCを一括で削除する手順を
ご紹介します。
AWS CLIを使用して、全リージョンのデフォルトVPCを削除していきます。
前提
・新規アカウント開設後、まだまっさらな状態であること
・結構強めの権限を持つユーザー(AdministratorAccess などの)で実行する
実行するファイル
一括削除するファイルをPythonで書いています。
以下のファイルをCloudshellから実行させます。
動作としては、
・デフォルトリージョンが存在するか確認
・存在する場合は、まずインターネットGWをデタッチして、削除
・サブネットを削除
・VPCを削除
の動きになります。
※VPCを削除する前にインターネットGWとサブネットを削除しておくところがポイントになります。
import boto3
def delete_dependencies(vpc):
# インターネットゲートウェイをデタッチして削除
for igw in vpc.internet_gateways.all():
print(f'Detaching and deleting internet gateway {igw.id} in VPC {vpc.id}')
vpc.detach_internet_gateway(InternetGatewayId=igw.id)
igw.delete()
# サブネットを削除
for subnet in vpc.subnets.all():
print(f'Deleting subnet {subnet.id} in VPC {vpc.id}')
subnet.delete()
# 全リージョンのリストを取得
ec2 = boto3.client('ec2')
regions = [r.get('RegionName') for r in ec2.describe_regions().get('Regions')]
for region in regions:
try:
# 各リージョンに対してリソースを作成
ec2 = boto3.resource('ec2', region_name=region)
# リージョンのデフォルトVPCを確認
default_vpcs = list(ec2.vpcs.filter(
Filters=[{'Name': 'isDefault', 'Values': ['true']}]
))
# デフォルトVPCが存在する場合は削除
if default_vpcs:
vpc = default_vpcs[0]
vpc_id = vpc.id
print(f'Found default VPC {vpc_id} in region {region}')
# まず依存するリソースを削除
delete_dependencies(vpc)
# デフォルトVPCを削除
print(f'Deleting default VPC {vpc_id} in region {region}')
vpc.delete()
print(f'Default VPC {vpc_id} deleted in region {region}')
else:
print(f'No default VPC found in region {region}')
except Exception as e:
print(f'Error deleting default VPC in region {region}: {e}')
手順
1.「delete_default_vpcs.py」という名前で上記のPythonファイルをローカルに保存する。
2.Cloudshellを立ち上げる。
AWSコンソール → Cloudshellを起動
特にリージョンの指定はないですが、筆者はバージニアリージョンで実行しています。
3.ファイルをアップロードする。
アクション → ファイルをアップロードをクリックし、前工程で作成した「delete_default_vpcs.py」を選択しアップロードします。
ファイルがアップロードできているか確認します。
コマンドは「ls -la」です。
「delete_default_vpcs.py」が存在します。無事アップロード出来てますね。
4.ファイルを実行する。
アップロードしたファイルを実行します。
$ python3 delete_default_vpcs.py
エラーがなく無事に実行が進むとCloudshell上にログが吐き出されます。
Found default VPC vpc-123456789012 in region ap-south-1
Detaching and deleting internet gateway igw-123456789012 in VPC vpc-123456789012
Deleting subnet subnet-123456789012a in VPC vpc-123456789012
Deleting subnet subnet-123456789012b in VPC vpc-123456789012
Deleting subnet subnet-123456789012c in VPC vpc-123456789012
Deleting default VPC vpc-123456789012 in region ap-south-1
Default VPC vpc-123456789012 deleted in region ap-south-1
Found default VPC vpc-234567890123 in region eu-north-1
Detaching and deleting internet gateway igw-234567890123 in VPC vpc-234567890123
Deleting subnet subnet-234567890123a in VPC vpc-234567890123
Deleting subnet subnet-234567890123b in VPC vpc-234567890123
Deleting subnet subnet-234567890123c in VPC vpc-234567890123
Deleting default VPC vpc-234567890123 in region eu-north-1
Default VPC vpc-234567890123 deleted in region eu-north-1
・
・
・
・
・
5.AWSコンソール上から確認。
コマンドの実行が終わったら、削除ができているかAWSコンソール上で確認します。
AWSコンソール → VPC → 左画面の「EC2グローバルビュー」をクリック
VPCが0になっていることが確認できます。
事後作業
実行ファイルを削除します。
$ rm -rf delete_default_vpcs.py
まとめ
デフォルトVPCは特別な要件がない限り削除することが推奨されます。
アカウントを新規に開設したら、セキュリティの観点からもできるだけ早く削除しましょう。
この記事が誰かの参考になれば幸いです。
この記事が気に入ったらサポートをしてみませんか?