DB スナップショットの共有 - Amazon Relational Database Service

DB スナップショットの共有

Amazon RDS を使用すると、次の方法で手動 DB スナップショットを共有できます。

  • 手動 DB スナップショットを共有すると、暗号化されているかいないかに関係なく、権限のある AWS アカウントがスナップショットをコピーできるようになります。

  • 暗号化されていない手動 DB スナップショットを共有すると、権限のある AWS アカウントが、DB インスタンスをコピーしてそこから復元するのではなく、スナップショットから DB インスタンスを直接復元できるようになります。ただし、共有され暗号化された DB スナップショットから、DB インスタンスを復元することはできません。代わりに、DB スナップショットのコピーを作成し、そのコピーから DB インスタンスを復元できます。

注記

自動 DB スナップショットを共有するには、自動化されたスナップショットをコピーしてそのコピーを共有することで、手動 DB スナップショットを作成します。このプロセスは、AWS Backup で生成されたリソースにも適用されます。

スナップショットのコピーの詳細については、「snapshotのコピー」を参照してください。DB スナップショットから DB インスタンスを復元する方法については、DB スナップショットからの復元 を参照してください。

手動スナップショットを最大 20 のその他の AWS アカウントと共有することができます。

手動スナップショットを他の AWS アカウントと共有する場合には、次の制限が適用されます。

  • AWS Command Line Interface (AWS CLI) または Amazon RDS API を使用して共有スナップショットから DB インスタンスを復元する際、スナップショット識別子として共有スナップショットの Amazon リソースネーム (ARN) を指定する必要があります。

  • 固定オプションまたは永続オプションを持つオプショングループを使用する DB スナップショットを共有することはできません。Timezone または OLS オプション (あるいはその両方) を持つ Oracle DB インスタンスを除きます。

    固定オプションはオプショングループから削除できません。永続オプションを含むオプショングループは、そのオプショングループが DB インスタンスに割り当てられると、DB インスタンスから削除できなくなります。

    次の表は、固定オプションおよび永続オプションと、それらに関連する DB エンジンをリストしています。

    オプション名 永続 固定 DB エンジン
    TDE はい いいえ Microsoft SQL Server Enterprise Edition
    TDE はい はい Oracle Enterprise Edition
    タイムゾーン はい はい

    Oracle Enterprise Edition

    Oracle Standard Edition

    Oracle Standard Edition One

    Oracle Standard Edition Two

    Oracle DB インスタンスの場合、Timezone または OLS オプション (あるいはその両方) を持つ共有 DB スナップショットをコピーできます。そのためには、DB スナップショットをコピーするときにこれらのオプションを含むターゲットオプショングループを指定します。OLS オプションは、Oracle バージョン 12.2 以降を実行している Oracle DB インスタンスに対してのみ恒久的かつ永続的です。これらのオプションの詳細については、「Oracle のタイムゾーン」および「Oracle Label Security」を参照してください。

公開スナップショットの共有

暗号化されていない手動スナップショットをパブリックとして共有することもできます。これにより、このスナップショットをすべての AWS アカウントが使用できるようになります。スナップショットを公開として共有する場合には、公開スナップショットにプライベート情報が含まれないように注意してください。

スナップショットがパブリックに共有されると、スナップショットのコピーと DB インスタンス作成のための AWS アカウント許可がすべて付与されます。

他のアカウントが所有する公開スナップショットのバックアップストレージについては課金されません。課金されるのは、所有しているスナップショットに対してのみです。

公開スナップショットをコピーする場合は、そのコピーを所有します。スナップショットコピーのバックアップストレージに対しては課金されます。DB インスタンスを公開スナップショットから作成する場合、その DB インスタンスに対して課金されます。Amazon RDS の料金情報については、Amazon RDS の製品ページ

削除できるのは、所有している公開スナップショットのみです。共有または公開スナップショットを削除するために、そのスナップショットを所有する AWS アカウントにログインできることを確認してください。

他の AWS アカウントが所有する公開スナップショットの表示

Amazon RDS コンソールの [Snapshots] (スナップショット) ページにある [Public] (公開) タブの特定の AWS リージョンで、他のアカウントが所有する公開スナップショットを表示できます。(自分のアカウントが所有する) スナップショットは、このタブには表示されません。

