如何使用 AWS DataSync 将数据传输到跨账户 Amazon Simple Storage Service (Amazon S3) 位置或从中传出数据?
我想使用 AWS DataSync 将数据传输到跨账户 Amazon Simple Storage Service (Amazon S3) 存储桶或从中传出数据。
简短描述
要使用 DataSync 进行跨账户数据传输,请执行以下操作:
- 使用 AWS Command Line Interface (AWS CLI) 或 AWS 软件开发工具包在 DataSync 中创建跨账户 Simple Storage Service (Amazon S3) 位置。
- 创建将数据从源存储桶传输到目标存储桶的 DataSync 任务。
使用 DataSync 在不同 S3 账户拥有的存储桶之间传输数据时,请记住以下限制:
- 当向跨账户目标存储桶传输数据时,DataSync 不会应用 bucket-owner-full-control 访问控制列表(ACL)。这会导致目标存储桶中的对象所有权问题。
- 对于跨账户 S3 位置,仅支持同一区域中的跨账户存储桶。如果您尝试使用跨账户和跨区域 S3 位置,则会收到 GetBucketLocation 或 Unable to connect to S3 endpoint(无法连接到 S3 端点)错误。因此,如果任务是在源账户中创建的,则任务必须在与目标存储桶相同的区域中创建。如果任务是在目标账户中创建的,则任务必须在与源存储桶相同的区域中创建。
- 您无法使用跨账户通行证角色访问跨账户 S3 位置。
您可以绕过上述限制,在目标账户中配置 DataSync 任务以从源中提取数据。
解决方法
执行必需的检查
假设源账户具有跨账户源 S3 存储桶,目标账户具有目标 S3 存储桶和 DataSync 任务。执行以下检查:
**AWS 身份和管理 (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 配置(例如,在 DataSync 中创建源 S3 位置以及任务)的 IAM 角色
**注意:**您也可以使用 IAM 用户。本文将考虑使用 IAM 角色的情况。 - dataysnc-transfer-role,其中包含在创建源 S3 位置时分配的 IAM 角色
**注意:**DataSync 使用此角色访问跨账户数据。
目标 S3 位置:
- 确保根据为 AWS DataSync 创建 Amazon S3 位置中的说明创建目标 S3 位置。
- 当您将 DataSync 与使用服务器端加密的 S3 存储桶一起使用时,请按照使用服务器端加密访问 S3 存储桶中的说明进行操作。
使用 AWS CLI 或软件开发工具包在 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 任务,然后从 DataSync 控制台开启任务。有关更多信息,请参阅启动 AWS DataSync 任务。
已知错误和解决方法
Error: error creating DataSync Location S3: InvalidRequestException: Please provide a bucket in the xxx region where DataSync is currently used(错误:创建 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 Simple Storage Service (Amazon S3) 存储桶之间迁移数据
相关内容
- AWS 官方已更新 3 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 3 年前
- AWS 官方已更新 8 个月前