アカウントをまたいだスナップショットの共有→復元の方法
AWSにはRDSなどのスナップショットを別のアカウントと共有できる機能があります。(クロスアカウント)
例えば、開発・ステージング・本番とAWSアカウントが分かれている場合、この機能を使用することによって、異なる環境に同じDBを構築することが可能になります。
大まかな流れは以下になります。
(ここでは環境Aから環境BにDBを復元するケースを想定しています。)
・環境AにてDBのスナップショットを作成
・取得したスナップショットを環境Bと共有
・環境BでスナップショットからDBを復元
以下に詳しくやり方が書かれています。
https://dev.classmethod.jp/cloud/aws/rds-snapshot-share/
DBが暗号化されている場合の手順
このようにクロスアカウントでのスナップショットからのDB復旧は簡単にできます。
しかし、DBが暗号化されている場合は、これに+αの手順が必要になってきます。
大まかな流れは以下のようになります。
・環境AにてDBのスナップショットを作成
・取得したスナップショットを環境Bと共有
・環境Aでの暗号化鍵(KMS)を環境Bから使用できるようにする
・環境Bにて、共有されたスナップショットをコピー
・コピーしたスナップショットからDBを復元
以下、詳しく説明していきます。
・環境AにてDBのスナップショットを作成
・取得したスナップショットを環境Bと共有
ここは特に変わりありません。
環境Aでの暗号化鍵(KMS)を環境Bから使用できるようにする
問題はここです。
実は、暗号化されたスナップショットはクロスアカウント共有をしても復旧をすることができません。
プルダウンから復旧を選択しようとしても、グレーアウトされており、選択できません。
そのため、環境Bにて暗号化されたスナップショットを復号してコピーするという手順が必要になります。
その際に、復号するための鍵が必要になります。
この鍵は、環境AでDBを暗号化したときに使った鍵になります。
その暗号化の鍵はAWSのKMSというサービスにて提供されています。(これは一般的には、という意味であり、自前の暗号化鍵を使った場合はこの限りではありません。)
なので、環境Bから環境AのKMSを使用できるように設定をする必要があります。
KMSは、鍵ごとにリソースが分かれています。
複数ある場合は、どれかわからない場合がありますが、そんな時はRDS(Aurora)の暗号化鍵のリンクから飛ぶと早いです。
(RDSの設定タブの「KMSキー」をクリックする。)
KMSにはポリシーという設定があります。
ここで、「この鍵は環境Bからも使用可能」という設定をしてやる必要があります。
「キーポリシー」タブから編集を選択します。
編集方法については以下のページが詳しいです。
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ShareSnapshot.html#USER_ShareSnapshot.Sharing
かいつまんで言うと、以下の設定が必要になります。
"arn:aws:iam::444455556666:root" のような形式でユーザーを追加します。
444455556666は環境BのアカウントIDを入力します。
アカウントIDを確認するには、該当のアカウントでAWSコンソールに入り、右上のユーザーをクリックして「マイアカウント」を選択します。
遷移先のページのアカウントIDがそれになります。
また、 kms:CreateGrant のアクションを許可します。
こんな感じで追加してください。
"Action": [ "kms:CreateGrant", ←これ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ],
編集が完了したら、保存を選択してください。
ここで正常に保存できればいいのですが、
Policy contains a statement with one or more invalid principals.
のようなエラーが発生する時があります。
その時は、以下を疑ってみてください。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/kms-cmk-policy-error-invalid-principals/
削除したIAMユーザーのARNが残っているとエラーが発生するようです。
環境Bにて、共有されたスナップショットをコピー
暗号化されたスナップショットを直接復号はできないので、まずは自環境(環境B)にコピーを行います。
この時に、復号も一緒に行われます。
まずは該当のスナップショットを選択しましょう。
検索で「共有ファイル」を選択すると、共有したスナップショットだけが絞り込まれるので探しやすいです。
該当のスナップショットを選択したら、「スナップショットのアクション」から「スナップショットのコピー」を選択しましょう。
コピーする際に、「暗号」セクションの「マスターキー」で「キーのARNを入力」を選択します。
すると、キーのARN入力枠が表示されるので、先ほど共有した鍵のARNを入力しましょう。
入力が完了したらスナップショットをコピーします。
コピーしたスナップショットからDBを復元
あとは、今までと同じくスナップショットからDBを復元させれば完了です。
多少複雑にはなりますが、一度やってしまえばそこまで難しい手順ではないかと思います。
データサイズによっては復旧に時間がかかるかもしれません。
以下の記事で復旧時間の検証を行っていますので参考にしてください。