

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

# 教學課程：跨 Amazon S3 儲存貯體之間傳輸資料 AWS 帳戶
<a name="tutorial_s3-s3-cross-account-transfer"></a>

使用 AWS DataSync，您可以在屬於不同 的 Amazon S3 儲存貯體之間傳輸資料 AWS 帳戶。

**重要**  
使用本教學課程中 AWS 帳戶 的方法跨 傳輸資料，僅適用於 Amazon S3。此外，本教學課程可協助您在不同 S3 儲存貯體之間傳輸資料 AWS 區域。

## 概觀
<a name="s3-s3-cross-account-overview"></a>

在 之間傳輸資料並不常見 AWS 帳戶，特別是如果您有獨立的團隊管理組織的資源。以下是使用 DataSync 進行跨帳戶傳輸的外觀：
+ **來源帳戶**： AWS 帳戶 用於管理您需要從中傳輸資料的 S3 儲存貯體的 。
+ **目的地帳戶**： AWS 帳戶 用於管理您需要傳輸資料的 S3 儲存貯體的 。

------
#### [ Transfers across accounts ]

下圖說明您將資料從 S3 儲存貯體傳輸到另一個位於不同 的 S3 儲存貯體的情況 AWS 帳戶。

![資料從一個 AWS 帳戶 （您的來源帳戶） 中的 S3 儲存貯體移動到不同 AWS 帳戶 （您的目的地帳戶） 中的 S3 儲存貯體之前的範例 DataSync 案例。](http://docs.aws.amazon.com/zh_tw/datasync/latest/userguide/images/s3-s3-cross-account-same-region-diagram.png)


------
#### [ Transfers across accounts and Regions ]

下圖說明您將資料從 S3 儲存貯體傳輸到不同 AWS 帳戶 和 區域中另一個 S3 儲存貯體的情況。

![資料從一個 AWS 帳戶 （您的來源帳戶） 和區域中的 S3 儲存貯體移動到不同 AWS 帳戶 （您的目的地帳戶） 和區域中的 S3 儲存貯體之前的範例 DataSync 案例。](http://docs.aws.amazon.com/zh_tw/datasync/latest/userguide/images/s3-s3-cross-account-diff-region-diagram.png)


------

## 先決條件：必要的來源帳戶許可
<a name="s3-s3-cross-account-required-permissions-source-account"></a>

對於您的來源 AWS 帳戶，有兩組許可可以考慮這種跨帳戶轉移：
+ 允許使用者使用 DataSync *的使用者許可* （可能是您或您的儲存管理員）。這些許可可讓您建立 DataSync 位置和任務。
+ *允許 DataSync 將資料傳輸至目的地帳戶儲存貯體的 DataSync 服務許可*。 DataSync 

### 來源帳戶的使用者許可
<a name="s3-s3-cross-account-required-permissions-source-account-user"></a>

在您的來源帳戶中，將至少下列許可新增至 IAM 角色，以建立 DataSync 位置和任務。如需如何將許可新增至角色的資訊，請參閱[建立](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html)[或修改 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage_modify.html)IAM 角色。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "SourceUserRolePermissions",
            "Effect": "Allow",
            "Action": [
                "datasync:CreateLocationS3",
                "datasync:CreateTask",
                "datasync:DescribeLocation*",
                "datasync:DescribeTaskExecution",
                "datasync:ListLocations",
                "datasync:ListTaskExecutions",
                "datasync:DescribeTask",
                "datasync:CancelTaskExecution",
                "datasync:ListTasks",
                "datasync:StartTaskExecution",
                "s3:GetBucketLocation",
                "s3:ListAllMyBuckets"
            ],
            "Resource": "*"
        },
        {
            "Sid": "IAMPermissions",
            "Effect": "Allow",
            "Action": [
                "iam:CreateRole",
                "iam:ListRoles",
                "iam:CreatePolicy"
            ],
            "Resource": "arn:aws:iam::111122223333:role/DataSync-*"
        },
        {
            "Sid": "IAMAttachRolePermissions",
            "Effect": "Allow",
            "Action": [
               "iam:AttachRolePolicy"
            ],
            "Resource": "arn:aws:iam::111122223333:role/DataSync-*",
            "Condition": {
               "ArnLike": {
                 "iam:PolicyARN": [
                    "arn:aws:iam::111122223333:policy/DataSync-*",
                    "arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess",
                    "arn:aws:iam::aws:policy/service-role/AWSDataSyncFullAccess"
                 ]
               }
            }
        },
        {
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": "*",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": [
                        "datasync.amazonaws.com"
                    ]
                }
            }
        }
    ]
}
```

------

**提示**  
若要設定您的*使用者許可*，請考慮使用 [AWSDataSyncFullAccess](security-iam-awsmanpol.md#security-iam-awsmanpol-awsdatasyncfullaccess)。這是 AWS 受管政策，可讓使用者完整存取 DataSync 並盡可能減少對其相依性的存取。

### 來源帳戶的 DataSync 服務許可
<a name="s3-s3-cross-account-required-permissions-source-account-service"></a>

DataSync 服務需要來源帳戶中的下列許可，才能將資料傳輸至目的地帳戶儲存貯體。

在本教學稍後課程中，您會在為 DataSync [建立 IAM 角色](#s3-s3-cross-account-create-iam-role-source-account)時新增這些許可。您也可以在[目的地儲存貯體政策和](#s3-s3-cross-account-update-s3-policy-destination-account)[建立 DataSync 目的地位置](#s3-s3-cross-account-create-locations)時指定此角色 (`{{source-datasync-role}}`)。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::{{amzn-s3-demo-destination-bucket}}"
    },
    {
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:ListMultipartUploadParts",
        "s3:PutObject",
        "s3:GetObjectTagging",
        "s3:PutObjectTagging"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::{{amzn-s3-demo-destination-bucket}}/*"
    }
  ]
}
```