公開スナップショットを表示するには

  1. Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[Snapshots] を選択します。

  3. [Public (公開)] タブを選択します。

    公開スナップショットが表示されます。[Owner (所有者)] 列に、公開スナップショットを所有しているアカウントが表示されます。

    注記

    ページ設定を変更する必要がある場合、[Public snapshots (公開スナップショット)] リストの右上にあるギヤアイコンを選択して、この列を表示させます。

独自の公開スナップショットの表示

次の AWS CLI コマンド (Unix のみ) を使用して、特定の AWS リージョンの AWS アカウントが所有する公開スナップショットを表示させることができます。

aws rds describe-db-snapshots --snapshot-type public --include-public | grep account_number

公開スナップショットがある場合、次の例のような出力が返されます。

"DBSnapshotArn": "arn:aws:rds:us-east-1:123456789012:snapshot:mysnapshot1", "DBSnapshotArn": "arn:aws:rds:us-east-1:123456789012:snapshot:mysnapshot2",
注記

DBSnapshotIdentifier または SourceDBSnapshotIdentifier のエントリが重複する場合があります。

暗号化されたスナップショットの共有

AES-256 暗号化アルゴリズムを使用して暗号化された「保存中」である DB スナップショットを共有できます (Amazon RDS リソースの暗号化 で説明しています)。これを行うには、以下のステップに従います。

  1. スナップショットの暗号化に使用された AWS Key Management Service (AWS KMS) カスタマーマスターキー (CMK) を、スナップショットにアクセスできるようにするすべてのアカウントと共有します。

    AWS KMS CMK は、AWS キーポリシーに他のアカウントを追加することで、別の AWS KMS アカウントと共有できます。キーポリシーの更新の詳細については、AWS KMS デベロッパーガイドの「キーポリシー」を参照してください。キーポリシーの作成例については、このトピックで後述するAWS KMS カスタマーマスターキー (CMK) へのアクセスの許可を参照してください。

  2. AWS Management Console、AWS CLI、または Amazon RDS API を使用して、暗号化されているスナップショットを他のアカウントと共有します。

以下の制限は、暗号化されたスナップショットの共有に適用されます。

  • 暗号化されたスナップショットをパブリックとして共有することはできません。

  • Transparent Data Encryption (TDE) を使用して暗号化されている Oracle または Microsoft SQL Server のスナップショットを共有することはできません。

  • スナップショットを共有する AWS KMS アカウントのデフォルト AWS CMK を使って暗号化されたスナップショットを共有することはできません。

AWS KMS カスタマーマスターキー (CMK) へのアクセスの許可

お客様のアカウントから共有された暗号化された DB スナップショットを、別の AWS アカウントでコピーするには、お客様のスナップショットを共有したアカウントに、スナップショットを暗号化した AWS KMS カスタマーマスターキー (CMK) へのアクセス権限がある必要があります。別の AWS アカウントに AWS KMS CMK へのアクセスを許可するには、AWS KMS CMK のキーポリシーを更新して、共有先の AWS アカウントの ARN を Principal キーポリシーの AWS KMS に設定し、kms:CreateGrant アクションを許可します。

AWS アカウントアクセスを AWS KMS CMK に許可した後、暗号化されたスナップショットをコピーするには、その AWS アカウントに AWS Identity and Access Management (IAM) ロールまたはユーザーがまだ存在しない場合は、作成する必要があります。さらに、その AWS アカウントは、ロールまたはユーザーが AWS KMS CMK を使用して暗号化された DB スナップショットをコピーできるようにする IAM ポリシーをその IAM ロールまたはユーザーにアタッチする必要があります。AWS のセキュリティ制限のため、アカウントは IAM ユーザーである必要があります。ルート AWS KMS アカウントアイデンティティにすることはできません。

次のキーポリシーの例では、ユーザー 111122223333 が AWS KMS CMK の所有者であり、ユーザー 444455556666 がキーの共有先のアカウントです。この更新されたキーポリシーは、ユーザー AWS のルート AWS KMS アカウントアイデンティティの ARN をポリシーの AWS として含み、444455556666 アクションを許可することで、Principal アカウントに kms:CreateGrant CMK へのアクセス権限を付与します。

