使用 AWS re:Post 即表示您同意 AWS re:Post 使用條款

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

2 分的閱讀內容
0

我想使用 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) 使用者/角色:**檢查下列 IAM 使用者或角色是否具有必要的許可

  • 您用來建立跨帳戶 S3 位置的使用者或角色
  • 您指派給 S3 位置的角色

**來源儲存貯體政策:**確保來源儲存貯體政策允許目的地帳戶中的 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 位置:

使用 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:123456789012:location/loc-0f8xxxxxxxxe4821"
}

請注意 123456789012 來源帳戶的帳戶 ID。

使用 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 替換為來源儲存貯體的名稱
  • example-DataSync-Region 替換為您在其中建立 DataSync 工作的區域。

建立資料同步工作

設定 DataSync 任務,並從 DataSync 主控台啟動任務。如需詳細資訊,請參閱啟動 AWS 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 任務設定為從來源中擷取資料。


相關資訊

如何使用 AWS DataSync 在 Amazon S3 儲存貯體之間移轉資料

AWS 官方
AWS 官方已更新 2 年前