

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

# 教學課程：跨 將資料從內部部署儲存傳輸到 Amazon S3 AWS 帳戶
<a name="s3-cross-account-transfer"></a>

 AWS DataSync 搭配內部部署儲存使用 時，您通常會將資料傳輸到 AWS 與 AWS 帳戶 DataSync 代理程式屬於相同的儲存服務。不過，在某些情況下，您可能需要將資料傳輸到與不同帳戶相關聯的 Amazon S3 儲存貯體。

**重要**  
只有在 Amazon S3 是 DataSync 傳輸位置之一時， AWS 帳戶 才能使用本教學課程中的方法跨 傳輸資料。

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

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

下圖說明了這種案例。

![\[資料從內部部署儲存系統透過網際網路 Direct Connect 連線移動到 的範例 DataSync 案例 AWS。資料會先傳輸到一個 AWS 帳戶 （您的來源帳戶），最後再傳輸到不同 AWS 帳戶 （您的目的地帳戶） 的 Amazon S3 儲存貯體。\]](http://docs.aws.amazon.com/zh_tw/datasync/latest/userguide/images/s3-cross-account-diagram.png)


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

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

------
#### [ User permissions ]

在您的來源帳戶中，將至少下列許可新增至 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 角色。

****  

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

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

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

****  

```
{
  "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="onprem-s3-cross-account-required-permissions-destination"></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 代理程式
<a name="s3-cross-account-deploy-agent"></a>

若要開始使用，您必須建立可從內部部署儲存系統讀取並與 DataSync 服務通訊的 DataSync 代理程式。此程序包括在內部部署儲存環境中部署 代理程式，並在來源 中啟用 代理程式 AWS 帳戶。

**注意**  
本教學中的步驟適用於您使用的任何類型的代理程式和服務端點。

**建立 DataSync 代理程式**

1. 在內部部署儲存環境中[部署 DataSync 代理程式](deploy-agents.md)。

1. [選擇客服人員用來與之通訊的服務端點](choose-service-endpoint.md) AWS。

1. 在來源帳戶中[啟用您的代理程式](activate-agent.md)。

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

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

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

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

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

**建立 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-cross-account-attach-custom-policy"></a>

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

**將許可新增至您的 IAM 角色**

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. 選擇**下一步**。為您的政策命名，然後選擇**建立政策**。

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

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

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

**更新目的地 S3 儲存貯體政策**

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-cross-account-create-iam-role-source-account)。

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

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

## 步驟 4：在您的目的地帳戶中，停用 S3 儲存貯體ACLs
<a name="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)。

**停用目的地儲存貯體ACLs**

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

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

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

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

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

## 步驟 5：在您的來源帳戶中，為您的內部部署儲存體建立 DataSync 來源位置
<a name="s3-on-prem-cross-account-create-source-location"></a>

在您的來源帳戶中，為您要從中傳輸資料的現場部署儲存系統建立 [DataSync 來源位置](working-with-locations.md)。此位置會使用[您在來源帳戶中啟用的代理](#s3-cross-account-deploy-agent)程式。

## 步驟 6：在您的來源帳戶中，為您的 S3 儲存貯體建立 DataSync 目的地位置
<a name="s3-cross-account-create-datasync-destination"></a>

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

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

由於您無法使用 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 [所需的使用者許可](#onprem-s3-cross-account-required-permissions-source)。

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

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

1. 複製下列命令：

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

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

1. `source-user-account` 以來源帳戶的 AWS 帳戶 ID 取代 。

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

1. 在 CloudShell 中執行 命令。

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

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

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

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

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

開始 DataSync 任務以傳輸資料之前，讓我們回顧一下到目前為止所做的工作：
+ 在您的來源帳戶中，您已建立 DataSync 代理程式。代理程式可以從現場部署儲存系統讀取，並與 DataSync 服務通訊。
+ 在您的來源帳戶中，您建立了 IAM 角色，允許 DataSync 將資料傳輸到目的地帳戶中的 S3 儲存貯體。
+ 在您的目的地帳戶中，您已設定 S3 儲存貯體，讓 DataSync 可以將資料傳輸到該儲存貯體。
+ 在您的來源帳戶中，您已建立用於傳輸的 DataSync 來源和目的地位置。

**建立和啟動 DataSync 任務**

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

1. 在**設定來源位置**頁面上，選擇**選擇現有位置**。選擇您要從中複製資料的來源位置 （您的內部部署儲存），然後選擇**下一步**。

1. 在**設定目的地位置**頁面上，選擇**選擇現有位置**。選擇您要將資料複製到其中的目的地位置 （目的地帳戶中的 S3 儲存貯體），然後選擇**下一步**。

1. 在**設定設定**頁面上，為任務命名。視需要設定其他設定，例如指定 Amazon CloudWatch 日誌群組。選擇**下一步**。

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

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

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

## 相關資源
<a name="s3-cross-account-create-start-datasync-task"></a>

如需您在本教學課程中所做作業的詳細資訊，請參閱下列主題：
+ [為 AWS 服務 （主控台） 建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)
+ [修改角色信任政策 （主控台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-managingrole_edit-trust-policy)
+ [使用 Amazon S3 主控台新增儲存貯體政策](https://docs.aws.amazon.com/AmazonS3/latest/userguide/add-bucket-policy.html)
+ [使用 建立 S3 位置 AWS CLI](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/datasync/create-location-s3.html)