{ "Id": "key-policy-1", "Version": "2012-10-17", "Statement": [ { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/KeyUser", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:CreateGrant", "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*" }, { "Sid": "Allow attachment of persistent resources", "Effect": "Allow", "Principal": {"AWS": [ "arn:aws:iam::111122223333:user/KeyUser", "arn:aws:iam::444455556666:root" ]}, "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": "*", "Condition": {"Bool": {"kms:GrantIsForAWSResource": true}} } ] }

暗号化されているスナップショットのコピーを許可する IAM ポリシーの作成

外部の AWS アカウントに AWS KMS カスタマーマスターキー (CMK) へのアクセス権限がある場合、その AWS アカウントの所有者は、そのアカウントで作成された IAM ユーザーに対してその AWS KMS CMK で暗号化されたスナップショットのコピーを許可するポリシーを作成できます。

次の例では、AWS アカウント 444455556666 の IAM ユーザーにアタッチできるポリシーを示しています。このポリシーは、IAM ユーザーに AWS アカウント 111122223333 から共有されたスナップショットのコピーを許可しています。DB スナップショットは AWS KMS リージョンで c989c1dd-a3f2-4a5d-8d96-e793d082ab26 CMK us-west-2 を使用して暗号化されたものです。

{ "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:aws:kms:us-west-2:111122223333:key/c989c1dd-a3f2-4a5d-8d96-e793d082ab26"] }, { "Sid": "AllowAttachmentOfPersistentResources", "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource": ["arn:aws:kms:us-west-2:111122223333:key/c989c1dd-a3f2-4a5d-8d96-e793d082ab26"], "Condition": { "Bool": { "kms:GrantIsForAWSResource": true } } } ] }

キーポリシーの更新の詳細については、AWS KMS デベロッパーガイドの「キーポリシー」を参照してください。

スナップショットの共有

AWS Management Console、AWS CLI、または RDS API を使用して、DB スナップショットを共有できます。

Amazon RDS コンソールを使用して、手動 DB スナップショットを最大 20 の AWS アカウントと共有することができます。また、コンソールを使用して、手動 スナップショットの 1 つ以上のアカウントとの共有を停止することもできます。

Amazon RDS コンソールを使用して、手動 DB スナップショットを共有するには

  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[Snapshots] を選択します。

  3. 共有する手動スナップショットを選択します。

  4. [アクション] で、[スナップショットの共有] を選択します。

  5. [DB snapshot visibility] で次のいずれかのオプションを選択します。

    • ソースが暗号化されていない場合、[パブリック] を選択してすべての AWS アカウントが手動 DB スナップショットから DB インスタンスを復元できるようにするか、[プライベート] を選択して指定した AWS アカウントだけが手動 DB スナップショットから DB インスタンスを復元できるようにします。

      警告

      [DB スナップショット可視化] を [パブリック] に設定すると、すべての AWS アカウントが手動 DB スナップショットから DB インスタンスを復元し、データへアクセスすることができるようになります。プライベート情報を含む手動 DB スナップショットは、[Public] として共有しないでください。

    • ソース DB クラスターが暗号化されている場合、暗号化されているスナップショットはパブリックとして共有できないため、[DB snapshot visibility] が [Private] に設定されます。

  6. [AWSAWS Account ID] で、手動スナップショットからの DB インスタンスの復元を許可するアカウントの AWS アカウント ID を入力してから、[Add] を選択します。この操作を繰り返して、AWS アカウント ID を最大 20 AWS アカウント追加できます。

    アクセス権限が付与されたアカウントのリストに AWS アカウント ID を誤って追加した場合には、その AWS アカウント ID の右側にある [Delete] を選択すれば、削除することができます。

    
							手動 DB スナップショットの復元を AWS アカウントに許可する
  7. 手動 スナップショットの復元を許可する AWS アカウント ID をすべて追加したら、[保存] を選択して変更を保存します。

