自动执行跨账户快照副本 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

自动执行跨账户快照副本

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

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

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

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

创建跨账户快照复制策略

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

第 1 步:创建 EBS 快照策略(Source account (源账户))

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

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

有关手动创建 EBS 快照策略的更多信息,请参阅 自动化快照生命周期

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

步骤 2:共享 客户托管密钥( 源账户

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

注意

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

Console

  1. 在 Amazon KMShttps://console.aws.amazon.com/kms 打开 控制台。

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

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

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

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

  5. Key policy(密钥策略)选项卡上,向下滚动到 Other Amazon accounts(其他 Amazon 账户)部分。选择 Add other Amazon accounts(添加其他 Amazon 账户),然后添加您在上一步中选择与之共享快照的所有目标 Amazon 账户。

  6. 选择保存更改

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

{ "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 步:创建跨账户复制事件策略(Target account (目标账户))

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

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

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

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

  2. 在导航窗格中,依次选择 Elastic Block StoreLifecycle Manager (生命周期管理器),然后选择 Create lifecycle policy (创建生命周期策略)。

  3. Select policy type (选择策略类型) 页面,选择 Cross-account copy event policy (跨账户复制事件策略),然后选择 Next (下一步)

  4. 对于 Policy Description (策略描述),输入策略的简短描述。

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

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

    1. 对于 Sharing accounts (共享账户),指定您想从中复制共享快照的源 Amazon 账户。选择 Add account (添加账户),输入 12 位 Amazon 账户 ID,然后选择 Add (添加)

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

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

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

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

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

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

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

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

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

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

  11. 选择 Create policy

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

  2. 在导航窗格中,选择 Lifecycle Manager (生命周期管理器),然后选择 Create Lifecycle Policy (创建生命周期策略)。

  3. 对于 Policy Type (策略类型),选择 Cross-account copy event policy (跨账户复制事件策略)。对于 Description (描述),输入策略的简短描述。

  4. Cross-account copy event settings(跨账户复制事件设置)部分中,对于 Copy snapshots shared by(复制共享快照),输入您要从中复制共享快照的源 Amazon 账户。

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

  6. 对于 IAM 角色,请选择有权执行快照复制操作的 IAM 角色。Amazon 提供默认角色,或者您可以创建自定义 IAM 角色。

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

  7. Copy settings (复制设置) 部分,您可以将策略配置为将快照复制到目标账户中的最多三个区域。执行以下操作:

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

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

    3. 对于 Retain copy for (保留副本),指定快照副本创建之后在目标区域中保留多长时间。

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

    5. (可选)要将快照复制到其他区域,请选择 Add additional region (添加其他区域),然后填写必填字段。

  8. 对于 Policy status after creation (创建后的策略状态),请选择 Enable (启用) 策略以在下一个计划的时间启动策略运行。

  9. 选择创建策略

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 密钥(Target account (目标账户)

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

注意

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

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

Console

  1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

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

  3. 选择 Add inline policy (添加内联策略),然后选择 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. 对于 Name (名称),为策略输入描述性名称,然后选择 Create policy (创建策略)。

Command line

使用首选文本编辑器,创建一个名为 policyDetails.json 的新 JSON 文件。添加以下策略并指定角色需要权限才能使用的 KMS 密钥 的 ARN。在下面的示例中,策略授予 IAM 角色所需的权限以使用由源账户 1234abcd-12ab-34cd-56ef-1234567890ab 共享的 KMS 密钥 111111111111 和目标账户 4567dcba-23ab-34cd-56ef-0987654321yz 中存在的 KMS 密钥 222222222222

{ "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

指定快照描述筛选条件

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

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

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

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

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