------

## 先決條件：必要的目的地帳戶許可
<a name="s3-s3-cross-account-required-permissions-dest-account"></a>

在您的目的地帳戶中，您的*使用者許可*必須允許您更新目的地儲存貯體的政策，並停用其存取控制清單 ACLs)。如需這些特定許可的詳細資訊，請參閱 [https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)[https://docs.aws.amazon.com/AmazonS3/latest/userguide/](https://docs.aws.amazon.com/AmazonS3/latest/userguide/)。

## 步驟 1：在您的來源帳戶中，建立目的地儲存貯體存取的 DataSync IAM 角色
<a name="s3-s3-cross-account-create-iam-role-source-account"></a>

在來源中 AWS 帳戶，您需要一個 IAM 角色，授予 DataSync 將資料傳輸到目的地帳戶儲存貯體的許可。

由於您要跨帳戶轉移，因此您必須手動建立角色。（在相同帳戶中轉移時，DataSync 可以在主控台中為您建立此角色。)

### 建立 DataSync IAM 角色
<a name="s3-s3-cross-account-create-iam-role"></a>

使用 DataSync 做為信任的實體來建立 IAM 角色。

1.  AWS 管理主控台 使用您的來源帳戶登入 。

1. 前往 [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/) 開啟 IAM 主控台。

1. 在左側導覽窗格的**存取管理**下，選擇**角色**，然後選擇**建立角色**。

1. 在**選取信任的實體**頁面上，針對**信任的實體類型**，選擇 **AWS 服務**。

1. 針對**使用案例**，在下拉式清單中選擇 **DataSync**，然後選取 **DataSync**。選擇**下一步**。

1. 在 **Add permissions** (新增許可) 頁面上，選擇 **Next** (下一步)。

1. 為您的角色命名，然後選擇**建立角色**。

如需詳細資訊，請參閱《*IAM 使用者指南*》中的[為 AWS 服務 （主控台） 建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)。

### 將許可新增至 DataSync IAM 角色
<a name="s3-s3-cross-account-attach-custom-policy"></a>

您剛建立的 IAM 角色需要許可，允許 DataSync 將資料傳輸到目的地帳戶中的 S3 儲存貯體。

1. 在 ****IAM 主控台的角色頁面上，搜尋您剛建立的角色，然後選擇其名稱。

1. 在角色的詳細資訊頁面上，選擇**許可**索引標籤。選擇**新增許可**，然後選擇**建立內嵌政策**。

1. 選擇 **JSON** 索引標籤並執行下列動作：

   1. 將下列 JSON 貼到政策編輯器中：
