

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Data Lifecycle Manager 自動化跨帳戶快照複本
<a name="event-policy"></a>

自動化跨帳戶快照複本可讓您將 Amazon EBS 快照複製到隔離帳戶中的特定區域，並使用加密金鑰加密那些快照。這可讓您在帳戶遭到入侵時保護資料免於遺失。

自動化跨帳戶快照複本包含兩個帳戶：
+ **來源帳戶**：來源帳戶是建立快照並與目標帳戶共用快照的帳戶。在此帳戶中，您必須建立 EBS 快照政策，以設定間隔建立快照，然後與其他 AWS 帳戶共用快照。
+ **目標帳戶**：目標帳戶是與目的地帳戶共用快照的帳戶，也是建立共用快照複本的帳戶。在此帳戶中，您必須建立跨帳戶複本事件政策，該政策會自動複製由一或多個指定來源帳戶共用的快照。

**注意**  
來源帳戶 EBS 快照政策和目標帳戶跨帳戶複製事件政策都必須在相同的 AWS 區域中建立。然後，目標帳戶可以視需要將快照複製到不同的目的地區域。

**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 快照政策，該政策將會建立快照並與必要的目標帳戶共用這些快照。

當您建立政策時，請確定您啟用跨帳戶共用，並指定要與其共用快照的目標 AWS 帳戶。這些是共用快照的帳戶。若要共享加密的快照，則必須為選取的目標帳戶授予許可，才能使用在加密來源磁碟區時所用的 KMS 金鑰。如需詳細資訊，請參閱[步驟 2：共享 受客戶管理的金鑰 (*來源帳戶*)](#share-cmk)。

**注意**  
在您要在步驟 3 中建立目標帳戶跨帳戶複製事件政策的相同 AWS 區域中建立此政策。兩個政策都必須位於相同的區域，跨帳戶快照共用才能正常運作。
您只能共享未加密或使用 受客戶管理的金鑰 加密的快照。您無法共享透過預設 EBS 加密 KMS 金鑰 加密的快照。如果您共享加密的快照，則您也必須與目標帳戶共享在加密來源磁碟區時所用的 KMS 金鑰。如需詳細資訊，請參閱 *AWS Key Management Service 開發人員指南*中的[允許其他帳戶中的使用者使用 KMS 金鑰](https://docs.aws.amazon.com//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 角色和目標 AWS 帳戶 (您在上一個步驟中的選取項) 授予許可，才能使用在加密來源磁碟區時所用的客戶受管金鑰。

**注意**  
只有在共用加密快照時才執行此步驟。如果您共用的是未加密的快照，請略過此步驟。

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

****

1. 在 https：//[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) 開啟 AWS KMS 主控台。

1. 若要變更 AWS 區域，請使用頁面右上角的區域選擇器。

1. 在導覽窗格中，選取 **Customer managed keys** (客戶受管金鑰)，然後選取您需要與目標帳戶共用的 KMS 金鑰。

   記下 KMS 金鑰 ARN，稍後您會用到這個資訊。

1. 在 **Key policy (金鑰政策)** 索引標籤上，向下捲動至 **Key users (金鑰使用者)** 區段。選取 **Add (新增)**，輸入您在上一個步驟中選取的 IAM 角色名稱，然後選取 **Add (新增)**。

1. 在 **Key policy (金鑰政策)** 索引標籤上，向下捲動至**其他 AWS 帳戶**區段。選擇**新增其他 AWS 帳戶**，然後新增您在上一個步驟中選擇與之共用快照的所有目標 AWS 帳戶。

1. 選擇**儲存變更**。

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

使用 [get-key-policy](https://docs.aws.amazon.com/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，以及要共享 KMS 金鑰 的目標帳戶 ARN。

例如，在下列政策中，我們新增了預設 IAM 角色的 ARN，以及目標帳戶 (`222222222222.`) 的根帳戶 ARN

**提示**  
若要遵循最低權限原則人，請勿允許 `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](https://docs.aws.amazon.com/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 快照政策相同的 AWS 區域中建立此政策。兩個政策都必須位於相同的區域，跨帳戶快照共用才能正常運作。然後，您可以設定此政策，視需要將快照複製到不同的目的地區域。

使用下列其中一種方法來建立跨帳戶複本事件政策。

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

1. 在 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 開啟 Amazon EC2 主控台。

1. 在導覽窗格中，選擇 **Elastic Block Store**、**Lifecycle Manager (生命週期管理員)**，然後選擇 **Create lifecycle policy (建立生命週期政策)**。

1. 在 **Select policy type** (選取政策類型) 畫面中，選取 **Cross-account copy event policy** (跨帳戶複製事件政策)，然後選取 **Next** (下一步)。

1. 對於 **Policy description** (政策描述)，輸入政策的簡短描述。

1. 對於 **Policy tags** (政策標籤)，新增標籤以套用至生命週期政策。可以使用這些標籤來識別和分類您的政策。

1. 在 **Event settings** (事件設定) 區段中，定義將導致政策執行的快照共用事件。請執行下列操作：

   1. 針對**共用帳戶**，指定您要從中複製共用快照的來源 AWS 帳戶。選擇**新增帳戶**，輸入 12 位數 AWS 的帳戶 ID，然後選擇**新增**。

   1. 對於 **Filter by description** (依描述進行篩選)，請使用常規運算式輸入所需的快照描述。此政策只會複製由指定來源帳戶共用且其描述符合指定之篩選條件的快照。如需詳細資訊，請參閱 [指定快照描述篩選條件](#snapshot-descr-filters)。

1. 對於 **IAM role** (IAM 角色)，請選擇具有許可能夠執行快照複本動作的 IAM 角色。若要使用 Amazon Data Lifecycle Manager 提供的預設角色，請選擇 **Default role** (預設角色)。或者，若要使用您先前建立的自訂 IAM 角色，請選取 **Choose another role** (選取另一個角色)，然後選取要使用的角色。

   若要複製加密的快照，則必須為選取的 IAM 角色授予許可，才能使用在加密來源磁碟區所用的加密 KMS 金鑰。同樣地，如果您使用不同的 KMS 金鑰 加密目的地區域中的快照，則必須為 IAM 角色授予許可才能使用目的地 KMS 金鑰。如需詳細資訊，請參閱 [步驟 4：允許 IAM 角色使用所需的 KMS 金鑰 (*目標帳戶*)](#target_iam-role)。

1. 在 **Copy action** (複製動作) 區段中，定義在啟動時政策應執行的快照複製動作。政策最多可將快照複製到三個區域。您必須為每個目的地區域指定單獨的複製規則。對於您新增的每個規則，執行下列動作：

   1. 針對 **Name (名稱)**，輸入複製動作的描述性名稱。

   1. 對於 **Target Region (目標區域)**，選取要複製快照的「區域」。

   1. 對於 **Expire** (過期)，指定在建立後可在目標區域中保留快照複本的時間長度。

   1. 若要加密快照複本，對於 **Encryption** (加密)，請選取 **Enable encryption** (啟用加密)。如果來源快照已加密，或者您的帳戶預設為啟用加密，即使您在此處沒有啟用加密，快照複本一律會加密。如果來源快照未加密，且您的帳戶預設未啟用加密，您可以選擇啟用或停用加密。如果您啟用加密，但未指定 KMS 金鑰，則會使用每個目的地區域中預設加密 KMS 金鑰 來加密快照。如果您為目的地區域指定 KMS 金鑰，則必須具有 KMS 金鑰 的存取權。

1. 若要新增其他快照複製動作，請選擇 **Add new Regions** (新增區域)。

1. 對於 **Policy status after creation (建立後的政策狀態)**，選擇 **Enable policy (啟用政策)** 以在下一個排程時間開始政策執行，或選擇 **Disable policy (停用政策)** 以防止政策執行。如果您現在不啟用政策，它將不會開始複製快照，直到您在建立後手動啟用它。

1. 選擇 **Create policy** (建立政策)。

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

使用 [create-lifecycle-policy](https://docs.aws.amazon.com/cli/latest/reference/dlm/create-lifecycle-policy.html) 命令建立政策。若要建立跨帳戶複本事件政策，請在 `PolicyType` 中指定 `EVENT_BASED_POLICY`。

例如，下列命令會在目標帳戶 (`222222222222`) 中建立跨帳戶複本事件政策。此政策會複製來源帳戶 (`111111111111`) 共用的快照。此政策會將快照複製到 `sa-east-1` 和 `eu-west-2`。複製到 `sa-east-1` 的快照是未加密的，且保留時間為 3 天。系統會使用 KMS 金鑰`eu-west-2` 對複製到 `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.aws.amazon.com/iam/) 中開啟 IAM 主控台。

1. 在導覽窗格中，選取 **Roles (角色)**。搜尋並選取您在上一個步驟中建立跨帳戶複本事件政策時所選取的 IAM 角色。如果您選擇使用預設角色，則該角色會命名為 **AWSDataLifecycleManagerDefaultRole**。

1. 選取 **Add inline policy (新增內嵌政策)**，然後選取 **JSON** 索引標籤。

1. 將現有政策取代為以下政策，並指定用於加密來源磁碟區的 KMS 金鑰的 ARN，此金鑰由步驟 2 中的來源帳戶與您共享。
**注意**  
如果正在從多個來源帳戶複製，則必須從每個來源帳戶指定相應的 KMS 金鑰 ARN。

   在下列範例中，該政策會為 IAM 角色授予使用 KMS 金鑰 `1234abcd-12ab-34cd-56ef-1234567890ab` (由來源帳戶 `111111111111` 共享) 以及 KMS 金鑰 `4567dcba-23ab-34cd-56ef-0987654321yz` (存在於目標帳戶 `222222222222` 中) 的許可。
**提示**  
若要遵循最低權限原則人，請勿允許 `kms:CreateGrant` 的完整存取。反之，使用 `kms:GrantIsForAWSResource`條件金鑰來允許使用者只在由 AWS 服務代使用者建立授予時，才在 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. 選擇 **Review policy (檢閱政策)**

1. 在 **Name (名稱)** 中，輸入政策的描述性名稱，然後選擇 **Create policy (建立政策)**。

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

使用您偏好的文字編輯器，建立名為 `policyDetails.json` 的新 JSON 檔案。新增以下政策並指定用於加密來源磁碟區的 KMS 金鑰的 ARN，該金鑰由步驟 2 中的來源帳戶與您共享。

**注意**  
如果正在從多個來源帳戶複製，則必須從每個來源帳戶指定相應的 KMS 金鑰 ARN。

在下列範例中，該政策會為 IAM 角色授予使用 KMS 金鑰 `1234abcd-12ab-34cd-56ef-1234567890ab` (由來源帳戶 `111111111111` 共享) 以及 KMS 金鑰 `4567dcba-23ab-34cd-56ef-0987654321yz` (存在於目標帳戶 `222222222222` 中) 的許可。

**提示**  
若要遵循最低權限原則人，請勿允許 `kms:CreateGrant` 的完整存取。反之，使用 `kms:GrantIsForAWSResource`條件金鑰來允許使用者只在由 AWS 服務代使用者建立授予時，才在 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.aws.amazon.com/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 快照政策和目標帳戶跨帳戶複製事件政策必須在相同的區域中建立 AWS 。共用快照後，目標帳戶政策可以將快照複製到複製動作中指定的不同目的地區域。
+ 您只能複製未加密或使用 受客戶管理的金鑰 加密的快照。
+ 您可以建立跨帳戶複製事件政策，此政策會複製在 Amazon Data Lifecycle Manager 外部共用的快照。
+ 如果您要加密目標帳戶中的快照，則為跨帳戶複本事件政策選取的 IAM 角色必須具有使用所需 KMS 金鑰 的許可。

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

如需詳細資訊，請參閱[自動化跨 AWS 帳戶儲存體複製加密的 Amazon EBS 快照](https://aws.amazon.com/blogs/storage/automating-copying-encrypted-amazon-ebs-snapshots-across-aws-accounts/) AWS 部落格。