【AWS】EBSのデフォルト暗号化を全リージョン一気にやってみる

はじめに

EBSは新しいボリュームを作成する際にデフォルトで暗号化させることができます。この機能を有効にすることで、新しく作成するすべてのボリュームが自動的に暗号化されるようになります。データの機密性を確保し、コンプライアンス要件を満たすのに役立ちますので、できればこの作業はアカウント開設直後に設定をすることを推奨します。

作業概要

この作業は全リージョンで実施することが望まれます。しかしAWSコンソール上でポチポチと作業するのは結構シンドいです。
そこで、プログラムから全リージョン一括で暗号化設定していこうと思います。

前提

・できれば新規アカウント開設後、まだまっさらな状態であること
・結構強めの権限を持つユーザー(AdministratorAccess などの)で実行する

実行ファイル

実行ファイルはPythonで書いています。
このファイルをCloudShellから実行したいと思います。

import boto3

regions = [region['RegionName'] for region in boto3.client('ec2').describe_regions()['Regions']]

for region in regions:
    ec2 = boto3.client('ec2', region_name=region)
    
    # EBSデフォルト暗号化が既に有効かどうかを確認
    ebs_encryption_state = ec2.get_ebs_encryption_by_default()['EbsEncryptionByDefault'] 

    if not ebs_encryption_state:
        # 無効な場合のみ有効化
        ec2.enable_ebs_encryption_by_default()
        print(f"{region} リージョンでEBSデフォルト暗号化を有効化しました")
    else:
        print(f"{region} リージョンではEBSデフォルト暗号化は既に有効です")


手順

1.「enable_ebs_encryption.py」という名前で上記のPythonファイルをローカルに保存する。

2.Cloudshellを立ち上げる。
AWSコンソール → Cloudshellを起動
特にリージョンの指定はないですが、筆者はバージニアリージョンで実行しています。

3.ファイルをアップロードする。
アクション → ファイルをアップロードをクリックし、前工程で作成した「enable_ebs_encryption.py」を選択しアップロードします。

4.ファイルを実行する。
アップロードしたファイルを実行します。

$ python3 enable_ebs_encryption.py

エラーがなく無事に実行が進むとCloudshell上にログが吐き出されます。

ap-south-1 リージョンでEBSデフォルト暗号化を有効化しました
eu-north-1 リージョンでEBSデフォルト暗号化を有効化しました
eu-west-3 リージョンでEBSデフォルト暗号化を有効化しました
eu-west-2 リージョンでEBSデフォルト暗号化を有効化しました
eu-west-1 リージョンでEBSデフォルト暗号化を有効化しました
ap-northeast-3 リージョンでEBSデフォルト暗号化を有効化しました
ap-northeast-2 リージョンでEBSデフォルト暗号化を有効化しました
ap-northeast-1 リージョンでEBSデフォルト暗号化を有効化しました
ca-central-1 リージョンでEBSデフォルト暗号化を有効化しました
sa-east-1 リージョンでEBSデフォルト暗号化を有効化しました
ap-southeast-1 リージョンでEBSデフォルト暗号化を有効化しました
ap-southeast-2 リージョンでEBSデフォルト暗号化を有効化しました
eu-central-1 リージョンでEBSデフォルト暗号化を有効化しました
us-east-1 リージョンでEBSデフォルト暗号化を有効化しました
us-east-2 リージョンでEBSデフォルト暗号化を有効化しました
us-west-1 リージョンでEBSデフォルト暗号化を有効化しました
us-west-2 リージョンでEBSデフォルト暗号化を有効化しました

5.設定の確認。
コマンドの実行が終わったら、暗号化ができているか確認します。
「ec2 get-ebs-encryption-by-default」CLIコマンドで確認できます。
以下のコマンドをCloudshell上で実行してみましょう。

aws ec2 describe-regions --query "Regions[].[RegionName]" --output text | while read -r region; do
    ebs_encryption_status=$(aws ec2 get-ebs-encryption-by-default --region "$region" --output text --query EbsEncryptionByDefault 2>/dev/null)
    if [ -z "$ebs_encryption_status" ]; then
        echo "Region $region: EBS Encryption by Default status could not be determined"
    elif [ "$ebs_encryption_status" == "True" ]; then
        echo "Region $region: EBS Encryption by Default is ENABLED"
    else
        echo "Region $region: EBS Encryption by Default is DISABLED"
    fi
done

実行結果

Region ap-south-1: EBS Encryption by Default is ENABLED
Region eu-north-1: EBS Encryption by Default is ENABLED
Region eu-west-3: EBS Encryption by Default is ENABLED
Region eu-west-2: EBS Encryption by Default is ENABLED
Region eu-west-1: EBS Encryption by Default is ENABLED
Region ap-northeast-3: EBS Encryption by Default is ENABLED
Region ap-northeast-2: EBS Encryption by Default is ENABLED
Region ap-northeast-1: EBS Encryption by Default is ENABLED
Region ca-central-1: EBS Encryption by Default is ENABLED
Region sa-east-1: EBS Encryption by Default is ENABLED
Region ap-southeast-1: EBS Encryption by Default is ENABLED
Region ap-southeast-2: EBS Encryption by Default is ENABLED
Region eu-central-1: EBS Encryption by Default is ENABLED
Region us-east-1: EBS Encryption by Default is ENABLED
Region us-east-2: EBS Encryption by Default is ENABLED
Region us-west-1: EBS Encryption by Default is ENABLED
Region us-west-2: EBS Encryption by Default is ENABLED

無事に全リージョン有効化されてますね。
以上で、新しいEBSボリュームの作成時に自動的に暗号化が有効になります。

事後作業

実行ファイルを削除します。

$ rm -rf enable_ebs_encryption.py


まとめ

EBSボリュームの新規作成時のデフォルト暗号化を有効にすることで、新しく作成されるボリュームはすべて自動的に暗号化されるようになります。この設定は、データを保護する簡単な方法であり、コストもかかりません。組織のセキュリティポリシーに準拠し、コンプライアンス要件を満たすのに役立ちます。
アカウント開設直後に設定をすることを推奨します。


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