Amazon Data Lifecycle Manager でクロスアカウントのスナップショットコピーを設定

記事タイトルとURLをコピーする

Amazon Data Lifecycle Manager (以下、DLM)を使って、EC2インスタンスのクロスアカウントスナップショットコピーをしてみました。

目的

セキュリティ侵害やうっかりミスで、EC2インスタンスとスナップショットが全滅してしまったときでも、「こんなこともあろうかと」と、別のアカウントで取得していたバックアップから復旧できるようにする。

要件

実は AWS Backup を使えばクロスアカウントバックアップは簡単にできるのですが、それには AWS Organizations の機能を使う必要があります。AWS Organizations が利用できそうな場合は、まずはDLMよりもAWS Backupの検討をお勧めします。本記事では深く触れませんが、より高機能であり、EC2以外のサービスにも対応しています。

バックアップコピーの作成AWSアカウント - AWS Backup

今回はAWS Organizations の機能を利用できない状況だったので、DLMを試してみることにしました。

対象インスタンス

以下のタグがついたインスタンスを対象とします。
EBS暗号化はされていません。

タグ
DLM on

バックアップ・スケジュール

日次バックアップを1週間分、月次バックアップを3ヶ月分保持します。

頻度 時刻 保持
日次バックアップ 毎日 8:00 7世代
月次バックアップ 毎月1日 8:30 3世代

構成概要

複数アカウント・複数スケジュールと、少し複雑なので構成図を書いてみました。

f:id:swx-watanabe:20211104161640p:plain

2つのアカウントでDLMのポリシー設定し、以下の動作を実現します。

  1. (コピー元アカウント)スケジュールに従い、スナップショットが作成
  2. (コピー元アカウント)バックアップ用アカウントへスナップショットを共有
  3. (コピー先アカウント)共有がトリガーとなり、スナップショットをコピー

設定手順

こちらの公式ドキュメントを参考にしています。

docs.aws.amazon.com

コピー元アカウントの設定

まずは、EC2インスタンスがあるアカウントの方で設定をします。

マネージメントコンソール > EC2ダッシュボード > ライフサイクルマネージャー で ライフサイクルポリシーを作成 をクリックします。

f:id:swx-watanabe:20211104170432p:plain

「EBSスナップショットポリシー」を選択します。

f:id:swx-watanabe:20211104170740p:plain

ターゲットリソース

f:id:swx-watanabe:20211104172223p:plain

今回はバックアップしたいEC2インスタンスに、DLM:onというタグをつけることにしました。 インスタンスを選択し、タグを入力したら、追加ボタンを押します。

IAMロール

f:id:swx-watanabe:20211104172339p:plain

デフォルトで構いません。

ポリシーのステータス

f:id:swx-watanabe:20211104172440p:plain

有効にします。

スケジュール

同じライフサイクルポリシー内で、複数のスケジュールを作成可能です。 まずは日次バックアップのスケジュールを入力します。

f:id:swx-watanabe:20211104173853p:plain

日次バックアップのスケジュールが入力できたら、画面上にスケジュール追加ボタンがあるので、そこから月次バックアップを入力します。

f:id:swx-watanabe:20211104174527p:plain

今回はeverydayとeverymonthという2つのスケジュールを作成しました。

設定項目 日時バックアップ 月次バックアップ
スケジュール名 everyday everymonth
頻度 毎日/毎24時間 毎月最終
開始時刻 23:00 UTC 23:30 UTC
保持タイプ カウント カウント
保持 7 3
ソースからタグをコピー チェック チェック
アカウントの共有 コピー先アカウントのID コピー先アカウントのID

これで、コピー元アカウントの設定は完了し、定期的なスナップショット作成とコピー先アカウントへの共有が開始されます。

この設定で作成されるスナップショットのタグと説明は以下となります。

f:id:swx-watanabe:20211104180453p:plain

f:id:swx-watanabe:20211104180512p:plain

説明には、以下のようにライフサイクルポリシーIDとスケジュール名が記載されます。 このスナップショットの説明は、コピー先アカウントの設定時に利用します。

  • Created for policy: policy-xxxxxxxxxxxxxxx schedule: everyday
  • Created for policy: policy-xxxxxxxxxxxxxxx schedule: everymonth

コピー先アカウントの設定

続いて、コピー先アカウントでの設定をします。 上記で共有されたスナップショットのコピー設定をしますが、日次と月次の2つのライフサイクルポリシーを 作成する必要があります。

マネージメントコンソール > EC2ダッシュボード > ライフサイクルマネージャー で ライフサイクルポリシーを作成 をクリックします。

f:id:swx-watanabe:20211105112153p:plain

「アカウント間コピーのイベントポリシー」を選択します。

今回、2つのポリシーは以下のように設定しました。

設定項目 日時バックアップ 月次バックアップ
ポリシーの説明 Copy Daily Snapshot Copy Monthly Snapshot
アカウントの共有 コピー元アカウントのID コピー元アカウントのID
頻度 毎日/毎24時間 毎月1日
このスナップショットの説明があるスナップショットをコピー Created for policy: policy-xxxxxxxx schedule: everyday Created for policy: policy-xxxxxxxx schedule: monthly
リージョン1 ap-northeast-1 ap-northeast-1
期限 7日作成後 3日作成後

「このスナップショットの説明があるスナップショットをコピー」が重要で、ここで入力した正規表現とスナップショットの説明がマッチすると、このポリシーの対象となります。説明には、コピー元アカウントで設定した時のポリシーIDとスケジュール名が入っています。正規表現で工夫できるかもしれませんが、今回のように説明をそのままコピー&ペーストしても問題ありません。

コピーされたスナップショットには、以下のような説明やタグがつきます。

f:id:swx-watanabe:20211105120246p:plain

f:id:swx-watanabe:20211105120259p:plain

少し困ったこととして、1つのライフサイクルポリシーで複数インスタンスを対象とすると、どのスナップショットがどのインスタンスのものか判別するのが難しいというのがあります。 説明にあるEBSボリュームIDしか判別材料がありません。

コピー元アカウントでライフサイクルポリシーをインスタンスごとに作成することも考えられますが、どちらにしても目視ですぐに確認するのは難しいと感じました。

とはいえ、ひとまずこれで完成です。

まとめ

Amazon Data Lifecycle Manager でクロスアカウントのスナップショットコピーを設定しました。 EC2インスタンスのクロスアカウントバックアップの選択肢の1つにはなります。 AWS Backupのクロスアカウントバックアップが諸事情で使えない場合は検討いただければと思います。

渡辺 信秀(記事一覧)

2017年入社 / 地味な内容を丁寧に書きたい