はじめに
やり方は下記にありますが、わかりづらかったのでメモ。
AWS Key Management Service (AWS KMS) で管理される暗号化キーを共有してゴニョゴニョやります。
前提として
- デフォルト暗号化キーで暗号化してある場合は、キーが共有できないので無理
です。
手順
ざっくり、暗号化キーをアカウントのルートアカウントに共有→ルートアカウントが対象のIAMアカウントに鍵を共有→スナップショットを共有→復元先のアカウントでスナップショットをコピー→スナップショットから復元 という感じの手順です。
スナップショットを取る
手動スナップショットしか共有できないようなので手動で取得しておきます。
(時間かかる作業なので先に)
RDSの暗号化キーを確認
マネージメントコンソールのRDSインスタンスの構成の詳細から確認できます。
暗号化キーを復元先のアカウントに共有する
マネージメントコンソールから IAM > 暗号化キー で該当のリージョンをフィルタして共有したい暗号化キーを選択します。
外部アカウントの追加で復元先アカウントのアカウントIDを入力します。アカウントIDは右上のメニューの「アカウント」から確認できます。
復元先のアカウントでIAMアカウントに権限を付与
上記でルートアカウントに権限が渡るのですが、AWSの制限によりKMSで共有された暗号化キーをルートアカウントでは扱えないので、権限をIAMアカウントに付与します。
IAMのユーザのアクセス許可からインラインポリシーにてユーザーポリシーの作成を選択肢カスタムポリシーを作ります。カスタムポリシーには下記を入力します。
ARNはキーの詳細画面にある情報を入力します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowUseOfTheKey",
"Effect": "Allow",
"Action": [
"kms:Encrypt",
"kms:Decrypt",
"kms:ReEncrypt*",
"kms:GenerateDataKey*",
"kms:DescribeKey",
"kms:CreateGrant",
"kms:RetireGrant"
],
"Resource": [
"{共有したキーのARN}"
]
},
{
"Sid": "AllowAttachmentOfPersistentResources",
"Effect": "Allow",
"Action": [
"kms:CreateGrant",
"kms:ListGrants",
"kms:RevokeGrant"
],
"Resource": [
"{共有したキーのARN}"
],
"Condition": {
"Bool": {
"kms:GrantIsForAWSResource": true
}
}
}
]
}
対象のスナップショットを共有する
スナップショットを選択して「スナップショットの共有」で対象のスナップショットを該当のアカウントIDに対して共有します。
復元先のIAMアカウントで入ってスナップショットをコピーする
そのまま復元ができないようなので、一旦スナップショットをコピーします。
マネージメントコンソールのRDSのスナップショット一覧から、共有ファイルでフィルタすると共有されたスナップショットがでてくるのでコピーを選択します。
マスターキーで「キーのARNを入力」を選択し、キーのARNを入力してコピーします。
スナップショットの復元からインスタンスを立ち上げる
スナップショットのコピーが完了すると「スナップショットの復元」からインスタンスを起動できます。
暗号化キーの共有を解除すると、インスタンスは削除されるので注意してください。
終わりに
手順がよくわからず思ったより結構たいへんでした。
クラウド上にあると物理的にアクセスされてデータを持っていかれる可能性は少ないので暗号化のメリットとかよくわかっていなかったのですが、こうやって見てみるとアカウント間でそう簡単にはデータを持っていけなくなるため、暗号化しておくのは大事だなと思いました。