

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Data Lifecycle Manager 自动化跨账户快照副本
<a name="event-policy"></a>

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

自动执行跨账户快照副本涉及两个账户：
+ **源账户** – 源账户是创建快照并与目标账户共享快照的账户。在此账户中，您必须创建一个 EBS 快照策略，该策略以设定的时间间隔创建快照，然后与其他 Amazon 账户共享。
+ **目标账户** – 目标账户是与之共享快照的目标账户，它也是创建共享快照副本的账户。在此账户中，您必须创建跨账户复制事件策略，以自动复制由一个或多个指定源账户共享的快照。

**注意**  
源账户 EBS 快照策略和目标账户跨账户复制事件策略必须在同一 Amazon 区域创建。然后，目标账户可以根据需要将快照复制到不同的目标区域。

**Topics**
+ [创建跨账户快照复制策略](#create-cac-policy)
+ [指定快照描述筛选条件](#snapshot-descr-filters)
+ [跨账户快照复制策略的注意事项](#event-policy-considerations)
+ [其他资源](#event-additional-resources)

## 创建跨账户快照复制策略
<a name="create-cac-policy"></a>

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

**Topics**

### 步骤 1：创建 EBS 快照策略（*源账户*）
<a name="create-snapshot-policy"></a>

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

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

**注意**  
在步骤 3 中创建目标账户跨账户复制事件政策的同一 Amazon 区域创建此政策。要使跨账户快照共享正常工作，两个策略必须位于同一区域。
您只能共享未加密的快照或使用 客户托管密钥 加密的快照。您无法共享使用默认 EBS 加密 KMS 密钥 加密的快照。如果您共享加密快照，则还必须与目标账户共享用于加密源卷的 KMS 密钥。有关更多信息，请参阅 *Amazon Key Management Service 开发人员指南*中的[允许其他账户中的用户使用 KMS 密钥](https://docs.amazonaws.cn//kms/latest/developerguide/key-policy-modifying-external-accounts.html)。

有关手动创建 EBS 快照策略的更多信息，请参阅 [为 EBS 快照创建 Amazon Data Lifecycle Manager 自定义策略](snapshot-ami-policy.md)。

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

### 步骤 2：共享客户托管密钥（*源账户*）
<a name="share-cmk"></a>

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

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

------
#### [ Console ]

****

1. 在 [https://console.aws.amazon.com/km Amazon KMS](https://console.amazonaws.cn/kms) s 处打开控制台。

1. 要更改 Amazon Web Services 区域，请使用页面右上角的区域选择器。

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

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

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

1. 在**密钥政策**选项卡上，向下滚动到**其他 Amazon 账户**部分。选择 “**添加其他 Amazon 帐户**”，然后添加您在上一步中选择与之共享快照的所有目标 Amazon 帐户。

1. 选择**保存更改**。

------
#### [ Command line ]

使用[get-key-policy](https://docs.amazonaws.cn/cli/latest/reference/kms/get-key-policy.html)命令检索当前附加到 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 以及要与 ARNs之共享 KMS 密钥的目标账户的 ARN。

例如，在以下策略中，我们添加了默认 IAM 角色的 ARN 以及目标账户 `222222222222.` 的根账户的 ARN

**提示**  
为遵循最小特权原则，请不要允许对 `kms:CreateGrant` 拥有完全访问权限。相反，使用`kms:GrantIsForAWSResource`条件密钥允许用户仅在 Amazon 服务代表用户创建授权时才允许用户在 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](https://docs.amazonaws.cn/cli/latest/reference/kms/put-key-policy.html)命令将更新的密钥策略附加到 KMS 密钥。



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

------

### 第 3 步：创建跨账户复制事件策略（*目标账户*）
<a name="cac-policy"></a>

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

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

**注意**  
在与步骤 1 中创建的源账户的 EBS 快照策略相同的 Amazon 区域中创建此策略。要使跨账户快照共享正常工作，两个策略必须位于同一区域。然后，您可以根据需要配置此策略，以将快照复制到不同的目标区域。

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

------
#### [ Console ]

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.amazonaws.cn/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，依次选择 **Elastic Block Store** 和 **Lifecycle Manager**，然后选择**创建生命周期策略**。

1. 在**选择策略类型**屏幕上，选择**跨账户复制事件策略**，然后选择**下一步**。

1. 对于**策略描述**，输入策略的简短描述。

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

1. 在**事件设置**部分中，定义将导致策略运行的快照共享事件。执行以下操作：

   1. 对于**共享帐户**，请指定要从中复制共享快照的源 Amazon 帐户。选择 “**添加账户**”，输入 12 位数的 Amazon 账户 ID，然后选择 “**添加**”。

   1. 对于**按描述筛选**，请使用正则表达式输入所需的快照描述。该策略仅复制由指定源账户共享且其描述与指定筛选条件匹配的快照。有关更多信息，请参阅[指定快照描述筛选条件](#snapshot-descr-filters)。

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

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

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

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

   1. 对于**目标区域**，选择要将快照复制到的区域。

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

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

1. 要添加其他快照复制操作，请选择**添加新区域**。

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

1. 选择 **Create policy**。

------
#### [ Command line ]

使用[create-lifecycle-policy](https://docs.amazonaws.cn/cli/latest/reference/dlm/create-lifecycle-policy.html)命令创建策略。要创建跨账户复制事件策略，请为 `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"
}
```

------

### 步骤 4：允许 IAM 角色使用所需的 KMS 密钥（*目标账户*）
<a name="target_iam-role"></a>

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

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

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

------
#### [ Console ]

****

1. 使用 [https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/) 打开 IAM 控制台。

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

1. 选择**添加内联策略**，然后选择 **JSON** 选项卡。

1. 将现有策略替换为以下内容，然后指定用于加密源卷且源账户在步骤 2 中与您共享的 KMS 密钥的 ARN。
**注意**  
如果要从多个源账户复制，则必须从每个源账户中指定相应的 KMS 密钥 ARN。

   在下面的示例中，策略授予该 IAM 角色所需的权限，以使用由源账户 `111111111111` 共享的 KMS 密钥 `1234abcd-12ab-34cd-56ef-1234567890ab` 和目标账户 `222222222222` 中存在的 KMS 密钥 `4567dcba-23ab-34cd-56ef-0987654321yz`。
**提示**  
为遵循最小特权原则，请不要允许对 `kms:CreateGrant` 拥有完全访问权限。相反，使用`kms:GrantIsForAWSResource`条件密钥允许用户仅在 Amazon 服务代表用户创建授权时才允许用户在 KMS 密钥上创建授权，如以下示例所示。

------
#### [ JSON ]

****  

   ```
    {
       "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"
               ]
           }
       ]
   }
   ```

------

1. 选择**查看策略**

1. 对于**名称**，为策略输入描述性名称，然后选择**创建策略**。

------
#### [ 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` 拥有完全访问权限。相反，使用`kms:GrantIsForAWSResource`条件密钥允许用户仅在 Amazon 服务代表用户创建授权时才允许用户在 KMS 密钥上创建授权，如以下示例所示。

------
#### [ JSON ]

****  

```
 {
    "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](https://docs.amazonaws.cn/cli/latest/reference/iam/put-role-policy.html)命令将策略添加到 IAM 角色。

例如

```
$ aws iam put-role-policy \
    --role-name AWSDataLifecycleManagerDefaultRole \
    --policy-name CopyPolicy \
    --policy-document file://AdminPolicy.json
```

------

## 指定快照描述筛选条件
<a name="snapshot-descr-filters"></a>

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

必须使用正则表达式指定快照描述筛选条件。使用控制台和命令行创建跨账户复制事件策略时，它是必填字段。下面是可以使用的示例正则表达式：
+ `.*` – 此筛选条件匹配所有快照描述。如果使用此表达式，该策略将复制由指定源账户之一共享的所有快照。
+ `Created for policy: policy-0123456789abcdef0.*` – 此筛选条件仅匹配由 ID 为 的策略创建的快照。`policy-0123456789abcdef0`如果您使用类似这样的表达式，则该策略仅复制由指定源账户之一与您的账户共享以及由具有指定 ID 的策略创建的快照。
+ `.*production.*` – 此筛选条件匹配描述中任意位置包含词语 `production` 的任何快照。如果使用此表达式，该策略将复制由指定源账户之一共享且描述中包含指定文本的所有快照。

## 跨账户快照复制策略的注意事项
<a name="event-policy-considerations"></a>

跨账户复制事件策略时需考虑以下事项：
+ 源账户 EBS 快照策略和目标账户跨账户复制事件策略必须在同一 Amazon 区域创建。共享快照后，目标账户策略可以将快照复制到复制操作中指定的不同目标区域。
+ 您只能复制未加密的快照或使用 客户托管密钥 加密的快照。
+ 您可以创建跨账户复制事件策略，用于复制在 Amazon Data Lifecycle Manager 外部共享的快照。
+ 如果要加密目标账户中的快照，则为跨账户复制事件策略选择的 IAM 角色必须拥有使用所需 KMS 密钥 的权限。

## 其他资源
<a name="event-additional-resources"></a>

有关更多信息，请参阅[跨 Amazon 账户 Amazon 存储自动复制加密的 Amazon EBS 快照](https://www.amazonaws.cn/blogs/storage/automating-copying-encrypted-amazon-ebs-snapshots-across-aws-accounts/)博客。