AWS Backupを使って別アカウントにEC2のバックアップを取ってみた

2022.11.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS Backupを使って別リージョンにバックアップをコピーしたことはあったのですが、別アカウントに作成したことは無かったのでやってみました。

やること

簡単な構成図ですが以下のようなことをやります。

1. アカウントAの東京リージョンにあるEC2からAWS BackupでAMIを取得
2. アカウントBのバックアップボールトにアカウントAで取得したAMIをコピー
3. アカウントBの東京リージョンにあるVPCでEC2を復元

環境

以下のドキュメントに記載されているようにクロスアカウントのコピーはAWS Organizationsが必要になります。
AWS アカウントでのバックアップコピーの作成

  • 2つのAWSアカウントがAWS Organizationsで管理されていること
  • AWS Organizationsの管理アカウントで操作が可能なこと
  • EBSが暗号化されている場合はカスタマー管理型キーでコピー先のアカウントに共有可能なこと

設定

クロスアカウントバックアップを有効にする

まずはAWS Organizationsの管理アカウントにアクセスして「クロスアカウントバックアップ」を有効にします。
管理アカウントにアクセスしてAWS Backupのダッシュボード画面へ移動します。
移動したら画面左の項目から「設定」をクリックします。

画面が遷移したら「クロスアカウント管理」の項目から「クロスアカウントバックアップ」の「オンにする」をクリックします。

クリックするとステータスがオンになることが確認できます。
オンになったら管理アカウントでの作業は完了です。

アカウントBにバックアップボールトを作成する

アカウントBにアクセスしてAWS Backupのダッシュボード画面へ移動します。
移動したら画面左の項目から「バックアップボールト」をクリックします。

クリックしたら「バックアップボールトを作成」をクリックします。

画面が遷移したら「バックアップボールト名」と「暗号化キー」を入力して「バックアップボールトを作成」をクリックします。
暗号化キーはカスタマー管理型キーを利用しないとコピーに失敗します。
カスタマー管理型キーは以下の公式ドキュメントを参考に作成してください。
対称暗号化 KMS キーの作成

バックアップボールトが作成できたらアクセスポリシーを追加します。
作成したバックアップボールトをクリックして「アクセスポリシー」欄から「アクセス許可を追加」→「バックアップボールトへのアカウントレベルのアクセスを許可する」をクリックします。

クリックすると以下のポリシーが入力されているので10行目のアカウントIDにアカウントAのIDを入力します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "backup:CopyIntoBackupVault",
            "Resource": "*",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::[AccountID]:root"
                ]
            }
        }
    ]
}

保存ができたらアカウントBでのAWS Backupの設定は完了です。

アカウントAでバックアッププランとバックアップボールトを作成する

バックアップボールトの作成方法は上記のアカウントBでの作り方と同じなので割愛します。
アカウントAにアクセスしてAWS Backupのダッシュボード画面へ移動します。
移動したら画面左の項目から「バックアッププラン」をクリックします。

画面が遷移したら「バックアッププランを作成」をクリックします。

画面が遷移したら起動オプション欄で「新しいプランを立てる」を選択して「バックアッププラン名」を入力します。

入力したら「バックアップルールの設定」欄で以下の設定を行います。

  • バックアップルール名:任意の名前を設定
  • バックアップボールト:アカウントAで作成したバックアップボールトを選択
  • バックアップウィンドウ:バックアップウィンドウをカスタマイズ
    • バックアップウィンドウの開始時間:バックアップを行いたい時間をUTCで指定
    • 次の時間以内に開始:指定した時間以内にバックアップを取得する
    • 次の時間以内に完了:バックアップが完了するまでの時間を指定する
    • コールドストレージへの移行:EBSはコールドストレージに対応していないので設定不要
    • 保持期間:いつまでバックアップを保持しているかの設定、日数などで設定が可能
  • コピー先にコピー:コピー先のリージョンを選択
    • 別のアカウントのボールトにコピー:これを有効にすることで別アカウントのバックアップボールトにコピーが可能
    • 外部ボールト ARN:コピー先のアカウントで作成したバックアップボールトのARNを設定

「外部ボールト ARN」を入力するとバックアップボールトアクセスを許可というのが出てくるので許可をクリックしてアクセスポリシーを追加します。

設定値を入れると以下のようになります。


入力できたら「プランを作成」をクリックします。
画面が遷移したら「全般」欄で「リソース割り当て名」を入力します。
IAM ロールはデフォルトのロールを選択すると作成されていない場合は自動で作成されます。
リソースの選択欄では以下の設定を行います。

  • リソース選択を定義
    • 特定のリソースタイプを含める
    • 特定のリソースタイプを選択:今回はEC2のバックアップを作成したいのでリソースタイプにEC2を選択します
    • リソースタイプ:EC2
    • インスタンス ID:対象のEC2を選択
    • 選択したリソースタイプから特定のリソース ID を除外する:インスタンスIDを指定しているので設定は必要ありません
    • タグを使用して選択を絞り込む:インスタンスIDを指定しているので設定は必要ありません


入力したらリソースを割り当てるをクリックします。
ここまで設定したらバックアップルールで指定した時間にバックアップジョブが作成されます。

アカウントBで復元してみる

アカウントBにアクセスしてAWS Backupのダッシュボード画面へ移動します。
移動したら画面左の項目から「バックアップボールト」をクリックします。

画面が遷移したら対象のバックアップボールトをクリックして復旧ポイントにAMIが作成されていることを確認します。

作成されていることを確認したらAMIを選択して「アクション」から「復元」をクリックします。

画面が遷移したら以下の項目を設定します。

  • インスタンスタイプ:使用するインスタンスタイプを指定
  • Virtual Private Cloud (VPC):起動するVPCを指定
  • サブネット:起動するサブネットを指定
  • セキュリティグループ:EC2に設定するセキュリティグループを指定
  • インスタンス IAM ロール:IAMロールはアカウントAのものになってしまうのでここは「IAMロールなしで続行」を選択


「ロールの復元」欄ではデフォルトのロールを選択します。
ここまで設定ができたら「バックアップを復元」をクリックします。
復元ジョブのステータスが完了になったら復元完了です。

復元ができているか確認する

今回バックアップを作成したEC2には事前にApacheをインストールしておきました。
ブラウザからEC2のグローバルIPにアクセスしてApacheのテストページが表示されるか確認しました。
EC2に設定したセキュリティグループのインバウンドルールは以下のようになっています。

実際にアクセスすると以下のようにテストページが表示されました。

さいごに

AWS Backupを使ってクロスアカウントバックアップをやってみました。
2つのアカウントで作業をする必要があるのでどのアカウントで何の作業をやるのか先に書き出しておくと楽になるかもしれません。