複数リージョンの全AWS BackupボールトにAWS CLIでボールトロックを一括設定してみた

複数リージョンの全AWS BackupボールトにAWS CLIでボールトロックを一括設定してみた

Clock Icon2024.10.02

はじめに

複数リージョンに存在するすべてのAWS Backupボールトに対して、AWS CLIを使用してボールトロックを一括作成する機会がありましたので、その方法をご紹介します。

この作業が必要になった背景は、組織全体のデータ保護とコンプライアンス強化の一環として、すべてのバックアップボールトに一貫したロックポリシーを適用する必要が生じたためです。

AWS CLI

以下のコマンドをAWS CloudShellで実行することで、ボールトロックを一括作成できます。

  • 対象リージョン:東京リージョン(ap-northeast-1)とバージニア北部リージョン(us-east-1)の全ボールト
  • 最小保持期間:30日
  • 最大保持期間:365日
  • ロックモード:ガバナンスモード(注:--changeable-for-days 3オプションを追加するとコンプライアンスモードになります)
$ for region in us-east-1 ap-northeast-1; do
    aws backup list-backup-vaults --region $region --query 'BackupVaultList[].BackupVaultName' --output text | tr '\t' '\n' | while read -r vault; do
        echo "Attempting to create vault lock for $vault in $region"
        aws backup put-backup-vault-lock-configuration \
            --backup-vault-name "$vault" \
            --region $region \
            --min-retention-days 30 \
            --max-retention-days 365
    done
done

// 出力結果

Attempting to create vault lock for Default in us-east-1
Attempting to create vault lock for Default in ap-northeast-1
Attempting to create vault lock for aws/efs/automatic-backup-vault in ap-northeast-1
Attempting to create vault lock for test in ap-northeast-1
Attempting to create vault lock for test-vault in ap-northeast-1

cm-hirai-screenshot 2024-10-02 8.18.48
東京リージョン

cm-hirai-screenshot 2024-10-02 8.20.07
バージニア北部リージョン

対象リージョンや保持期間は、組織の要件に応じて適宜変更してください。

対象リージョンのすべてのボールトロックを削除するコマンドは以下の通りです。

$ for region in us-east-1 ap-northeast-1; do
    aws backup list-backup-vaults --region $region --query 'BackupVaultList[].BackupVaultName' --output text | tr '\t' '\n' | while read -r vault; do
        echo "Attempting to delete vault lock for $vault in $region"
        aws backup delete-backup-vault-lock-configuration \
            --backup-vault-name "$vault" \
            --region $region
    done
done

// 出力結果

Attempting to delete vault lock for Default in us-east-1
Attempting to delete vault lock for Default in ap-northeast-1
Attempting to delete vault lock for aws/efs/automatic-backup-vault in ap-northeast-1
Attempting to delete vault lock for test in ap-northeast-1
Attempting to delete vault lock for test-vault in ap-northeast-1

特定のボールト名をスキップ

特定のボールト名をスキップしてボールトロックを作成したい場合、以下のコマンドで実現できます。

  • 対象リージョン:東京リージョン(ap-northeast-1)とバージニア北部リージョン(us-east-1)のボールト
  • 最小保持期間:30日
  • 最大保持期間:365日
  • ロックモード:ガバナンスモード(注:--changeable-for-days 3オプションを追加するとコンプライアンスモードになります)
  • スキップ対象:automatic-backup-vaultを含むボールト名
$ for region in us-east-1 ap-northeast-1; do
    aws backup list-backup-vaults --region $region --query 'BackupVaultList[].BackupVaultName' --output text | tr '\t' '\n' | while read -r vault; do
        if [[ "$vault" != *"automatic-backup-vault"* ]]; then
            echo "Attempting to create vault lock for $vault in $region"
            aws backup put-backup-vault-lock-configuration \
                --backup-vault-name "$vault" \
                --region $region \
                --min-retention-days 30 \
                --max-retention-days 365
        else
            echo "Skipping $vault in $region"
        fi
    done
done

// 出力結果

Attempting to create vault lock for Default in us-east-1
Attempting to create vault lock for Default in ap-northeast-1
Skipping aws/efs/automatic-backup-vault in ap-northeast-1
Attempting to create vault lock for test in ap-northeast-1
Attempting to create vault lock for test-vault in ap-northeast-1

出力結果から、aws/efs/automatic-backup-vaultに対してはボールトロックの作成をスキップしていることがわかります。

対象リージョンのautomatic-backup-vaultを含むボールト名を除き、ボールトロックをすべて削除するコマンドは以下の通りです。

$ for region in us-east-1 ap-northeast-1; do
    aws backup list-backup-vaults --region $region --query 'BackupVaultList[].BackupVaultName' --output text | tr '\t' '\n' | while read -r vault; do
        if [[ "$vault" != *"automatic-backup-vault"* ]]; then
            echo "Attempting to delete vault lock for $vault in $region"
            aws backup delete-backup-vault-lock-configuration \
                --backup-vault-name "$vault" \
                --region $region
        else
            echo "Skipping $vault in $region"
        fi
    done
done

// 出力結果

Attempting to create vault lock for Default in us-east-1
Attempting to create vault lock for Default in ap-northeast-1
Skipping aws/efs/automatic-backup-vault in ap-northeast-1
Attempting to create vault lock for test in ap-northeast-1
Attempting to create vault lock for test-vault in ap-northeast-1

aws/efs/automatic-backup-vaultはボールトロックの作成をスキップしているため、削除時にもスキップする必要はないかもしれません。
しかし、特定のボールトにはボールトロックを作成したくない場合もあると考え、スキップを含めたコマンドを紹介しました。

ボールトロック作成や削除できない場合

ボールトロックの作成や削除ができない場合は、実行ユーザーの権限およびボールト側のアクセスポリシーを確認する必要があります。

$ for region in us-east-1 ap-northeast-1; do
    aws backup list-backup-vaults --region $region --query 'BackupVaultList[].BackupVaultName' --output text | tr '\t' '\n' | while read -r vault; do
        echo "Attempting to delete vault lock for $vault in $region"
        aws backup delete-backup-vault-lock-configuration \
            --backup-vault-name "$vault" \
            --region $region
    done
done

//出力結果

Attempting to delete vault lock for Default in us-east-1
Attempting to delete vault lock for Default in ap-northeast-1
Attempting to delete vault lock for aws/efs/automatic-backup-vault in ap-northeast-1

An error occurred (AccessDeniedException) when calling the DeleteBackupVaultLockConfiguration operation: User: arn:aws:sts::012345678901:assumed-role/test-user/test-user is not authorized to perform: backup:DeleteBackupVaultLockConfiguration on resource: arn:aws:backup:ap-northeast-1:012345678901:backup-vault:aws/efs/automatic-backup-vault with an explicit deny in a resource-based policy
Attempting to delete vault lock for test in ap-northeast-1
Attempting to delete vault lock for test-vault in ap-northeast-1

アクセスポリシーを確認したところ、backup:DeleteBackupVaultLockConfigurationアクションが明示的にDeny(拒否)設定されていることがわかりました。

cm-hirai-screenshot 2024-09-30 8.16.58

このDeny設定を解除することで、ボールトロックの削除が可能になります。

参考

https://docs.aws.amazon.com/ja_jp/aws-backup/latest/devguide/API_PutBackupVaultLockConfiguration.html

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.