クロスアカウントのスナップショットコピーの自動化 - Amazon Elastic Compute Cloud

クロスアカウントのスナップショットコピーの自動化

クロスアカウントのスナップショットのコピーを自動化すると、Amazon EBS スナップショットを分離アカウントの特定のリージョンにコピーし、暗号化キーを使用してそれらのスナップショットを暗号化できます。これにより、アカウントが侵害された場合にデータの損失から保護することができます。

アカウント間でスナップショットのコピーを自動化するには、次の 2 つのアカウントが使用されます。

  • ソースアカウント— ソースアカウントは 、スナップショットを作成してターゲットアカウントと共有するアカウントです。このアカウントでは、設定した間隔でスナップショットを作成し、他の AWS アカウントと共有する EBS スナップショットポリシーを作成する必要があります。

  • ターゲットアカウント— ターゲットアカウントは 、スナップショットを共有する共有先アカウントを持つアカウントで、共有スナップショットのコピーを作成するアカウントです。このアカウントでは、指定した 1 つ以上のソースアカウントによって共有されるスナップショットを自動的にコピーするクロスアカウントコピーイベントポリシーを作成する必要があります。

クロスアカウントスナップショットコピーポリシーの作成

アカウント間でスナップショットをコピーするためにソースアカウントとターゲットアカウントを準備するには、次の手順を実行します。

手順 1: EBS スナップショットポリシーを作成する (ソースアカウント)

ソースアカウントで EBS スナップショットポリシーを作成します。これにより、スナップショットを作成し、必要なターゲットアカウントと共有します。

ポリシーを作成する場合は、クロスアカウントでの共有を有効にし、 スナップショットを共有するターゲットの AWS アカウントを指定します。このアカウントは、スナップショットを共有するアカウントです。暗号化されたスナップショットを共有する場合は、選択したターゲットアカウントに、ソースボリュームの暗号化に使用された KMS キー を使用するためのアクセス権限を付与する必要があります。詳細については、「」を参照してくださいステップ 2: カスタマーマネージド型キー (ソースアカウント) を共有する

EBS スナップショットポリシーを作成する方法については、「スナップショットのライフサイクルの自動化」を参照してください。

EBS スナップショットポリシーを作成するには、次のいずれかの方法を使用します。

ステップ 2: カスタマーマネージド型キー (ソースアカウント) を共有する

暗号化されたスナップショットを共有する場合は、IAM ロールと (前のステップで選択した) ターゲットの AWS アカウントに、ソースボリュームの暗号化に使用されたカスタマーマネージド型キーを使用するためのアクセス権限を付与する必要があります。

注記

この手順は、暗号化されたスナップショットを共有する場合にのみ実行してください。暗号化されていないスナップショットを共有する場合は、この手順をスキップします。