AWS アカウントとの手動 DB スナップショットの共有を停止するには

  1. AWS Management Console にサインインし、Amazon RDS コンソール (https://console.aws.amazon.com/rds/) を開きます。

  2. ナビゲーションペインで、[Snapshots] を選択します。

  3. 共有を停止する手動スナップショットを選択します。

  4. [Actions] を選択してから、[Share Snapshot] を選択します。

  5. AWS アカウントのアクセス権限を削除するには、アクセス権限が付与されたアカウントのリストからそのアカウントの AWS アカウント ID を選択し、[Delete] を選択します。

    
						手動 DB スナップショットの復元を AWS アカウントに許可する
  6. [Save] を選択して変更を保存します。

DB スナップショットを共有するには、aws rds modify-db-snapshot-attribute コマンドを使用します。手動スナップショットの復元が許可されている --values-to-add アカウント ID のリストを追加するには、AWS パラメータを使用します。

例 スナップショットを 1 つのアカウントで共有する

次の例では、AWS アカウント識別子 123456789012db7-snapshot という名前の DB スナップショットを復元できるようにします。

Linux、macOS、Unix の場合:

aws rds modify-db-snapshot-attribute \ --db-snapshot-identifier db7-snapshot \ --attribute-name restore \ --values-to-add 123456789012

Windows の場合:

aws rds modify-db-snapshot-attribute ^ --db-snapshot-identifier db7-snapshot ^ --attribute-name restore ^ --values-to-add 123456789012

例 複数のアカウントでスナップショットを共有する

次の例では、2 つの AWS アカウント識別子 111122223333 および 444455556666manual-snapshot1 という名前の DB スナップショットを復元できるようにします。

Linux、macOS、Unix の場合:

aws rds modify-db-snapshot-attribute \ --db-snapshot-identifier manual-snapshot1 \ --attribute-name restore \ --values-to-add {"111122223333","444455556666"}

Windows の場合:

aws rds modify-db-snapshot-attribute ^ --db-snapshot-identifier manual-snapshot1 ^ --attribute-name restore ^ --values-to-add "[\"111122223333\",\"444455556666\"]"
注記

Windows コマンドプロンプトを使用する場合、JSON コードでは、二重引用符 (") の前にバックスラッシュ (\) を付けてエスケープする必要があります。

リストから AWS アカウント ID を削除するには、--values-to-remove パラメータを使用します。

例 スナップショット共有を停止する

AWS アカウント ID 444455556666 でスナップショットが復元できない例を以下に示します。

Linux、macOS、Unix の場合:

aws rds modify-db-snapshot-attribute \ --db-snapshot-identifier manual-snapshot1 \ --attribute-name restore \ --values-to-remove 444455556666

Windows の場合:

aws rds modify-db-snapshot-attribute ^ --db-snapshot-identifier manual-snapshot1 ^ --attribute-name restore ^ --values-to-remove 444455556666

スナップショットの復元が有効になっている AWS アカウントを一覧表示するには、describe-db-snapshot-attributes AWS CLI コマンドを使用します。

Amazon RDS API を使用することで、手動 DB スナップショットを他の AWS アカウントと共有することもできます。そのためには、ModifyDBSnapshotAttribute オペレーションを呼び出します。restoreAttributeName を指定し、ValuesToAdd パラメータを使用して、手動 スナップショットの復元が許可されている AWS アカウント ID のリストを追加します。

手動スナップショットを発行し、あらゆる AWS アカウントによる復元を可能にするには、値 all を使用します。ただし、すべての all アカウントには利用させたくないプライベート情報を含む手動 スナップショットについては、値 AWS を追加しないように注意してください。また、暗号化されているスナップショットでは all を指定しないでください。そのようなスナップショットをパブリックにすることはできないためです。

AWS アカウントのアクセス許可の共有を削除するには、AttributeNamerestore に設定し ValuesToRemove パラメータを設定して ModifyDBSnapshotAttribute オペレーションを使用します。手動 スナップショットをプライベートとしてマークするには、all 属性の値リストから値 restore を削除します。

スナップショットを復元するアクセス許可が付与されているすべての AWS アカウントを一覧表示するには、DescribeDBSnapshotAttributes API オペレーションを使用します。