如何使用 DataSync 将数据传入或传出跨账户 Amazon S3 位置?
3 分钟阅读
0
我想使用 AWS DataSync 将数据传入或传出跨账户 Amazon Simple Storage Service (Amazon S3) 存储桶。
简短描述
AWS DataSync 完全支持跨账户 S3 传输。您可以在 DataSync 控制台中监控任务执行情况。
**注意:**如果您的存储桶已加密,并且使用采用客户自主管理型 AWS Key Management Service (AWS KMS) 密钥 (SSE-KMS) 的服务器端加密,则需要进行额外配置。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
在源账户中创建 IAM 角色
您的源账户需要具备两组权限才能进行跨账户传输:
- 允许用户使用 DataSync 并创建 DataSync 位置、角色和任务的用户权限。
- 允许 DataSync 将数据传输到您的目标账户存储桶的 DataSync 权限。
要向创建 IAM 角色的源账户授予用户权限,请将以下策略附加到 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", "iam:CreateRole", "iam:CreatePolicy", "iam:AttachRolePolicy", "iam:ListRoles", "s3:GetBucketLocation", "s3:ListAllMyBuckets" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "*", "Condition": { "StringEquals": { "iam:PassedToService": [ "datasync.amazonaws.com" ] } } } ] }
要在源账户中创建具有必要权限的 Datasync IAM 角色,请将以下策略附加到 IAM 角色:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetBucketLocation", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Effect": "Allow", "Resource": "arn:aws:s3:::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:::destination-bucket/*" "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } } ] }
**注意:**请将 ResourceAccount 替换为您在策略中指定的 Amazon S3 存储桶所属账户的账户 ID。
向 DataSync IAM 角色添加以下信任关系:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "datasync.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
更新目标存储桶策略
要授予对源账户中 IAM 角色的访问权限,请修改目标账户的 S3 存储桶策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "DataSyncCreateS3LocationAndTaskAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::source-account-id:role/datasync-role-name" }, "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:::destination-bucket", "arn:aws:s3:::destination-bucket/*" ] } ] }
在目标存储桶上禁用 ACL
在目标账户中,完成以下步骤:
- 打开 Amazon S3 控制台。
- 选择您的目标存储桶。
- 在 Permissions(权限)选项卡的 Object Ownership(对象所有权)下,选择 Edit(编辑)。
- 选择 ACLs disabled (recommended)(ACL 已禁用(推荐))。
- 选择 Save changes(保存更改)。
创建 DataSync 位置
在源账户中,完成以下步骤:
- 打开 DataSync 控制台。
- 在导航窗格中,展开 Data transfer(数据传输)。
- 选择 Locations(位置),然后选择 Create location(创建位置)。
- 对于 Location type(位置类型),选择 Amazon S3,然后选择 General purpose bucket(通用存储桶)。
- 对于 S3 URI,输入或选择要用于您所在位置的存储桶和前缀。
- 对于 S3 storage class when used as a destination(用作目标时的 S3 存储类),选择当 Amazon S3 作为传输目标时您希望对象使用的存储类。
- 选择您创建的自定义 IAM 角色。
- (可选)选择 Add new tag(添加新标签),为您的 Amazon S3 位置添加标签。
**注意:**最佳做法是为您的位置创建名称标签。 - 选择 Create location(创建位置)。
- 在 AWS CloudShell 或 AWS CLI 中运行以下命令,为目标存储桶创建位置:
aws datasync create-location-s3 \ --s3-bucket-arn arn:aws:s3:::destination-bucket \ --s3-config BucketAccessRoleArn=arn:aws:iam::source-account-id:role/datasync-role-name \ --region destination-bucket-region
**注意:**无法在 AWS DataSync 控制台中创建跨账户位置。
创建并运行 DataSync 任务
**注意:**对于跨区域传输,请在与目标存储桶位于同一 AWS 区域的源账户中创建任务。
完成以下步骤:
- 在您的源账户中打开 DataSync 控制台。
- 在导航窗格中,展开 Data transfer(数据传输)。
- 选择 Tasks(任务),然后选择 Create task(创建任务)。
- 如果目标账户中的存储桶与源账户中的存储桶位于不同的区域,请选择目标存储桶所在的区域。
- 在 Configure source location(配置源位置)页面上,执行以下操作。
选择 Choose an existing location(选择现有位置)。
(对于跨区域传输)在 Region(区域)下拉列表中,选择源存储桶所在的区域。
对于 Existing locations(现有位置),选择要从中传输数据的 S3 存储桶的源位置,然后选择 Next(下一步)。 - 在 Configure destination location(配置目标位置)页面上,执行以下操作。
选择 Choose an existing location(选择现有位置)。
对于 Existing locations(现有位置),选择要将数据传输到的 S3 存储桶的目标位置,然后选择 Next(下一步)。 - 在 Configure settings(配置设置)页面上,选择 Task mode(任务模式)。
**注意:**最佳做法是使用 Enhanced(增强)模式。有关详细信息,请参阅为数据传输选择任务模式。 - 输入任务的名称并配置任何其他设置,例如 Amazon CloudWatch 日志组。
- 选择 Next(下一步)。
- 在 Review(查看)页面上,查看您的设置,然后选择 Create task(创建任务)。
- 在任务的详细信息页面上,选择 Start(开始),然后选择以下选项之一:
要在不进行修改的情况下运行任务,请选择 Start with defaults(从原定设置开始)。
要在运行任务之前对其进行修改,请选择 Start with overriding options(从覆盖选项开始)。
相关信息
- 语言
- 中文 (简体)

AWS 官方已更新 6 个月前
没有评论