Console

  1. AWS KMS コンソール (https://console.aws.amazon.com/kms) を開きます。

  2. AWS リージョンを変更するには、ページの右上隅にあるリージョンセレクターを使用します。

  3. ナビゲーションペインで、[カスタマーマネージド型キー] を選択してから、ターゲットアカウントと共有する必要がある KMS キーを選択します。

    KMS キー の ARN を記録しておきます。これは後で必要になります。

  4. [キーポリシー] タブで、[キーユーザー] セクションまで下にスクロールします。[追加] を選択し、前のステップで選択した IAM ロールの名前を入力してから、[追加] をクリックします。

  5. [Key policy] (キーポリシー) タブで、[Other AWS accounts] (その他の AWS アカウント) セクションまで下にスクロールします。[Add other AWS accounts] (他の AWS アカウントの追加) を選択し、前の手順でスナップショットの共有先として選択したターゲット AWS アカウントをすべて追加します。

  6. [変更を保存] を選択します。

Command line

KMS キー に現在アタッチされているキーポリシーを取得するには、get-key-policy コマンドを使用します。

例えば、次のコマンドは、9d5e2b3d-e410-4a27-a958-19e220d83a1e の ID を持つ KMS キー のキーポリシーを取得し、snapshotKey.json という名前のファイルに書き込みます。

$ aws kms get-key-policy \ --policy-name default --key-id 9d5e2b3d-e410-4a27-a958-19e220d83a1e \ --query Policy --output text > snapshotKey.json

任意のテキストエディタを使用してキーポリシーを開きます。スナップショットポリシーの作成時に指定した IAM ロールの ARN と、KMS キー を共有するターゲットアカウントの ARN を追加します。

例えば、次のポリシーでは、デフォルトの IAM ロールの ARN と、ターゲットアカウント 222222222222. 用のルートアカウントの ARN を追加しました。

{ "Sid" : "Allow use of the key", "Effect" : "Allow", "Principal" : { "AWS" : [ "arn:aws:iam::111111111111:role/service-role/AWSDataLifecycleManagerDefaultRole", "arn:aws:iam::222222222222:root" ] }, "Action" : [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource" : "*" }, { "Sid" : "Allow attachment of persistent resources", "Effect" : "Allow", "Principal" : { "AWS" : [ "arn:aws:iam::111111111111:role/service-role/AWSDataLifecycleManagerDefaultRole", "arn:aws:iam::222222222222:root" ] }, "Action" : [ "kms:CreateGrant", "kms:ListGrants", "kms:RevokeGrant" ], "Resource" : "*", "Condition" : { "Bool" : { "kms:GrantIsForAWSResource" : "true" } } }

保存してファイルを閉じます。次に、put-key-policy コマンドを使用して、更新されたキーポリシーを KMS キー にアタッチします。

$ aws kms put-key-policy \ --policy-name default --key-id 9d5e2b3d-e410-4a27-a958-19e220d83a1e --policy file://snapshotKey.json

手順 3: クロスアカウントコピーイベントポリシーの作成 ( ターゲットアカウント )

ターゲットアカウントで、必要なソースアカウントで共有されるスナップショットを自動的にコピーするクロスアカウントコピーイベントポリシーを作成する必要があります。

このポリシーは、指定されたソースアカウントの 1 つがスナップショットを共有する場合にのみ、ターゲットアカウントで実行されます。

クロスアカウントコピーイベントポリシーを作成するには、次のいずれかの方法を使用します。

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

  2. ナビゲーションペインで、[Elastic Block Store]、[ライフサイクルマネージャー]、[ライフサイクルポリシーの作成] の順に選択します。

  3. [ポリシータイプの選択] 画面で、[クロスアカウントコピーのイベントポリシー] を選択した上で、[次へ] をクリックします。

  4. [ポリシーの説明] に、ポリシーの簡単な説明を入力します。

  5. [ポリシータグ] に、ライフサイクルポリシーに適用されるタグを追加します。これらのタグは、ポリシーを識別および分類するために使用することができます。

  6. [イベントの設定] セクションで、ポリシーを実行するスナップショット共有イベントを定義します。次の作業を行います。

    1. [共有するアカウント] で、共有スナップショットのコピー元となる、ソース AWS アカウントを指定します。[アカウントを追加] をクリックし、12 桁の AWS アカウント ID を入力した後、[追加] をクリックします。

    2. [説明でフィルタリング] に、正規表現を使用して必要なスナップショットの説明を入力します。指定したソースアカウントによって共有され、指定したフィルターに一致する説明を持つスナップショットのみが、ポリシーによってコピーされます。詳細については、「」を参照してくださいスナップショット説明フィルターの指定

  7. [IAM ロール] で、スナップショットのコピーアクションを実行するアクセス許可を持つ IAM ロールを選択します。Amazon Data Lifecycle Manager から提供されるデフォルトのロールを使用するには、[デフォルトロール] を選択します。以前に作成したカスタム IAM ロールを使用する場合には、[別のロールを選択] をクリックした上で、使用するロールを選択します。

    暗号化されたスナップショットをコピーする場合は、ソースボリュームの暗号化に使用する暗号化 KMS キー を使用するためのアクセス権限を選択した IAM ロールに付与する必要があります。同様に、別の KMS キー を使用して送信先リージョンのスナップショットを暗号化する場合は、送信先 KMS キー を使用するためのアクセス権限を IAM ロールに付与する必要があります。詳細については、「」を参照してくださいステップ 4: IAM ロールに必要な KMS キー の使用を許可する (ターゲットアカウント)

  8. [コピーアクション] セクションで、アクティブ化された際にポリシーが実行する、スナップショットのコピーアクションを定義します。ポリシーは、スナップショットを最大 3 つのリージョンにコピーできます。コピー先となるリージョンごとに、個別のコピールールを指定する必要があります。追加したルールごとに以下を実行します。

    1. [名前] に、コピーアクションのわかりやすい名前を入力します。

    2. [ターゲットリージョン] で、スナップショッのをコピー先リージョンを選択します。

    3. [有効期限] では、作成したスナップショットのコピーを、ターゲットリージョンに保持する期間を指定します。

    4. スナップショットのコピーを暗号化するには、[暗号化] で、[暗号化の有効化] を選択します。ソーススナップショットが暗号化されている場合、またはアカウントで暗号化がデフォルトで有効になっている場合は、ここで暗号化を有効しなくても、スナップショットのコピーは常に暗号化されます。ソーススナップショットが暗号化されておらず、アカウントで暗号化がデフォルトで有効になっていない場合は、暗号化を有効または無効にすることができます。暗号化を有効にし、KMS キー を指定しない場合、スナップショットは、各送信先リージョンでデフォルトの暗号化 KMS キー を使用して暗号化されます。送信先のリージョンの KMS キー を指定する場合は、KMS キー へのアクセスが必要です。

  9. さらに、スナップショットのコピーアクションを追加するには、[新しいリージョンを追加] をクリックします。

  10. [Policy status after creation (作成後のポリシーの状態)] では、[Enable policy (ポリシーの有効化)] を選択すると、次のスケジュールした時刻にポリシーが実行されます。ポリシーが実行されないようにするには、[Disable policy (ポリシーの無効化)] を選択します。ここでポリシーを有効にしない場合、作成後に手動で有効にするまで、スナップショットのコピーは開始されません。

  11. [ポリシーの作成] を選択します。

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

  2. ナビゲーションペインで、[ライフサイクルマネージャー] を選択し、[ライフサイクルポリシーの作成] をクリックします。

  3. [ポリシータイプ] で、[クロスアカウントコピーイベントポリシー] を選択します。[説明] にポリシーの簡単な説明を入力します。

  4. [Cross-account copy event settings] (クロスアカウントコピーイベント設定) セクションの [Copy snapshots shared by] (共有スナップショットのコピー) に、共有スナップショットのコピー元となるソース AWS アカウントを入力します。

  5. [スナップショットの説明フィルター] に、正規表現を使用して必要なスナップショットの説明を入力します。指定したソースアカウントによって共有され、指定したフィルターに一致する説明を持つスナップショットのみがポリシーによってコピーされます。詳細については、「スナップショット説明フィルターの指定」を参照してください。

  6. [IAM role] (IAM ロール) で、スナップショットコピーアクションを実行するためのアクセス権限を持つ IAM ロールを選択します。AWS はデフォルトのロールを提供し、また、お客様はカスタム IAM ロールを作成することもできます。

    暗号化されたスナップショットをコピーする場合は、ソースボリュームの暗号化に使用する暗号化 KMS キー を使用するためのアクセス権限を選択した IAM ロールに付与する必要があります。同様に、別の KMS キー を使用して送信先リージョンのスナップショットを暗号化する場合は、送信先 KMS キー を使用するためのアクセス権限を IAM ロールに付与する必要があります。詳細については、「ステップ 4: IAM ロールに必要な KMS キー の使用を許可する (ターゲットアカウント)」を参照してください。

  7. [コピーの設定] セクションでは、ターゲットアカウント内の最大 3 つのリージョンにスナップショットをコピーするポリシーを設定できます。次の作業を行います。

    1. [名前] に、コピーアクションのわかりやすい名前を入力します。

    2. [ターゲットリージョン] で、スナップショッのをコピー先リージョンを選択します。

    3. [コピーの保持期間] では、作成後にターゲットリージョンにスナップショットコピーを保持する期間を指定します。

    4. [暗号化] では、[有効化] を選択して、ターゲットリージョンのスナップショットコピーを暗号化します。ソーススナップショットが暗号化されている場合、またはアカウントで暗号化がデフォルトで有効になっている場合は、ここで暗号化を有効にしなくても、スナップショットのコピーは常に暗号化されます。ソーススナップショットが暗号化されておらず、アカウントで暗号化がデフォルトで有効になっていない場合は、暗号化を有効または無効にすることができます。暗号化を有効にし、KMS キー を指定しない場合、スナップショットは、各送信先リージョンでデフォルトの暗号化 KMS キー を使用して暗号化されます。送信先のリージョンの KMS キー を指定する場合は、KMS キー へのアクセスが必要です。

    5. (オプション) スナップショットを別のリージョンにコピーするには、[さらにリージョンを追加] を選択し、必須フィールドに入力します。

  8. [作成後のポリシーのステータス] で、[ポリシーを有効にする] を選択して、次にスケジュールされた時刻にポリシーの実行を開始します。

  9. [Create Policy (ポリシーの作成)] を選択します。

Command line

ポリシーを作成するには、create-lifecycle-policy コマンドを使用します。クロスアカウントコピーイベントポリシーを作成するには、PolicyType で、EVENT_BASED_POLICY を指定します。

例えば、次のコマンドは、ターゲットアカウント 222222222222 にクロスアカウントコピーイベントポリシーを作成します。ポリシーは、ソースアカウント 111111111111 によって共有されるスナップショットをコピーします。ポリシーは、スナップショットを sa-east-1eu-west-2 にコピーします。sa-east-1 にコピーされたスナップショットは暗号化されず、3 日間保持されます。eu-west-2 にコピーされたスナップショットは KMS キー 8af79514-350d-4c52-bac8-8985e84171c7 を使用して暗号化され、1 か月間保持されます。このポリシーは、デフォルトの IAM ロールを使用します。

$ aws dlm create-lifecycle-policy \ --description "Copy policy" \ --state ENABLED --execution-role-arn arn:aws:iam::222222222222:role/service-role/AWSDataLifecycleManagerDefaultRole \ --policy-details file://policyDetails.json

以下は、policyDetails.json ファイルの内容を示しています。

{ "PolicyType" : "EVENT_BASED_POLICY", "EventSource" : { "Type" : "MANAGED_CWE", "Parameters": { "EventType" : "shareSnapshot", "SnapshotOwner": ["111111111111"] } }, "Actions" : [{ "Name" :"Copy Snapshot to Sao Paulo and London", "CrossRegionCopy" : [{ "Target" : "sa-east-1", "EncryptionConfiguration" : { "Encrypted" : false }, "RetainRule" : { "Interval" : 3, "IntervalUnit" : "DAYS" } }, { "Target" : "eu-west-2", "EncryptionConfiguration" : { "Encrypted" : true, "CmkArn" : "arn:aws:kms:eu-west-2:222222222222:key/8af79514-350d-4c52-bac8-8985e84171c7" }, "RetainRule" : { "Interval" : 1, "IntervalUnit" : "MONTHS" } }] }] }

成功すると、このコマンドは新しく作成されたポリシーの ID を返します。出力例を次に示します。

{ "PolicyId": "policy-9876543210abcdef0" }

ステップ 4: IAM ロールに必要な KMS キー の使用を許可する (ターゲットアカウント)

暗号化されたスナップショットをコピーする場合は、(前の手順で選択した) IAM ロールに、ソースボリュームの暗号化に使用された カスタマーマネージド型キー を使用するためのアクセス権限を付与する必要があります。

注記

暗号化されたスナップショットをコピーする場合のみ、この手順を実行してください。暗号化されていないスナップショットをコピーする場合は、この手順をスキップします。

以下のいずれかの方法を使用して、必要なポリシーを IAM ロールに追加します。

Console

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

  2. ナビゲーションペインで、[ロール] を選択します。前の手順でクロスアカウントコピーイベントポリシーを作成したときに選択した IAM ロールを検索して選択します。デフォルトのロールを使用することを選択した場合、ロールの名前は AWSDataLifecycleManagerDefaultRole になります。

  3. [インラインポリシーの追加] を選択し、次に [JSON] タブを選択します

  4. 既存のポリシーを次のように置き換え、KMS キー の ARN を指定します。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:RevokeGrant", "kms:CreateGrant", "kms:ListGrants" ], "Resource": [ "arn:aws:kms:region:source_account_id:key/shared_cmk_id", "arn:aws:kms:region:source_account_id:key/shared_cmk_id" ], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": [ "arn:aws:kms:region:source_account_id:key/shared_cmk_id", "arn:aws:kms:region:source_account_id:key/shared_cmk_id" ] } ] }
  5. ポリシーの確認を選択します。

  6. [名前] にポリシーのわかりやすい名前を入力し、[ポリシーの作成] を選択します。

