Data Lifecycle Manager を使用してクロスアカウントのスナップショットコピーを自動化
クロスアカウントのスナップショットのコピーを自動化すると、Amazon EBS スナップショットを分離アカウントの特定のリージョンにコピーし、暗号化キーを使用してそれらのスナップショットを暗号化できます。これにより、アカウントが侵害された場合にデータの損失から保護することができます。
アカウント間でスナップショットのコピーを自動化するには、次の 2 つのアカウントが使用されます。
-
ソースアカウント — ソースアカウントは 、スナップショットを作成してターゲットアカウントと共有するアカウントです。このアカウントでは、設定した間隔でスナップショットを作成し、他の AWS アカウントと共有する EBS スナップショットポリシーを作成する必要があります。
-
ターゲットアカウント— ターゲットアカウントは 、スナップショットを共有する共有先アカウントを持つアカウントで、共有スナップショットのコピーを作成するアカウントです。このアカウントでは、指定した 1 つ以上のソースアカウントによって共有されるスナップショットを自動的にコピーするクロスアカウントコピーイベントポリシーを作成する必要があります。
クロスアカウントスナップショットコピーポリシーの作成
アカウント間でスナップショットをコピーするためにソースアカウントとターゲットアカウントを準備するには、次の手順を実行します。
ソースアカウントで EBS スナップショットポリシーを作成します。これにより、スナップショットを作成し、必要なターゲットアカウントと共有します。
ポリシーを作成する場合は、クロスアカウントでの共有を有効にし、 スナップショットを共有するターゲットの AWS アカウントを指定します。このアカウントは、スナップショットを共有するアカウントです。暗号化されたスナップショットを共有する場合は、選択したターゲットアカウントに、ソースボリュームの暗号化に使用された KMS キー を使用するためのアクセス権限を付与する必要があります。詳細については、「ステップ 2: カスタマーマネージド型キー (ソースアカウント) を共有する」を参照してください。
共有できるのは、暗号化されていないスナップショットまたはカスタマーマネージド型キーを使用して暗号化されたスナップショットだけです。デフォルトの EBS 暗号化 KMS キー で暗号化されたスナップショットを共有することはできません。暗号化されたスナップショットを共有する場合は、ソースボリュームの暗号化に使用された KMS キー も、ターゲットアカウントと共有する必要があります。詳細については、「AWS Key Management Service デベロッパーガイド」の「他のアカウントのユーザーに KMS キーの使用を許可する」を参照してください。
EBS スナップショットポリシーを作成する方法については、EBS スナップショット用の Amazon Data Lifecycle Manager カスタムポリシーを作成を参照してください。
EBS スナップショットポリシーを作成するには、次のいずれかの方法を使用します。
暗号化されたスナップショットを共有する場合は、IAM ロールと (前のステップで選択した) ターゲットの AWS アカウントに、ソースボリュームの暗号化に使用されたカスタマーマネージド型キーを使用するためのアクセス権限を付与する必要があります。
この手順は、暗号化されたスナップショットを共有する場合にのみ実行してください。暗号化されていないスナップショットを共有する場合は、この手順をスキップします。
- Console
-
-
AWS KMS コンソール (https://console.aws.amazon.com/kms) を開きます。
-
AWS リージョン を変更するには、ページの右上隅にあるリージョンセレクターを使用します。
-
ナビゲーションペインで、[カスタマーマネージド型キー] を選択してから、ターゲットアカウントと共有する必要がある KMS キーを選択します。
KMS キー の ARN を記録しておきます。これは後で必要になります。
-
[キーポリシー] タブで、[キーユーザー] セクションまで下にスクロールします。[追加] を選択し、前のステップで選択した IAM ロールの名前を入力してから、[追加] をクリックします。
-
[キーポリシー] タブで、[その他の AWS アカウント] セクションまで下にスクロールします。[別の AWS アカウントを追加] を選択し、前の手順でスナップショットの共有先として選択したターゲット AWS アカウントをすべて追加します。
-
[変更を保存] を選択します。
- 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 を追加しました。
最小権限のプリンシパルに従うには、kms:CreateGrant
へのフルアクセスを許可しないでください。代わりに、次の例に示すように、AWS のサービスによってユーザーに代わって許可が作成された場合にのみ、kms:GrantIsForAWSResource
コンディションキーを使用して、KMS キーに許可を作成できるようにします。
{
"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
ターゲットアカウントで、必要なソースアカウントで共有されるスナップショットを自動的にコピーするクロスアカウントコピーイベントポリシーを作成する必要があります。
このポリシーは、指定されたソースアカウントの 1 つがスナップショットを共有する場合にのみ、ターゲットアカウントで実行されます。
クロスアカウントコピーイベントポリシーを作成するには、次のいずれかの方法を使用します。
- Console
-
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/) を開きます。
-
ナビゲーションペインで、[Elastic Block Store]、[ライフサイクルマネージャー]、[ライフサイクルポリシーの作成] の順に選択します。
-
[ポリシータイプの選択] 画面で、[クロスアカウントコピーのイベントポリシー] を選択した上で、[次へ] をクリックします。
-
[ポリシーの説明] に、ポリシーの簡単な説明を入力します。
-
[ポリシータグ] に、ライフサイクルポリシーに適用されるタグを追加します。これらのタグは、ポリシーを識別および分類するために使用することができます。
-
[イベントの設定] セクションで、ポリシーを実行するスナップショット共有イベントを定義します。次の作業を行います。
-
[共有するアカウント] で、共有スナップショットのコピー元となる、ソース AWS アカウントを指定します。[アカウントを追加] をクリックし、12 桁の AWS アカウント ID を入力した後、[追加] をクリックします。
-
[説明でフィルタリング] に、正規表現を使用して必要なスナップショットの説明を入力します。指定したソースアカウントによって共有され、指定したフィルターに一致する説明を持つスナップショットのみが、ポリシーによってコピーされます。詳細については、を参照してくださいスナップショット説明フィルターの指定
-
[IAM ロール] で、スナップショットのコピーアクションを実行するアクセス許可を持つ IAM ロールを選択します。Amazon Data Lifecycle Manager から提供されるデフォルトのロールを使用するには、[デフォルトロール] を選択します。以前に作成したカスタム IAM ロールを使用する場合には、[別のロールを選択] をクリックした上で、使用するロールを選択します。
暗号化されたスナップショットをコピーする場合は、ソースボリュームの暗号化に使用する暗号化 KMS キー を使用するためのアクセス権限を選択した IAM ロールに付与する必要があります。同様に、別の KMS キー を使用して送信先リージョンのスナップショットを暗号化する場合は、送信先 KMS キー を使用するためのアクセス権限を IAM ロールに付与する必要があります。詳細については、を参照してくださいステップ 4: IAM ロールに必要な KMS キー の使用を許可する (ターゲットアカウント)
-
[コピーアクション] セクションで、アクティブ化された際にポリシーが実行する、スナップショットのコピーアクションを定義します。ポリシーは、スナップショットを最大 3 つのリージョンにコピーできます。送信先となるリージョンごとに、個別のコピールールを指定する必要があります。追加したルールごとに以下を実行します。
-
[名前] に、コピーアクションのわかりやすい名前を入力します。
-
[Target Region] (ターゲットリージョン) で、スナップショッのをコピー先リージョンを選択します。
-
[有効期限] では、作成したスナップショットのコピーを、ターゲットリージョンに保持する期間を指定します。
-
スナップショットのコピーを暗号化するには、[暗号化] で、[暗号化の有効化] を選択します。ソーススナップショットが暗号化されている場合、またはアカウントで暗号化がデフォルトで有効になっている場合は、ここで暗号化を有効しなくても、スナップショットのコピーは常に暗号化されます。ソーススナップショットが暗号化されておらず、アカウントで暗号化がデフォルトで有効になっていない場合は、暗号化を有効または無効にすることができます。暗号化を有効にし、KMS キー を指定しない場合、スナップショットは、各送信先リージョンでデフォルトの暗号化 KMS キー を使用して暗号化されます。送信先のリージョンの KMS キー を指定する場合は、KMS キー へのアクセスが必要です。
-
さらに、スナップショットのコピーアクションを追加するには、[新しいリージョンを追加] をクリックします。
-
[Policy status after creation (作成後のポリシーの状態)] では、[Enable policy (ポリシーの有効化)] を選択すると、次のスケジュールした時刻にポリシーが実行されます。ポリシーが実行されないようにするには、[Disable policy (ポリシーの無効化)] を選択します。ここでポリシーを有効にしない場合、作成後に手動で有効にするまで、スナップショットのコピーは開始されません。
-
[Create policy] を選択します。
- Command line
-
ポリシーを作成するには、create-lifecycle-policy コマンドを使用します。クロスアカウントコピーイベントポリシーを作成するには、PolicyType
で、EVENT_BASED_POLICY
を指定します。
例えば、次のコマンドは、ターゲットアカウント 222222222222
にクロスアカウントコピーイベントポリシーを作成します。ポリシーは、ソースアカウント 111111111111
によって共有されるスナップショットをコピーします。ポリシーは、スナップショットを sa-east-1
と eu-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"
}
暗号化されたスナップショットをコピーする場合は、(前の手順で選択した) IAM ロールに、ソースボリュームの暗号化に使用された カスタマーマネージド型キー を使用するためのアクセス権限を付与する必要があります。
暗号化されたスナップショットをコピーする場合のみ、この手順を実行してください。暗号化されていないスナップショットをコピーする場合は、この手順をスキップします。
以下のいずれかの方法を使用して、必要なポリシーを IAM ロールに追加します。
- Console
-
-
IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。
-
ナビゲーションペインで、[ロール] を選択します。前の手順でクロスアカウントコピーイベントポリシーを作成したときに選択した IAM ロールを検索して選択します。デフォルトのロールを使用することを選択した場合、ロールの名前は AWSDataLifecycleManagerDefaultRole になります。
-
[インラインポリシーの追加] を選択し、次に [JSON] タブを選択します
-
既存のポリシーを次のように置き換え、ステップ 2 でソースボリュームの暗号化に使用され、ソースアカウントによって共有された KMS キーの ARN を指定します。
複数のソースアカウントからコピーする場合は、各ソースアカウントから対応する KMS キー ARN を指定する必要があります。
次の例では、ポリシーは、ソースアカウント 111111111111
で共有された KMS キー 1234abcd-12ab-34cd-56ef-1234567890ab
とターゲットアカウント 222222222222
に存在する KMS キー 4567dcba-23ab-34cd-56ef-0987654321yz
を使用するためのアクセス権限を IAM ロールに付与します。
最小権限のプリンシパルに従うには、kms:CreateGrant
へのフルアクセスを許可しないでください。代わりに、次の例に示すように、AWS のサービスによってユーザーに代わって許可が作成された場合にのみ、kms:GrantIsForAWSResource
コンディションキーを使用して、KMS キーに許可を作成できるようにします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:RevokeGrant",
"kms:CreateGrant",
"kms:ListGrants"
],
"Resource": [
"arn:aws:kms:us-east-1:111111111111:key/1234abcd-12ab-34cd-56ef-1234567890ab
",
"arn:aws:kms:us-east-1: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:us-east-1:111111111111:key/1234abcd-12ab-34cd-56ef-1234567890ab
",
"arn:aws:kms:us-east-1:222222222222:key/4567dcba-23ab-34cd-56ef-0987654321yz
"
]
}
]
}
-
[Review policy] (ポリシーの確認) を選択します。
-
[名前] にポリシーのわかりやすい名前を入力し、[ポリシーの作成] を選択します。
- Command line
-
お好みのテキストエディタを使用して、policyDetails.json
という名前の新しい JSON ファイルを作成します。以下のポリシーを追加し、ステップ 2 でソースボリュームの暗号化に使用され、ソースアカウントによって共有された KMS キーの ARN を指定します。
複数のソースアカウントからコピーする場合は、各ソースアカウントから対応する KMS キー ARN を指定する必要があります。
次の例では、ポリシーは、ソースアカウント 111111111111
で共有された KMS キー 1234abcd-12ab-34cd-56ef-1234567890ab
とターゲットアカウント 222222222222
に存在する KMS キー 4567dcba-23ab-34cd-56ef-0987654321yz
を使用するためのアクセス権限を IAM ロールに付与します。
最小権限のプリンシパルに従うには、kms:CreateGrant
へのフルアクセスを許可しないでください。代わりに、次の例に示すように、AWS のサービスによってユーザーに代わって許可が作成された場合にのみ、kms:GrantIsForAWSResource
コンディションキーを使用して、KMS キーに許可を作成できるようにします。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"kms:RevokeGrant",
"kms:CreateGrant",
"kms:ListGrants"
],
"Resource": [
"arn:aws:kms:us-east-1:111111111111:key/1234abcd-12ab-34cd-56ef-1234567890ab
",
"arn:aws:kms:us-east-1: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:us-east-1:111111111111:key/1234abcd-12ab-34cd-56ef-1234567890ab
",
"arn:aws:kms:us-east-1: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
の単語が含まれているスナップショットに一致します。この式を使用すると、ポリシーは、指定したソースアカウントのいずれかで共有され、説明に指定されたテキストを含むすべてのスナップショットをコピーします。
クロスアカウントスナップショットコピーポリシーに関する考慮事項
以下はアカウント間のコピーイベントポリシーの考慮事項です。
-
コピーできるのは、暗号化されていないスナップショットまたは カスタマーマネージド型キー を使用して暗号化されたスナップショットだけです。
-
Amazon Data Lifecycle Manager の外部で共有されるスナップショットをコピーするクロスアカウントコピーイベントポリシーを作成できます。
-
ターゲットアカウントのスナップショットを暗号化する場合、クロスアカウントコピーイベントポリシー用に選択された IAM ロールには、必要な KMS キー を使用するためのアクセス権限が必要です。
追加リソース
詳細については、AWS ストレージブログ記事、Automating copying encrypted Amazon EBS snapshots across AWS accounts を参照してください。