如何使用 AWS DataSync 將資料傳入或傳出跨帳戶 Amazon S3 位置?

上次更新日期:2022 年 4 月 26 日

我想使用 AWS DataSync 將資料傳入或傳出跨帳戶 Amazon Simple Storage (Amazon S3) 儲存貯體。

簡短描述

若要使用 DataSync 進行跨帳戶資料傳輸,請執行以下操作:

  1. 使用 AWS Command Line Interface (AWS CLI) 或 AWS SDK 在 DataSync 中建立跨帳戶 Amazon S3 位置。
  2. 建立 DataSync 任務,將資料從來源儲存貯體傳輸到目的地儲存貯體。

使用 DataSync 在不同 S3 帳户擁有的儲存貯體之間傳輸資料時,請謹記以下限制:

  • 將資料傳輸至跨帳戶目的地儲存貯體時,DataSync 未套用 bucket-owner-full-control 存取控制清單 (ACL),導致目的地儲存貯體中的物件發生擁有權問題。
  • 對於跨帳戶 S3 位置,僅支援同一區域中的跨帳戶儲存貯體。如果您使用跨帳戶和跨區域 S3 位置,則會收到 GetBucketLocation無法連接至 S3 端點錯誤。
  • 您無法使用跨帳戶傳遞角色來存取跨帳戶 S3 位置。

透過解決上述限制,您可以將目的地帳戶中的 DataSync 任務設定為從來源中擷取資料。

解決方式

執行所需的檢查

假設來源帳戶具有跨帳戶來源 S3 儲存貯體,且目的地帳戶具有目的地 S3 儲存貯體和 DataSync 任務。請執行下列檢查:

AWS Identity and Management (IAM) 使用者/角色:檢查您用於建立跨帳戶 S3 位置的 IAM 使用者/角色以及您指派給 S3 位置的 IAM 角色是否具有所需的許可

來源儲存貯體政策:確保來源儲存貯體政策允許目的地帳戶中的 IAM 使用者/角色存取儲存貯體。以下範例政策會向 IAM 使用者/角色授予對來源儲存貯體的存取權限:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::1111222233334444:role/datasync-config-role",
          "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
        ]
      },
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListBucket",
        "s3:ListBucketMultipartUploads"
      ],
      "Resource": [
        "arn:aws:s3:::example-source-bucket"
      ]
    },
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": [
          "arn:aws:iam::1111222233334444:role/datasync-config-role",
          "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
        ]
      },
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:ListMultipartUploadParts",
        "s3:PutObjectTagging",
        "s3:GetObjectTagging",
        "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::example-source-bucket/*"
      ]
    }
  ]
}

請務必替換上述政策中的下列值:

  • example-source-bucket 替換為來源儲存貯體的名稱
  • 1111222233334444 替換為目的地帳戶的帳戶 ID
  • datasync-config-role 替換為用於 DataSync 組態的 IAM 角色 (例如:在 DataSync 中建立來源 S3 位置和任務)
    注意:您也可以使用 IAM 使用者。本文將討論 IAM 角色的使用情況。
  • dataysnc-transfer-role 替換為建立來源 S3 位置時指派的 IAM 角色
    注意:DataSync 會使用此角色存取跨帳戶資料。

目的地 S3 位置:確保根據為 Amazon S3 建立位置中的説明建立目的地 S3 位置。

使用 AWS CLI 或 SDK 在 DataSync 中建立跨帳戶來源 S3 位置

注意:AWS 管理主控台不支援建立跨帳戶 S3 位置。

您可以使用以下任一方法建立跨帳戶 S3 位置:

  • 使用組態 JSON 檔案。
  • 使用 AWS CLI 命令中的選項。

使用組態 JSON 檔案

1.    使用以下參數為跨帳戶 S3 位置建立組態 JSON 檔案 input.template

{
  "Subdirectory": "",
  "S3BucketArn": "arn:aws:s3:::[Source bucket]",
  "S3StorageClass": "STANDARD",
  "S3Config": {
    "BucketAccessRoleArn": "arn:aws:iam::1111222233334444:role/datasync-transfer-role"
  }
}

2.    執行以下 AWS CLI 命令建立 S3 位置:

aws datasync create-location-s3 --cli-input-json file://input.template --region example-DataSync-Region

注意:如果您在執行 AWS CLI 命令時收到錯誤,請確保您使用的是最新版 AWS CLI

如需詳細資訊,請參閲 create-location-s3

建立 S3 位置時,您會看到以下輸出:

{
"LocationArn": "arn:aws:datasync:example-Region:1111222233334444:location/loc-0f8xxxxxxxxe4821"
}

使用 AWS CLI 命令中的選項

使用適當的選項來執行以下 AWS CLI 命令:

aws datasync create-location-s3 --s3-bucket-arn arn:aws:s3:::example-source-bucket --s3-storage-class STANDARD --s3-config BucketAccessRoleArn="arn:aws:iam::1111222233334444:role/datasync-transfer-role" --region example-DataSync-Region

請務必替換命令中的下列值:

  • example-source-bucket 替換為來源儲存貯體的名稱
  • 1111222233334444 替換為來源帳戶的帳戶 ID
  • example-DataSync-Region 替換為您在其中建立 DataSync 工作的區域。

建立資料同步工作

設定 DataSync 任務,並從 DataSync 主控台啟動任務。如需詳細資訊,請參閱建立任務

已知錯誤與解決方式

錯誤:建立 DataSync 位置 S3 時發生錯誤:InvalidRequestException:請在目前使用 DataSync 的 xxx 區域中提供一個儲存貯體

如果您收到此錯誤,請確認儲存貯體和 IAM 政策是否包含以下所需的許可:

"Action": [
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads"
]

如果您在使用跨帳戶儲存貯體時出現此錯誤,請確保儲存貯體與 DataSync 任務位於相同的區域

S3 物件擁有權問題

DataSync 不支援使用跨帳戶儲存貯體作為目的地位置。因此,您無法使用 ACL bucket-owner-full-control。如果 DataSync 任務從來源儲存貯體帳戶執行,則上傳至目的地儲存貯體帳戶的物件可能存在物件擁有權問題。若要解決此問題,如果目的地儲存貯體中沒有使用 ACL 的物件,請考慮停用目的地儲存貯體上的 ACL。如需詳細資訊,請參閱控制物件的擁有權並停用儲存貯體的 ACL。否則,最佳實務是將目的地帳戶中的 DataSync 任務設定為從來源中擷取資料。


此文章是否有幫助?


請求に関するサポートまたは技術サポートが必要ですか?