Command line

お好みのテキストエディタを使用して、policyDetails.json という名前の新しい JSON ファイルを作成します。次のポリシーを追加し、ロールが使用するのにアクセス権限を必要とする KMS キー の ARN を指定します。次の例では、ポリシーは、ソースアカウント 1234abcd-12ab-34cd-56ef-1234567890ab で共有された KMS キー 111111111111 とターゲットアカウント 4567dcba-23ab-34cd-56ef-0987654321yz に存在する KMS キー 222222222222 を使用するためのアクセス権限を IAM ロールに付与します。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "kms:RevokeGrant", "kms:CreateGrant", "kms:ListGrants" ], "Resource": [ "arn:aws:kms:sa-east-1:111111111111:key/1234abcd-12ab-34cd-56ef-1234567890ab", "arn:aws:kms:eu-west-2:222222222222:key/4567dcba-23ab-34cd-56ef-0987654321yz" ], "Condition": { "Bool": { "kms:GrantIsForAWSResource": "true" } } }, { "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": [ "arn:aws:kms:sa-east-1:111111111111:key/1234abcd-12ab-34cd-56ef-1234567890ab", "arn:aws:kms:eu-west-2:222222222222:key/4567dcba-23ab-34cd-56ef-0987654321yz" ] } ] }

保存してファイルを閉じます。次に、put-role-policy コマンドを使用して、IAM ロールにポリシーを追加します。

