如何使用 AWS DataSync 將資料傳入或傳出跨帳戶 Amazon S3 位置?
我想使用 AWS DataSync 將資料傳入或傳出跨帳戶 Amazon Simple Storage (Amazon S3) 儲存貯體。
簡短描述
若要使用 DataSync 進行跨帳戶資料傳輸,請執行以下操作:
- 使用 AWS Command Line Interface (AWS CLI) 或 AWS SDK 在 DataSync 中建立跨帳戶 Amazon S3 位置。
- 建立 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 DataSync 建立 Amazon S3 位置中的説明建立目的地 S3 位置。
- 當您將 DataSync 與使用伺服器端加密的 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: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 任務設定為從來源中擷取資料。
相關資訊
相關內容
- 已提問 1 個月前lg...
- 已提問 6 個月前lg...
- 已提問 2 個月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 4 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 9 個月前