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

自动执行跨账户快照副本

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

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

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

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

创建跨账户快照复制策略

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

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

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

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

Console

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

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

  3. 对于 Policy Type (策略类型),选择 EBS snapshot policy (EBS 快照策略),对于 Resource Type (资源类型),选择 Volume (卷)。

  4. 对于 Target with these tags (带有这些标签的目标),指定用于标识要从中创建快照的卷的资源标签。

  5. 对于 IAM 角色,请选择有权创建、共享、删除和描述快照以及描述卷的 IAM 角色。AWS 提供默认角色,或者您可以创建自定义 IAM 角色。

    如果您打算共享加密快照,则必须授予此 IAM 角色使用用于加密源卷的 KMS key 的权限。有关更多信息,请参阅 步骤 2:共享 customer managed key( 源账户 )

  6. 添加定义如何创建和共享快照的策略计划。计划 1 是强制要求的计划。计划 2、3、4 是可选计划。对于每个策略计划,请指定以下信息:

    • 对于 Schedule name (计划名称),输入计划的名称。

    • 对于 Frequency (频率),指定策略运行之间的间隔。您可以按每日、每周、每月或每年计划配置策略运行。或者,选择 Custom cron expression (自定义 Cron 表达式) 以指定不超过一年的间隔时间。有关更多信息,请参阅 Amazon CloudWatch Events 用户指南 中的 Cron 表达式

    • 对于 Starting at (开始于)hh:mm UTC,指定计划开始运行策略的时间。第一个快照创建操作将在指定的开始时间后一小时内开始。后续快照创建操作将在计划时间的一小时内开始。

    • 对于 Retention type (保留类型),指定如何保留快照。您可以根据其总计数或存在时间保留快照或 AMI。对于基于计数的保留,范围为 1 到 1000。在达到最大计数后,将在创建新快照时删除最早的快照或 AMI。对于基于存在时间的保留,范围是 1 天到 100 年。在每个快照或 AMI 的保留期限过期后,会将其删除。保留期应大于或等于创建间隔。

      注意

      所有计划必须具有相同的保留类型。您只能为“计划 1”指定保留类型。计划 2、3、4 会继承计划 1 的保留类型。每个计划都可以有自己的保留计数或期限。

    • 选择 Enable cross-account sharing(启用跨账户共享),然后指定要与之共享快照的目标 AWS 账户。这些是您要与之共享快照的账户。如果您要共享加密快照,则必须授予所选目标账户使用用于加密源卷的 KMS key 的权限。有关更多信息,请参阅 步骤 2:共享 customer managed key( 源账户 )

    • 要自动将共享快照取消共享,请选择 Unshare automatically (自动取消共享),然后指定何时将快照取消共享。

      如果您选择自动将共享快照取消共享,则自动取消快照共享前的持续时间不能超过策略保留其快照的期限。例如,如果策略的保留配置可将快照保留 5 天,则只能将策略配置为在最多 4 天的时间后自动取消快照共享。这适用于采用基于存在时间和基于计数的快照保留配置的策略。

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

  8. 选择创建策略

Command line

使用 create-lifecycle-policy 命令创建 EBS 快照策略。为了创建快照策略,对 PolicyType 指定 EBS_SNAPSHOT_MANAGEMENT

例如,以下命令可在源账户 111111111111 中创建快照生命周期策略。该策略创建标签键 inventory_db 的值为 alpha 的所有卷的快照。该策略包括一个计划,它每天在 UTC 15:30 创建快照,并将快照保留两天。该策略还将与目标账户 222222222222 共享快照,然后在一天后自动将其取消共享。

$ 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:共享 customer managed key( 源账户

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

注意

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

使用以下方法之一更新 KMS key 的密钥策略。

Console

  1. https://console.amazonaws.cn/kms 打开 AWS KMS 控制台。

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

  3. 在导航窗格中,选择 Customer managed key 然后选择需要与目标帐户共享的 KMS key。

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

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

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

  6. 选择保存更改

Command line

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

例如,以下命令检索 ID 为 9d5e2b3d-e410-4a27-a958-19e220d83a1e 的 KMS key 的密钥策略,并将其写入名为 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 key 的目标账户的 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 key。

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

第 3 步:创建跨账户复制事件策略(Target account (目标账户))

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

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

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

Console

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/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(复制共享快照),输入您要从中复制共享快照的源 AWS 账户。

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

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

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

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

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

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

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

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

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

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

注意

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

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

Console

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

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

  3. 选择 Add inline policy (添加内联策略),然后选择 JSON 选项卡。

  4. 将现有策略替换为以下内容,然后指定 KMS keys 的 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 keys 的 ARN。在下面的示例中,策略授予 IAM 角色所需的权限以使用由源账户 111111111111 共享的 KMS key 1234abcd-12ab-34cd-56ef-1234567890ab 和目标账户 222222222222 中存在的 KMS key 4567dcba-23ab-34cd-56ef-0987654321yz

{ "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 的任何快照。如果使用此表达式,该策略将复制由指定源账户之一共享且描述中包含指定文本的所有快照。