$ aws iam put-role-policy \ --role-name AWSDataLifecycleManagerDefaultRole \ --policy-name CopyPolicy \ --policy-document file://AdminPolicy.json

スナップショット説明フィルターの指定

ターゲットアカウントでスナップショットコピーポリシーを作成する場合は、スナップショットの説明フィルターを指定する必要があります。スナップショット説明フィルターにより、ポリシーによってコピーされるスナップショットを制御できる追加のフィルターレベルを指定できます。つまり、スナップショットは、指定したソースアカウントのいずれかによって共有され、指定したフィルターに一致するスナップショットの説明がある場合にのみ、ポリシーによりコピーされます。つまり、スナップショットが指定されたコースアカウントのいずれかによって共有されているのに、指定したフィルターに一致する説明がない場合、そのスナップショットはポリシーによってコピーされません。

スナップショットフィルターの説明は、正規表現を使用して指定する必要があります。コンソールとコマンドラインを使用してクロスアカウントコピーイベントポリシーを作成する場合、このフィールドは必須です。使用できる正規表現の例を次に示します。

  • .*— このフィルターは、すべてのスナップショットの説明に一致します。この式を使用すると、ポリシーは、指定したソースアカウントの 1 つが共有しているすべてのスナップショットをコピーします。

  • Created for policy: policy-0123456789abcdef0.* このフィルターは、 の ID を持ったポリシーによって作成されたスナップショットにのみ一致します。policy-0123456789abcdef0このような式を使用すると、ポリシーは、指定したソースアカウントのいずれかによってアカウントと共有され、指定された ID を持つポリシーによって作成されたスナップショットのみをコピーします。

  • .*production.*— このフィルターは、説明のいずれかの場所に production の単語が含まれているスナップショットに一致します。この式を使用すると、ポリシーは、指定したソースアカウントのいずれかで共有され、説明に指定されたテキストを含むすべてのスナップショットをコピーします。