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

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

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

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

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

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

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

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

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

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

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

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

Console

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

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

  3. [ポリシータイプ] で [EBS スナップショットポリシー] を選択し、[リソースタイプ] で [ボリューム] をクリックします。

  4. [これらのタグを持つターゲット] で、スナップショットの作成元となるボリュームを特定するリソースタグを指定します。

  5. [IAM ロール] では、スナップショットを作成、共有、削除、記述し、ボリュームを記述するアクセス許可のある IAM ロールを選択します。AWS にはデフォルトのロールが用意されていますが、カスタム IAM ロールを作成することもできます。

    暗号化されたスナップショットを共有する場合は、ソースボリュームの暗号化に使用される CMK を使うアクセス許可をこの IAM ロールに付与する必要があります。詳細については、「手順 2: カスタマー管理 CMK ( ソースアカウント ) を共有する」を参照してください。

  6. スナップショットの作成方法および共有方法を定義するポリシースケジュールを追加します。スケジュール 1 は必須です。スケジュール 2、3、および 4 はオプションです。ポリシースケジュールごとに、次の情報を指定します。

    • [スケジュール名] に、スケジュールの名前を入力します。

    • [頻度] で、ポリシーの実行間隔を指定します。ポリシーの実行は、日次、週次、月次、年次のいずれかのスケジュールで設定できます。または、[カスタム cron 式] をクリックし、最長 1 年の間隔を指定します。詳細については、Amazon CloudWatch Events ユーザーガイドの「Cron 式」を参照してください。

    • [開始時刻: hh:mm UTC] では、ポリシー実行の開始予定時刻を特定します。最初のスナップショット作成オペレーションは、指定された開始時刻から 1 時間以内に開始されます。その後に続くスナップショット作成オペレーションは、スケジュールされた時刻の 1 時間以内に開始されます。

    • [保持タイプ] では、スナップショットの保持方法を指定します。スナップショットまたは AMI は、総数または期間に基づいて保持できます。カウントベースの保持の場合、指定できる範囲は 1~1000 です。この最大数に達すると、新しいスナップショットまたは AMI の作成時に最も古いスナップショットが削除されます。保存期間に基づく保持の場合、保存時間の範囲は 1~100 年です。各スナップショットまたは AMI の保持期間が終了すると、スナップショットは削除されます。保持期間は、作成間隔以上でなければなりません。

      注記

      すべてのスケジュールは、同じ保持タイプである必要があります。保持タイプを指定できるのは、スケジュール 1 のみです。スケジュール 2、3、4 は、スケジュール 1 から保持タイプを継承します。各スケジュールには、独自の保持回数または期間を設定できます。

    • [クロスアカウント共有を有効にする] を選択してから、スナップショットを有効化するターゲット AWS アカウントを指定します。このアカウントは、スナップショットを共有するアカウントです。暗号化されたスナップショットを共有する場合は、選択したターゲットアカウントに、ソースボリュームの暗号化に使用された CMK を使用するアクセス許可を付与する必要があります。詳細については、「手順 2: カスタマー管理 CMK ( ソースアカウント ) を共有する」を参照してください。

    • 共有スナップショットを自動的に共有解除するには、[自動的に共有解除] を選択してから、スナップショットをいつ共有解除するかを指定します。

      共有スナップショットの自動共有解除を選択した場合、スナップショットを自動的に共有解除するまでの期間は、ポリシーがスナップショットを保持する期間より長くすることはできません。例えば、ポリシーの保存設定でスナップショットが 5 日間保持される場合、共有スナップショットの共有を自動的に解除するようにポリシーを設定できるのは、最大 4 日間です。これは、期間ベースおよび数値ベースのスナップショット保持設定を持つポリシーに適用されます。

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

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

Command line

ライフサイクルポリシーを作成するには、create-lifecycle-policy コマンドを使用します。スナップショットポリシーを作成するには、PolicyType で、EBS_SNAPSHOT_MANAGEMENT を指定します。