**注意**  
的值`aws:ResourceAccount`應該是擁有政策中指定 Amazon S3 儲存貯體的帳戶 ID。

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

****  

      ```
      {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Action": [
                   "s3:GetBucketLocation",
                   "s3:ListBucket",
                   "s3:ListBucketMultipartUploads"
               ],
               "Effect": "Allow",
               "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket",
               "Condition": {
                   "StringEquals": {
                    "aws:ResourceAccount": "123456789012"
                   }
               }
           },
           {
               "Action": [
                   "s3:AbortMultipartUpload",
                   "s3:DeleteObject",
                   "s3:GetObject",
                   "s3:GetObjectTagging",
                   "s3:GetObjectVersion",
                   "s3:GetObjectVersionTagging",
                   "s3:ListMultipartUploadParts",
                   "s3:PutObject",
                   "s3:PutObjectTagging"
                 ],
               "Effect": "Allow",
               "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*",
               "Condition": {
                   "StringEquals": {
                       "aws:ResourceAccount": "123456789012"
                   }
               }
           }
       ]
      }
      ```

------

   1. 將 的每個執行個體取代`{{amzn-s3-demo-destination-bucket}}`為目的地帳戶中 S3 儲存貯體的名稱。

1. 選擇**下一步**。為您的政策命名，然後選擇**建立政策**。

## 步驟 2：在您的目的地帳戶中，更新您的 S3 儲存貯體政策
<a name="s3-s3-cross-account-update-s3-policy-destination-account"></a>

