【AWS RDS】RDSを別のAWSアカウントに共有、復元する手順


## 目的

クロスアカウントでRDS移行したいとか、障害切り分けの際に別の環境で再現したいというケースがあったので
手順を書いてみました。

## やったこと

### ソース側AWSアカウント

#### ソースRDSの手動スナップショットを取得する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/ec58b731-161e-0990-3950-59f6b0b04fba.png)

RDSのコンソールからスナップショットを選択しスナップショットを取得します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/87d83553-b297-52ff-5e53-0dd5e64d54b3.png)

(スナップショットのサンプル)

#### ターゲット側AWSアカウントからのアクセスを許可したKMSキーを使ってスナップショットを暗号化コピーする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/5e14f8bf-30ec-8b3a-e422-6cd7f7268993.png)

RDSは暗号化の際特に指定しなければマネージドのKMSキーを使用してしまうため、キーポリシーを変更できません。
その場合共有ができても復元ができないので注意が必要です。

別のAWSアカウントでDBのスナップショットを復元する場合はカスタマー管理のキーを作成する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/812309a1-165c-7cc3-f31e-ab86a12d3621.png)

デフォルトのまま次へ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/2b8218b9-5223-1ae9-1c17-31c484ad58bc.png)

RDS用とわかるようにエイリアスを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/2a18bfae-545e-4c28-0070-07b84de1e616.png)

KMSを作成しているユーザなどKMSを管理するIAM権限を持つものを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/32fd5c0a-d459-0270-5bdc-5d0a2fe0e5f5.png)

ターゲット側AWSアカウントIDにアクセス許可を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/c8fcc85c-b529-beff-0593-4135330acbd0.png)

正常に作成できたらOKです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/527f8d2b-daba-cb74-5494-d1b1395d333a.png)

KMSが作成できたら対象のスナップショットをコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/893eca8e-965c-df55-83d8-1e9e244b6d6a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/4845400e-d147-1fb7-00a0-d65c891ad100.png)

コピーを作成する際に先ほど作成したKMSを指定してスナップショットをコピーします。


####  ターゲット側AWSアカウントとスナップショットを共有する。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/baf112e4-69dc-6b7c-5507-2505cf4c99a9.png)

対象のスナップショットで「スナップショットの共有」を選択し、ターゲットのAWSアカウントを追加して保存したら完了です。

### ターゲット側の操作

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/e83468c4-03e9-6cb1-1fc0-97dc67ad3f08.png)


ターゲットのAWSアカウントでスナップショットの自分と共有の箇所にスナップショットがあればOKです。

共有スナップショットはそのまま復元できないので、ソース側で実行したスナップショットのコピーをして使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89244/ce465772-d15d-cd06-ced9-8aa29b0f730d.png)

コピーの際にソース側で作ったKMSキーのARNを入力しコピーします。

残りは通常のスナップショットからの復元と一緒でインスタンスを作成すれば完了です。

### 終わりに

別の環境に移してから検証したいという要望が多かったのと、公式サイトのドキュメントがバラバラしてみづらかったり
KMSが絡むとめんどくさくなって敬遠されがちな手順なので纏まられてよかったと思いました。


参考ドキュメント

https://aws.amazon.com/jp/premiumsupport/knowledge-center/rds-snapshots-share-account/

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_CreateSnapshot.html

https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/key-policy-overview.html

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_ShareSnapshot.html

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_Tutorials.RestoringFromSnapshot.html