例えば、次のコマンドは、ソースアカウントにスナップショットライフサイクルポリシーを作成します111111111111。ポリシーにより、値が alphainventory_db のタグキーを持つすべてのボリュームのスナップショットが作成されます。ポリシーには、毎日 15:30 UTC にスナップショットを作成し、そのスナップショットを 2 日間保持するスケジュールが 1 つ含まれています。また、このポリシーは、ターゲットアカウント 222222222222 とスナップショットを共有し、1 日後に自動的に共有解除します。

$ aws dlm create-lifecycle-policy --description "Sharing Policy" --state ENABLED --execution-role-arn arn:aws:iam::111111111111:role/AWSDataLifecycleManagerDefaultRole --policy-details file://policyDetails.json

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

{ "PolicyType": "EBS_SNAPSHOT_MANAGEMENT", "ResourceTypes": [ "VOLUME" ], "TargetTags": [{ "Key": "inventory_db", "Value": "alpha" }], "Schedules": [{ "Name": "Daily Snapshots", "CreateRule": { "Interval": 24, "IntervalUnit": "HOURS", "Times": [ "15:30" ] }, "RetainRule": { "Interval": 2, "IntervalUnit": "DAYS" }, "ShareRules": [{ "TargetAccounts": ["222222222222"], "UnshareInterval": 1, "UnshareIntervalUnit": "DAYS" }], "CopyTags": false } ]}

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

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

手順 2: カスタマー管理 CMK ( ソースアカウント ) を共有する

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

注記

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

CMK のキーポリシーを更新するには、次のいずれかの方法を使用します。

Console

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

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

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

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

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

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

  6. [Save changes] (変更を保存) をクリックします。

Command line

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

例えば、次のコマンドは、9d5e2b3d-e410-4a27-a958-19e220d83a1e の ID を持つ CMK のキーポリシーを取得し、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 と、CMK を共有するターゲットアカウントの 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 コマンドを使用して、更新されたキーポリシーを CMK にアタッチします。

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

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

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

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

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

Console

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

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

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

  4. [クロスアカウントコピーイベント設定] セクションの [共有スナップショットのコピー] に、共有スナップショットのコピー元となるソース AWS アカウントを入力します。

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

  6. [IAM ロール] で、スナップショットコピーアクションを実行するアクセス許可を持つ IAM ロールを選択します。AWS にはデフォルトのロールが用意されていますが、カスタム IAM ロールを作成することもできます。

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

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

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

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

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

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

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

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

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

Command line

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

例えば、次のコマンドは、ターゲットアカウント 222222222222 にクロスアカウントコピーイベントポリシーを作成します。ポリシーは、ソースアカウント 111111111111 によって共有されるスナップショットをコピーします。ポリシーは、スナップショットを sa-east-1eu-west-2 にコピーします。sa-east-1 にコピーされたスナップショットは暗号化されず、3 日間保持されます。eu-west-2 にコピーされたスナップショットは CMK 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 ロールに必要な CMK の使用を許可する (ターゲットアカウント)

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

注記

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

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

Console

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

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

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

  4. 既存のポリシーを次のように置き換え、CMK の 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 ファイルを作成します。次のポリシーを追加し、ロールが使用するのにアクセス許可を必要とする CMK の ARN を指定します。次の例では、ポリシーは、ソースアカウント 111111111111 で共有された CMK 1234abcd-12ab-34cd-56ef-1234567890abとターゲットアカウント 222222222222 に存在する CMK 4567dcba-23ab-34cd-56ef-0987654321yz を使用するアクセス許可を 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.*— このフィルターは、policy-0123456789abcdef0 の ID を持ったポリシーによって作成されたスナップショットにのみ一致します。このような式を使用すると、ポリシーは、指定したソースアカウントのいずれかによってアカウントと共有され、指定された ID を持つポリシーによって作成されたスナップショットのみをコピーします。

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