1. 手動スナップショットのクロスアカウント共有方法
- 手動で取得したDBスナップショットは、他アカウントへプライベートに共有可能(最大20アカウントまで)。
- 共有されたスナップショットは、共有先アカウントでコピーまたはリストアに利用できる。
- 共有は、AWSマネジメントコンソールの「Share snapshot」アクション、AWS CLI、またはRDS APIで実施できる。
- 共有時は、スナップショットの属性
restore
に共有先アカウントIDを追加して権限を付与する。 -
AWS CLIでの共有方法
以下のように、aws rds modify-db-snapshot-attribute
コマンドを利用し、--attribute-name restore
と--values-to-add
オプションで共有先のAWSアカウントIDを指定する。aws rds modify-db-snapshot-attribute \ --db-snapshot-identifier mydbsnapshot \ --attribute-name restore \ --values-to-add 123456789012
- 上記コマンドにより、指定したスナップショットの
restore
属性に対象アカウントIDが追加され、共有先はそのスナップショットからDBインスタンスをリストアできる。 - 複数アカウントに共有する場合は、カンマ区切りやJSON配列でIDを指定可能。
- 共有解除の場合は、
--values-to-remove
オプションを使用する。
- 上記コマンドにより、指定したスナップショットの
-
アクセス権の確認
aws rds describe-db-snapshot-attributes
コマンドで、スナップショットに許可されているAWSアカウント(AttributeValues)の一覧を確認できる。
注意: スナップショットを
all
で共有(公開)すると全AWSアカウントからリストア可能になるが、これは暗号化されていない手動スナップショットのみ対象。機密データを含む場合は公開共有は避けること。
2. 自動スナップショットをコピーして共有する方法
自動スナップショット(RDSがスケジュールに基づいて取得するバックアップ)は、直接他アカウントに共有できないため、以下の手順を取る:
① 自動スナップショットのコピー(手動スナップショットへの変換)
-
共有元アカウントで自動スナップショットを手動スナップショットにコピーすることで、共有可能な状態にする。
-
コピーは、AWSマネジメントコンソールの「Copy snapshot」操作や、CLIコマンド
aws rds copy-db-snapshot
で実施できる。 -
例(以下の値は適宜置き換えること):
aws rds copy-db-snapshot \ --source-db-snapshot-identifier arn:aws:rds:<source-region>:<source-account-id>:snapshot:<automated-snapshot-id> \ --target-db-snapshot-identifier my-manual-copy
-
<source-region>
、<source-account-id>
、<automated-snapshot-id>
は該当する情報に置換。 - コピー完了後、
my-manual-copy
が手動スナップショットとして扱われる。
-
② コピーした手動スナップショットの共有
-
手動スナップショットと同様に、
modify-db-snapshot-attribute
コマンドで共有先アカウントIDを指定して共有する。aws rds modify-db-snapshot-attribute \ --db-snapshot-identifier my-manual-copy \ --attribute-name restore \ --values-to-add 123456789012
-
123456789012
は共有先アカウントのAWSアカウントID。
-
③ 共有先での利用
- 共有先アカウントでは、共有されたスナップショットを一度自アカウントにコピーする運用が一般的。
- コンソールの「Shared with me(共有済み)」タブから「Copy snapshot」でコピーし、自アカウント内のスナップショットとして利用できる。
3. 暗号化されたスナップショットの共有方法(KMSキーの設定)
暗号化されたRDSスナップショットを共有する場合、KMS(Key Management Service)のキー設定と、スナップショットのコピー(再暗号化)が必要となる。
※デフォルトのAWS管理KMSキーで暗号化されたスナップショットは共有できない。
① カスタマー管理KMSキーの用意と権限付与
-
共有元アカウントでカスタマー管理のKMSキーを作成し、キーのキーポリシーまたは使用権限に共有先アカウントを追加する。
-
例として、以下のポリシーに共有先アカウントID(例:
123456789012
)を追加する。{ "Version": "2012-10-17", "Id": "key-default-1", "Statement": [ { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::<your-account-id>:root", "arn:aws:iam::123456789012:root" ] }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" } ] }
-
ポリシー更新は以下のCLIコマンドで実施:
aws kms put-key-policy \ --key-id <your-kms-key-id> \ --policy-name default \ --policy file://kms-key-policy.json
-
<your-kms-key-id>
は対象KMSキーID。
-
② 暗号化スナップショットのコピー(再暗号化)
-
共有元アカウントで、元の暗号化スナップショットを、上記カスタムKMSキーを使用してコピー(再暗号化)する。
aws rds copy-db-snapshot \ --source-db-snapshot-identifier arn:aws:rds:<source-region>:<source-account-id>:snapshot:<encrypted-snapshot-id> \ --target-db-snapshot-identifier my-encrypted-manual-copy \ --kms-key-id <your-kms-key-id>
-
<encrypted-snapshot-id>
: 元の暗号化スナップショットのID -
<your-kms-key-id>
: 更新したカスタムKMSキーのID - コピー完了後、
my-encrypted-manual-copy
が手動スナップショットとして扱われ、共有可能になる。
-
③ コピーした暗号化スナップショットの共有
-
通常の手動スナップショットと同様に、以下のコマンドで共有先アカウントに共有する。
aws rds modify-db-snapshot-attribute \ --db-snapshot-identifier my-encrypted-manual-copy \ --attribute-name restore \ --values-to-add 123456789012
④ 共有先でのコピーと復元
- 共有先アカウントでは、直接リストアはできないため、共有された暗号化スナップショットを自アカウントにコピーする。
- コピー時には、共有先のカスタムKMSキーを指定して暗号化する必要がある。
- コピーが完了すると、自アカウント内のスナップショットとして通常通りリストア可能となる。