本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Data Lifecycle Manager 自动化跨账户快照副本
通过自动复制跨账户快照,您可以将您的 Amazon EBS 快照复制到隔离账户中的特定区域,并使用加密密钥对这些快照进行加密。这样,您能够在账户遭到泄露时防止自己的数据丢失。
自动执行跨账户快照副本涉及两个账户:
创建跨账户快照复制策略
要为跨账户快照复制准备源账户和目标账户,您需要执行以下步骤:
在源账户中,创建EBS快照策略,该策略将创建快照并与所需的目标账户共享。
创建策略时,请确保启用跨账户共享,并指定要与之共享快照的目标 AWS 账户。这些是您要与之共享快照的账户。如果您要共享加密快照,则必须向选定的目标帐户授予使用用于加密源卷的KMS密钥的权限。有关更多信息,请参阅 步骤 2:共享客户托管密钥(源账户)。
您只能共享未加密的快照或使用 客户托管密钥 加密的快照。您无法共享使用默认加密KMS密钥EBS加密的快照。如果您共享加密快照,则还必须与目标账户共享用于加密源卷的密KMS钥。有关更多信息,请参阅《AWS Key Management Service 开发者指南》中的允许其他账户中的用户使用KMS密钥。
有关创建EBS快照策略的更多信息,请参阅为EBS快照创建 Amazon Data Lifecycle Manager 自定义策略。
使用以下方法之一创建EBS快照策略。
如果您要共享加密快照,则必须向该IAM角色和目标 AWS
账户(您在上一步中选择的)授予使用用于加密源卷的客户托管密钥的权限。
仅在共享加密快照时执行此步骤。如果您正在共享的是未加密快照,请跳过此步骤。
- Console
-
-
在 https://console.aws.amazon.com/km AWS KMS s 处打开控制台。
-
要更改 AWS 区域,请使用页面右上角的区域选择器。
-
在导航窗格中,选择客户托管密KMS钥,然后选择需要与目标账户共享的密钥。
记下KMS密钥ARN,稍后你会用到的。
-
在密钥政策选项卡上,向下滚动到密钥用户部分。选择 “添加”,输入您在上一步中选择的IAM角色的名称,然后选择 “添加”。
-
在密钥政策选项卡上,向下滚动到其他 AWS 账户部分。选择 “添加其他 AWS 帐户”,然后添加您在上一步中选择与之共享快照的所有目标 AWS 帐户。
-
选择 Save changes(保存更改)。
- Command line
-
使用get-key-policy命令检索当前附加到密钥的KMS密钥策略。
例如,以下命令检索 ID 为的密钥的KMS密钥策略,9d5e2b3d-e410-4a27-a958-19e220d83a1e
并将其写入名snapshotKey.json
为的文件中。
$
aws kms get-key-policy \
--policy-name default \
--key-id 9d5e2b3d-e410-4a27-a958-19e220d83a1e
\
--query Policy \
--output text > snapshotKey.json
使用首选文本编辑器打开密钥策略。添加您在创建快照策略时指定的IAM角色以及要与ARNs之共享KMS密钥的目标账户的角色。ARN
例如,在以下策略中,我们添加ARN了默认IAM角色的,以及目标账户ARN的根账户的 222222222222.
为遵循最小特权原则,请不要允许对 kms:CreateGrant
拥有完全访问权限。相反,使用kms:GrantIsForAWSResource
条件密钥允许用户仅在 AWS 服务代表用户创建授权时才允许用户对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
在目标账户中,您必须创建跨账户复制事件策略,该策略将自动复制由所需源账户共享的快照。
只有当指定的源账户之一与该账户共享快照时,此策略才会在目标账户中运行。
使用以下方法之一创建跨账户复制事件策略。
- Console
-
打开亚马逊EC2控制台,网址为https://console.aws.amazon.com/ec2/。
-
在导航窗格中,依次选择 Elastic Block Store 和 Lifecycle Manager,然后选择创建生命周期策略。
-
在选择策略类型屏幕上,选择跨账户复制事件策略,然后选择下一步。
-
对于策略描述,输入策略的简短描述。
-
对于 Policy tags (策略标签),选择要应用于生命周期策略的标签。您可以使用这些标签对策略进行标识和分类。
-
在事件设置部分中,定义将导致策略运行的快照共享事件。执行以下操作:
-
对于共享帐户,请指定要从中复制共享快照的源 AWS 帐户。选择 “添加账户”,输入 12 位数的 AWS 账户 ID,然后选择 “添加”。
-
对于按描述筛选,请使用正则表达式输入所需的快照描述。该策略仅复制由指定源账户共享且其描述与指定筛选条件匹配的快照。有关更多信息,请参阅 指定快照描述筛选条件。
-
对于IAM角色,请选择有权执行快照复制操作的IAM角色。要使用 Amazon Data Lifecycle Manager 提供的默认角色,请选择默认角色。或者,要使用您之前创建的自定义IAM角色,请选择选择其他角色,然后选择要使用的角色。
如果要复制加密快照,则必须向所选IAM角色授予使用用于加密源卷的加密KMS密钥的权限。同样,如果您使用不同的密KMS钥对目标区域中的快照进行加密,则必须向该IAM角色授予使用目标KMS密钥的权限。有关更多信息,请参阅 步骤 4:允许IAM角色使用所需的KMS密钥(目标账户)。
-
在复制操作部分中,定义激活策略时应执行的快照复制操作。该策略最多可以将快照复制到三个区域。您必须为每个目标区域指定单独的复制规则。对要添加的每个规则执行以下操作:
-
对于名称,为复制操作输入一个描述性名称。
-
对于目标区域,选择要将快照复制到的区域。
-
对于过期,请指定快照副本创建之后在目标区域中保留多长时间。
-
要加密快照副本,请在加密中选择启用加密。如果源快照已加密,或者预设情况下为您的账户启用了加密,则快照副本将始终加密,即使您在此处没有启用加密也一样。如果源快照未加密,并且默认情况下未为您的账户启用加密,则您可以选择启用或禁用加密。如果您启用了加密,但未指定KMS密钥,则会在每个目标区域使用默认加密KMS密钥对快照进行加密。如果您为目标区域指定KMS密钥,则必须有权访问该KMS密钥。
-
要添加其他快照复制操作,请选择添加新区域。
-
对于创建后的策略状态,选择启用策略,以在下次计划时间启动策略运行,或者选择禁用策略,以禁止策略运行。如果您现在不启用该策略,则该策略仅在创建后手动启用之后开始复制快照。
-
选择 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选项卡。
-
将现有策略替换为以下策略,并指定用于加密源卷的KMS密钥以及源账户在步骤 2 中与您共享的密钥。ARN
如果您要从多个源帐户复制,则必须指定每个ARN源帐户的相应KMS密钥。
在以下示例中,该策略向IAM角色授予使用KMS密钥1234abcd-12ab-34cd-56ef-1234567890ab
(由源账户111111111111
共享)和KMS密钥4567dcba-23ab-34cd-56ef-0987654321yz
(存在于目标账户中)的权限222222222222
。
为遵循最小特权原则,请不要允许对 kms:CreateGrant
拥有完全访问权限。相反,使用kms:GrantIsForAWSResource
条件密钥允许用户仅在 AWS 服务代表用户创建授权时才允许用户对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
"
]
}
]
}
-
选择查看策略
-
对于名称,为策略输入描述性名称,然后选择创建策略。
- Command line
-
使用首选的文本编辑器创建一个名为的新JSON文件policyDetails.json
。添加以下策略并指定用于加密源卷ARN的KMS密钥以及源账户在步骤 2 中与您共享的密钥。
如果您要从多个源帐户复制,则必须指定每个ARN源帐户的相应KMS密钥。
在以下示例中,该策略向IAM角色授予使用KMS密钥1234abcd-12ab-34cd-56ef-1234567890ab
(由源账户111111111111
共享)和KMS密钥4567dcba-23ab-34cd-56ef-0987654321yz
(存在于目标账户中)的权限222222222222
。
为遵循最小特权原则,请不要允许对 kms:CreateGrant
拥有完全访问权限。相反,使用kms:GrantIsForAWSResource
条件密钥允许用户仅在 AWS 服务代表用户创建授权时才允许用户对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
指定快照描述筛选条件
在目标账户中创建快照复制策略时,必须指定快照描述筛选条件。通过快照描述筛选条件,您可指定额外的筛选级别,从而控制策略应复制哪些快照。这意味着只有当快照由指定源账户之一共享,并且其快照描述与指定筛选条件匹配时,策略才会复制该快照。换句话说,如果快照由指定源账户之一共享,但其描述不符合指定的筛选条件,则策略不会复制该快照。
必须使用正则表达式指定快照描述筛选条件。使用控制台和命令行创建跨账户复制事件策略时,它是必填字段。下面是可以使用的示例正则表达式:
-
.*
– 此筛选条件匹配所有快照描述。如果使用此表达式,该策略将复制由指定源账户之一共享的所有快照。
-
Created for policy: policy-0123456789abcdef0.*
– 此筛选条件仅匹配由 ID 为 的策略创建的快照。policy-0123456789abcdef0
如果您使用类似这样的表达式,则该策略仅复制由指定源账户之一与您的账户共享以及由具有指定 ID 的策略创建的快照。
-
.*production.*
– 此筛选条件匹配描述中任意位置包含词语 production
的任何快照。如果使用此表达式,该策略将复制由指定源账户之一共享且描述中包含指定文本的所有快照。
跨账户快照复制策略的注意事项
跨账户复制事件策略时需考虑以下事项:
-
您只能复制未加密的快照或使用 客户托管密钥 加密的快照。
-
您可以创建跨账户复制事件策略,用于复制在 Amazon Data Lifecycle Manager 外部共享的快照。
-
如果要加密目标账户中的快照,则为跨账户复制事件策略选择的IAM角色必须具有使用所需KMS密钥的权限。
其他资源
有关更多信息,请参阅跨 AWS 账户 AWS 存储自动复制加密的 Amazon EBS 快照博客。