【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は特別な要件がない限り削除することが推奨されます。
アカウントを新規に開設したら、セキュリティの観点からもできるだけ早く削除しましょう。
この記事が誰かの参考になれば幸いです。


この記事が気に入ったらサポートをしてみませんか?