使用 Data Lifecycle Manager 自动化跨账户快照副本 - Amazon EBS

使用 Data Lifecycle Manager 自动化跨账户快照副本

通过自动执行跨账户快照副本,您可以将 Amazon EBS 快照复制到隔离账户中的特定区域,并使用加密密钥对这些快照进行加密。这样,您能够在账户遭到泄露时防止自己的数据丢失。

自动执行跨账户快照副本涉及两个账户:

  • 源账户 – 源账户是创建快照并与目标账户共享快照的账户。在此账户中,您必须创建 EBS 快照策略,以便按设定的时间间隔创建快照,然后与其他 AWS 账户共享这些快照。

  • 目标账户 – 目标账户是与之共享快照的目标账户,它也是创建共享快照副本的账户。在此账户中,您必须创建跨账户复制事件策略,以自动复制由一个或多个指定源账户共享的快照。

创建跨账户快照复制策略

要为跨账户快照复制准备源账户和目标账户,您需要执行以下步骤:

主题

    在源账户中,创建一个 EBS 快照策略,该策略将创建快照并与所需的目标账户共享。

    创建策略时,请确保启用跨账户共享,并指定目标 AWS 账户,用于共享快照。这些是您要与之共享快照的账户。如果您要共享加密快照,则必须授予所选目标账户使用用于加密源卷的 KMS 密钥 的权限。有关更多信息,请参阅 步骤 2:共享客户托管密钥(源账户)

    注意

    您只能共享未加密的快照或使用 客户托管密钥 加密的快照。您无法共享使用默认 EBS 加密 KMS 密钥 加密的快照。如果您共享加密快照,则还必须与目标账户共享用于加密源卷的 KMS 密钥。有关更多信息,请参阅 AWS Key Management Service 开发人员指南中的允许其他账户中的用户使用 KMS 密钥

    有关手动创建 EBS 快照策略的更多信息,请参阅 为 EBS 快照创建 Amazon Data Lifecycle Manager 自定义策略

    使用以下方法之一创建 EBS 快照策略。

    如果您要共享加密快照,则必须授予 IAM 角色和(您在上一步中选择的)目标AWS账户使用用于加密源卷的客户托管密钥的权限。

    注意

    仅在共享加密快照时执行此步骤。如果您正在共享的是未加密快照,请跳过此步骤。

    Console
    1. https://console.aws.amazon.com/kms 打开 AWS KMS 控制台。

    2. 要更改 AWS 区域,请使用页面右上角的 Region selector(区域选择器)。

    3. 在导航窗格中,选择客户托管密钥,然后选择您需要与目标账户共享的 KMS 密钥。

      记下 KMS 密钥 ARN,稍后您将用到它。

    4. 密钥政策选项卡上,向下滚动到密钥用户部分。选择添加,输入您在上一步中选择的 IAM 角色的名称,然后选择添加

    5. 密钥政策选项卡上,向下滚动到其他 AWS 账户部分。选择 Add other AWS accounts(添加其他亚马逊云科技账户),然后添加您在上一步中选择与之共享快照的所有目标 AWS 账户。

    6. 选择 Save changes(保存更改)

    Command line

    使用 get-key-policy 命令检索当前附加到 KMS 密钥 的密钥策略。

    例如,以下命令检索 ID 为 9d5e2b3d-e410-4a27-a958-19e220d83a1e 的 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

    在目标账户中,您必须创建跨账户复制事件策略,该策略将自动复制由所需源账户共享的快照。

    只有当指定的源账户之一与该账户共享快照时,此策略才会在目标账户中运行。

    使用以下方法之一创建跨账户复制事件策略。

    Console
    1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

    2. 在导航窗格中,依次选择 Elastic Block StoreLifecycle Manager,然后选择创建生命周期策略

    3. 选择策略类型屏幕上,选择跨账户复制事件策略,然后选择下一步

    4. 对于策略描述,输入策略的简短描述。

    5. 对于 Policy tags (策略标签),选择要应用于生命周期策略的标签。您可以使用这些标签对策略进行标识和分类。

    6. 事件设置部分中,定义将导致策略运行的快照共享事件。执行以下操作:

      1. 对于共享账户,请指定您想从中复制共享快照的源 AWS 账户。选择添加账户,输入 12 位 AWS 账户 ID,然后选择添加

      2. 对于按描述筛选,请使用正则表达式输入所需的快照描述。该策略仅复制由指定源账户共享且其描述与指定筛选条件匹配的快照。有关更多信息,请参阅指定快照描述筛选条件

    7. 对于 IAM 角色,请选择有权执行快照复制操作的 IAM 角色。要使用 Amazon Data Lifecycle Manager 提供的默认角色。请选择 Default role (默认角色)。或者,要使用您之前创建的自定义 IAM 角色,请选择 Choose another role (选择其他角色),然后选择要使用的角色。

      如果您要复制加密快照,您必须授予所选 IAM 角色使用用于加密源卷的加密 KMS 密钥 的权限。同样,如果您使用不同的 KMS 密钥 对目标区域中的快照进行加密,则必须授予 IAM 角色使用目标 KMS 密钥 的权限。有关更多信息,请参阅步骤 4:允许 IAM 角色使用所需的 KMS 密钥(目标账户)

    8. 复制操作部分中,定义激活策略时应执行的快照复制操作。该策略最多可以将快照复制到三个区域。您必须为每个目标区域指定单独的复制规则。对要添加的每个规则执行以下操作:

      1. 对于名称,为复制操作输入一个描述性名称。

      2. 对于目标区域,选择要将快照复制到的区域。

      3. 对于过期,请指定快照副本创建之后在目标区域中保留多长时间。

      4. 要加密快照副本,请在加密中选择启用加密。如果源快照已加密,或者预设情况下为您的账户启用了加密,则快照副本将始终加密,即使您在此处没有启用加密也一样。如果源快照未加密,并且默认情况下未为您的账户启用加密,则您可以选择启用或禁用加密。如果启用了加密但未指定 KMS 密钥,则快照在每个目标区域中都将使用默认加密 KMS 密钥 进行加密。如果您为目标区域指定 KMS 密钥,则您必须具有对 KMS 密钥 的访问权限。

    9. 要添加其他快照复制操作,请选择添加新区域

    10. 对于创建后的策略状态,选择启用策略,以在下次计划时间启动策略运行,或者选择禁用策略,以禁止策略运行。如果您现在不启用该策略,则该策略仅在创建后手动启用之后开始复制快照。

    11. 选择 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" }

    如果您要复制加密快照,则必须授予(您在上一步中选择的)IAM 角色使用用于加密源卷的 客户托管密钥 的权限。

    注意

    仅在复制加密快照时执行此步骤。如果您要复制的是未加密快照,请跳过此步骤。

    使用以下方法之一将所需策略添加到 IAM 角色。

    Console
    1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

    2. 在导航窗格中,选择角色。搜索并选择您在上一步中创建跨账户复制事件策略时选择的 IAM 角色。如果您选择使用默认角色,则该角色名为 Amazon Web Services DataLifecycleManagerDefaultRole

    3. 选择添加内联策略,然后选择 JSON 选项卡。

    4. 将现有策略替换为以下内容,然后指定用于加密源卷且源账户在步骤 2 中与您共享的 KMS 密钥的 ARN。

      注意

      如果要从多个源账户复制,则必须从每个源账户中指定相应的 KMS 密钥 ARN。

      在下面的示例中,策略授予该 IAM 角色所需的权限,以使用由源账户 111111111111 共享的 KMS 密钥 1234abcd-12ab-34cd-56ef-1234567890ab 和目标账户 222222222222 中存在的 KMS 密钥 4567dcba-23ab-34cd-56ef-0987654321yz

      提示

      为遵循最小特权原则,请不要允许对 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" ] } ] }
    5. 选择查看策略

    6. 对于名称,为策略输入描述性名称,然后选择创建策略

    Command line

    使用首选文本编辑器,创建一个名为 policyDetails.json 的新 JSON 文件。添加以下策略并指定用于加密源卷且源账户在步骤 2 中与您共享的 KMS 密钥的 ARN。

    注意

    如果要从多个源账户复制,则必须从每个源账户中指定相应的 KMS 密钥 ARN。

    在下面的示例中,策略授予该 IAM 角色所需的权限,以使用由源账户 111111111111 共享的 KMS 密钥 1234abcd-12ab-34cd-56ef-1234567890ab 和目标账户 222222222222 中存在的 KMS 密钥 4567dcba-23ab-34cd-56ef-0987654321yz

    提示

    为遵循最小特权原则,请不要允许对 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

    指定快照描述筛选条件

    在目标账户中创建快照复制策略时,必须指定快照描述筛选条件。通过快照描述筛选条件,您可指定额外的筛选级别,从而控制策略应复制哪些快照。这意味着只有当快照由指定源账户之一共享,并且其快照描述与指定筛选条件匹配时,策略才会复制该快照。换句话说,如果快照由指定源账户之一共享,但其描述不符合指定的筛选条件,则策略不会复制该快照。

    必须使用正则表达式指定快照描述筛选条件。使用控制台和命令行创建跨账户复制事件策略时,它是必填字段。下面是可以使用的示例正则表达式:

    • .* – 此筛选条件匹配所有快照描述。如果使用此表达式,该策略将复制由指定源账户之一共享的所有快照。

    • Created for policy: policy-0123456789abcdef0.* – 此筛选条件仅匹配由 ID 为 的策略创建的快照。policy-0123456789abcdef0如果您使用类似这样的表达式,则该策略仅复制由指定源账户之一与您的账户共享以及由具有指定 ID 的策略创建的快照。

    • .*production.* – 此筛选条件匹配描述中任意位置包含词语 production 的任何快照。如果使用此表达式,该策略将复制由指定源账户之一共享且描述中包含指定文本的所有快照。

    跨账户快照复制策略的注意事项

    跨账户复制事件策略时需考虑以下事项:

    • 您只能复制未加密的快照或使用 客户托管密钥 加密的快照。

    • 您可以创建跨账户复制事件策略,用于复制在 Amazon Data Lifecycle Manager 外部共享的快照。

    • 如果要加密目标账户中的快照,则为跨账户复制事件策略选择的 IAM 角色必须拥有使用所需 KMS 密钥 的权限。

    其他资源

    有关更多信息,请参阅 AWS 存储博客文章 Automating copying encrypted Amazon EBS snapshots across AWS accounts(跨 账户自动复制加密的 Amazon EBS 快照)。