在目的地帳戶中，修改目的地 S3 儲存貯體政策，以包含您在來源帳戶中建立的 [DataSync IAM 角色](#s3-s3-cross-account-create-iam-role-source-account)。

**開始之前**：請確定您擁有[目的地帳戶所需的許可](#s3-s3-cross-account-required-permissions-dest-account)。

### 更新您的目的地 S3 儲存貯體政策
<a name="s3-s3-cross-account-update-s3-policy-destination-account-how-to"></a>

1. 在 中 AWS 管理主控台，切換到目的地帳戶。

1. 開啟位於 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 的 Amazon S3 主控台。

1. 在左側導覽窗格中，選擇 **Buckets** (儲存貯體)。

1. 在**儲存貯**體清單中，選擇您要傳輸資料的 S3 儲存貯體。

1. 在儲存貯體的詳細資訊頁面上，選擇**許可**索引標籤。

1. 在**儲存貯體政策**下，選擇**編輯**並執行下列動作來修改 S3 儲存貯體政策：

   1. 更新編輯器中的內容，以包含下列政策陳述式：

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Sid": "DataSyncCreateS3LocationAndTaskAccess",
            "Effect": "Allow",
            "Principal": {
            "AWS": "arn:aws:iam::{{111122223333}}:role/{{source-datasync-role}}"
            },
            "Action": [
              "s3:GetBucketLocation",
              "s3:ListBucket",
              "s3:ListBucketMultipartUploads",
              "s3:AbortMultipartUpload",
              "s3:DeleteObject",
              "s3:GetObject",
              "s3:ListMultipartUploadParts",
              "s3:PutObject",
              "s3:GetObjectTagging",
              "s3:PutObjectTagging"
            ],
            "Resource": [
              "arn:aws:s3:::{{amzn-s3-demo-destination-bucket}}",
              "arn:aws:s3:::{{amzn-s3-demo-destination-bucket}}/*"
            ]
          }
        ]
      }
      ```

------

   1. `{{source-account}}` 使用來源帳戶的 AWS 帳戶 ID 取代 的每個執行個體。

   1. `{{source-datasync-role}}` 將 取代[為您在來源帳戶中為 DataSync 建立的 IAM 角色](#s3-s3-cross-account-create-iam-role-source-account)。

   1. 將 的每個執行個體取代`{{amzn-s3-demo-destination-bucket}}`為目的地帳戶中 S3 儲存貯體的名稱。

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

## 步驟 3：在您的目的地帳戶中，停用 S3 儲存貯體ACLs
<a name="s3-s3-cross-account-disable-acls-destination-account"></a>

您傳輸至 S3 儲存貯體的所有資料都必須屬於您的目的地帳戶。為了確保此帳戶擁有資料，請停用儲存貯體的存取控制清單 (ACLs)。如需詳細資訊，請參閱《*Simple Storage Service (Amazon S3) 使用者指南*》中的[控制物件的所有權並停用儲存貯體的 ACL](https://docs.aws.amazon.com/AmazonS3/latest/userguide/about-object-ownership.html)。

**開始之前**：請確定您擁有[目的地帳戶所需的許可](#s3-s3-cross-account-required-permissions-dest-account)。

### 停用目的地 S3 儲存貯ACLs
<a name="s3-s3-cross-account-disable-acls-destination-account-how-to"></a>

1. 在仍使用目的地帳戶登入 S3 主控台時，請選擇您要傳輸資料的 S3 儲存貯體。

1. 在儲存貯體的詳細資訊頁面上，選擇**許可**索引標籤。

1. 在 **Object Ownership** (物件擁有權) 下，選擇 **Edit** (編輯)。

1. 如果尚未選取，請選擇**停用 （建議） ACLs **選項。

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

## 步驟 4：在您的來源帳戶中，建立 DataSync 位置
<a name="s3-s3-cross-account-create-locations"></a>

在您的來源帳戶中，為您的來源和目的地 S3 儲存貯體建立 DataSync 位置。

**開始之前**：請確定您擁有[來源帳戶所需的許可](#s3-s3-cross-account-required-permissions-source-account)。

### 建立 DataSync 來源位置
<a name="s3-s3-cross-account-create-source-location"></a>
+ 在您的來源帳戶中，為您要從中傳輸資料的 S3 儲存貯體建立[位置](create-s3-location.md#create-s3-location-how-to)。

### 建立 DataSync 目的地位置
<a name="s3-s3-cross-account-create-datasync-destination"></a>

仍在來源帳戶中時，請為您要傳輸資料的 S3 儲存貯體建立位置。

由於您無法使用 DataSync 主控台界面建立跨帳戶位置，因此這些指示要求您執行`create-location-s3`命令來建立目的地位置。我們建議您使用直接從主控台啟動的 AWS CloudShell瀏覽器型預先驗證 Shell 來執行 命令。CloudShell 可讓您執行 之類的 AWS CLI 命令，`create-location-s3`而無需下載或安裝命令列工具。

**注意**  
若要使用 CloudShell 以外的命令列工具完成下列步驟，請確定您的[AWS CLI 設定檔](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)使用相同的 IAM 角色，其中包含在來源帳戶中使用 DataSync [所需的使用者許可](#s3-s3-cross-account-required-permissions-source-account)。

**使用 CloudShell 建立 DataSync 目的地位置**

1. 仍在來源帳戶中時，請執行下列其中一項操作，從主控台啟動 CloudShell：
   + 從主控台的瀏覽列上選擇 CloudShell 圖示。該圖示位於搜尋方塊的右側。
   + 使用主控台瀏覽列上的搜尋方塊來搜尋 **CloudShell**，然後選擇 **CloudShell** 選項。

1. 複製下列`create-location-s3`命令：

   ```
   aws datasync create-location-s3 \
     --s3-bucket-arn arn:aws:s3:::{{amzn-s3-demo-destination-bucket}} \
     --region {{amzn-s3-demo-destination-bucket-region}} \
     --s3-config '{
       "BucketAccessRoleArn":"arn:aws:iam::{{source-account-id}}:role/{{source-datasync-role}}"
     }'
   ```

1. `{{amzn-s3-demo-destination-bucket}}` 將 取代為您目的地帳戶中 S3 儲存貯體的名稱。

1. 如果您的目的地儲存貯體與來源儲存貯體位於不同的區域，`{{amzn-s3-demo-destination-bucket-region}}`請將 取代為目的地儲存貯體所在的區域 （例如 `{{us-east-2}}`)。如果您的儲存貯體位於相同區域，請移除此選項。

1. `{{source-account-id}}` 以來源 AWS 帳戶 ID 取代 。

1. `{{source-datasync-role}}` 將 取代為您在來源帳戶中建立的 [DataSync IAM 角色](#s3-s3-cross-account-create-iam-role-source-account)。

1. 在 CloudShell 中執行 命令。

   如果命令傳回類似這樣的 DataSync 位置 ARN，您已成功建立位置：

   ```
   {
     "LocationArn": "arn:aws:datasync:us-east-2:123456789012:location/loc-abcdef01234567890"
   }
   ```

1. 在左側導覽窗格中，展開**資料傳輸**，然後選擇**位置**。

1. 如果您已在不同區域中建立位置，請在導覽窗格中選擇該區域。

從來源帳戶，您可以看到您剛為目的地帳戶儲存貯體建立的 S3 位置。

## 步驟 5：在您的來源帳戶中，建立並啟動 DataSync 任務
<a name="s3-s3-cross-account-create-start-datasync-task"></a>

開始 DataSync 任務以傳輸資料之前，讓我們回顧一下到目前為止所做的工作：
+ 在您的來源帳戶中，您建立了 IAM 角色，允許 DataSync 將資料傳輸到目的地帳戶中的 S3 儲存貯體。
+ 在您的目的地帳戶中，您已設定 S3 儲存貯體，讓 DataSync 可以將資料傳輸到該儲存貯體。
+ 在您的來源帳戶中，您已建立用於傳輸的 DataSync 來源和目的地位置。

### 建立和啟動 DataSync 任務
<a name="s3-s3-cross-account-create-start-datasync-task-how-to"></a>

1. 在來源帳戶中仍使用 DataSync 主控台時，請在左側導覽窗格中展開**資料傳輸**，然後選擇**任務**和**建立任務**。

1. 如果目的地帳戶中的儲存貯體與來源帳戶中的儲存貯體位於不同的區域，請在頂端導覽窗格中選擇目的地儲存貯體的區域。
**重要**  
若要避免網路連線錯誤，您必須在與目的地位置相同的區域中建立 DataSync 任務。

1. 在**設定來源位置**頁面上，執行下列動作：

   1. 選取**選擇現有位置**。

   1. （對於跨區域的傳輸） 在**區域**下拉式清單中，選擇來源儲存貯體所在的區域。

   1. 針對**現有位置**，選擇您要從中傳輸資料的 S3 儲存貯體來源位置，然後選擇**下一步**。

1. 在**設定目的地位置**頁面上，執行下列動作：

   1. 選取**選擇現有位置**。

   1. 針對**現有位置**，選擇您要傳輸資料的 S3 儲存貯體目的地位置，然後選擇**下一步**。

1. 在**設定設定**頁面上，選擇**任務模式**。
**提示**  
建議使用**增強**型模式。如需詳細資訊，請參閱[為您的資料傳輸選擇任務模式](choosing-task-mode.md)。

1. 為任務命名並設定其他設定，例如指定 Amazon CloudWatch 日誌群組。選擇**下一步**。

1. 在**檢閱**頁面上，檢閱您的設定，然後選擇**建立任務**。

1. 在任務的詳細資訊頁面上，選擇**開始**，然後選擇下列其中一項：
   + 若要在不修改的情況下執行任務，請選擇**從預設值開始**。
   + 若要在執行任務之前修改任務，請選擇**從覆寫選項開始**。

任務完成後，請檢查目的地帳戶中的 S3 儲存貯體。您應該會看到從來源帳戶儲存貯體移動的資料。

## 疑難排解
<a name="s3-s3-cross-account-troubleshooting"></a>

如果您遇到嘗試完成跨帳戶轉移的問題，請參閱下列資訊。

**連線錯誤**  
在具有基本模式任務的不同 AWS 帳戶 和 區域中的 S3 儲存貯體之間傳輸時，您可能會在啟動 DataSync 任務時收到網路連線錯誤。若要解決此問題，請使用增強型模式任務。或者，在與目的地位置相同的區域中建立基本模式任務，並嘗試執行該任務。

## 相關：使用伺服器端加密與 S3 儲存貯體進行跨帳戶傳輸
<a name="s3-s3-cross-account-create-start-datasync-task"></a>

如果您嘗試使用伺服器端加密對 S3 儲存貯體進行此傳輸，請參閱[AWS 儲存部落格](https://aws.amazon.com/blogs/storage/transfer-customer-managed-sse-kms-encrypted-objects-across-aws-accounts-and-regions-using-aws-datasync/)以取得說明。