教程:将数据从 Amazon S3 传输到 Amazon S3AWS 账户 - AWS DataSync

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:将数据从 Amazon S3 传输到 Amazon S3AWS 账户

使用AWS DataSync,您可以在属于不同的 Amazon S3 存储桶之间移动数据AWS 账户。

重要

AWS 账户使用本教程中的方法复制数据仅适用于 Amazon S3。

概览

在本教程中,您将学习AWS Identity and Access Management (IAM) 和AWS Command Line Interface (AWS CLI) 如何帮助您创建DataSync任务,将数据从 Amazon S3 传输到另一个存储桶中的另一个 S3 存储桶AWS 账户。

提示

如果您的 S3 存储桶也位于不同的存储桶中,请按照本教程进行操作AWS 区域。除了一些额外的步骤外,该过程基本相同。但是请记住,默认情况下,这DataSync不支持对区域进行此类传输。

以下是这种场景的样子:

  • 账户 A:您用于管理要复制数据的 S3 存储桶。AWS 账户

  • 账户 B:您用于管理要将数据复制到其中的 S3 存储桶。AWS 账户

Transfers across accounts

下图说明了将数据从 S3 存储桶复制到另一个 S3 存储桶的场景AWS 账户。

一个示例DataSync场景,即数据从一个AWS 账户(账户 A)的 S3 存储桶,然后转移到另一个账户AWS 账户(账户 B)的 S3 存储桶。
Transfers across accounts and Regions

下图说明了将数据从 S3 存储桶复制到位于不同AWS 账户区域的另一个 S3 存储桶的场景。

一个示例DataSync场景,即数据从一个AWS 账户(账户 A)和区域的 S3 存储桶迁移到另一个AWS 账户(账户 B)和区域的 S3 存储桶中。

先决条件

在开始 IAM 工作以促进跨账户转移之前,如果您还没有这样做,请执行以下操作:

  1. 确定要复制的对象数量。使用 Amazon S3 存储镜头来计算您的存储桶中有多少对象。

    提示

    在 S3 存储段之间传输时,每个任务DataSync不能复制超过 2,500 万个对象。如果您的存储桶包含超过 2,500 万个对象,我们推荐几个选项:

  2. 使用账户 A 为要从中复制数据的 S3 存储桶创建DataSync源位置

  3. AWS CLI使用账户 A 进行设置。AWS CLI您需要在账户 B 中创建 S3 存储桶的DataSync目标位置。

步骤 1:DataSync在账户 A 中创建 IAM 角色

您需要一个 IAM 角色,以DataSync允许写入账户 B 中的 S3 存储桶

当您为存储段创建位置时,DataSync可以自动创建并代入具有访问该存储桶的正确权限的角色。由于您要跨账户转移,因此必须手动创建角色。

有关更多信息,请参阅 IAM 用户指南中的 AWS 服务(控制台)创建角色

创建 IAM 角色

以可信实体DataSync身份创建角色。

创建 IAM 角色
  1. 使用账户AWS Management Console A 登录

  2. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

  3. 在左侧导航窗格的 “访问管理” 下,选择 “角色”,然后选择 “创建角色”。

  4. “选择可信实体” 页面上,对于可信实体类型,选择AWS 服务

  5. 对于用例DataSync在下拉列表中选择并选择DataSync。选择 Next(下一步)。

  6. Add permissions(添加权限)页面上,选择 Next(下一步)。

  7. 为您的角色命名,然后选择创建角色

将自定义策略附加到 IAM 角色

IAM 角色需要一个DataSync允许写入账户 B 中的 S3 存储桶的策略。

将自定义策略附加到 IAM 角色
  1. 在 IAM 控制台的角色页面上,搜索您刚刚创建的角色并选择其名称。

  2. 在角色的详细信息页面上,选择 Permissions(权限)选项卡。选择添加权限,然后选择创建内联策略

  3. 选择 JSON 选项卡并执行以下操作:

    1. 将下面的 JSON 粘贴到策略编辑器中:

      { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetBucketLocation", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Effect": "Allow", "Resource": "arn:aws:s3:::account-b-bucket" }, { "Action": [ "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:GetObjectTagging", "s3:PutObjectTagging" ], "Effect": "Allow", "Resource": "arn:aws:s3:::account-b-bucket/*" } ] }
    2. account-b-bucket替换为账户 B 中 S3 存储桶的名称

  4. 选择Review policy(查看策略)

  5. 为您的策略命名,然后选择创建策略

步骤 2:在账户 B 中禁用 S3 存储桶的 ACL

您复制到 S3 存储桶的所有数据都必须属于账户 B。为确保账户 B 是数据的所有者,请禁用存储段的访问控制列表 (ACL)。有关更多信息,请参阅《Amazon S3 用户指南》中的控制存储桶的对象所有权和禁用 ACL

禁用 S3 存储桶的 ACL
  1. 在中AWS Management Console,切换到账户 B。

  2. 通过以下网址打开 Simple Storage Service(Amazon S3)控制台:https://console.aws.amazon.com/s3/

  3. 在左侧导航窗格中,选择

  4. 存储段列表中,选择要将数据传输到的 S3 存储桶。

  5. 在存储桶的详细信息页面上,选择权选项卡。

  6. Object Ownership(对象所有权)下方,请选择 Edit(编辑)。

  7. 如果尚未选择 ACL,请选择 ACL 已禁用(推荐)选项。

  8. 选择保存更改

步骤 3:更新账户 B 中的 S3 存储桶策略

在账户 B 中,修改 S3 存储桶策略以允许访问您为账户 ADataSync 中创建的 IAM 角色

更新后的政策(在以下说明中提供给您)包括两项主要内容:

  • 第一个委托人指定了您在步骤 1 中创建的账户 A 中的 IAM 角色。此角色DataSync允许写入账户 B 中的 S3 存储桶

  • 第二个委托人指定了账户 A 中的 IAM 角色,您使用该角色访问控制台或AWS CLI。在步骤 4 中,您将在创建 S3 存储桶的目标位置时使用此角色。

更新 S3 存储桶策略
  1. 当您仍在 S3 控制台中并使用账户 B 时,选择要将数据复制到的 S3 存储桶。

  2. 在存储桶的详细信息页面上,选择权选项卡。

  3. 存储桶策略下,选择编辑,然后执行以下操作来修改您的 S3 存储桶策略:

    1. 更新编辑器中的内容以包括以下政策声明:

      { "Version": "2008-10-17", "Statement": [ { "Sid": "DataSyncCreateS3LocationAndTaskAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-a-id:role/name-of-datasync-role" }, "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:::account-b-bucket", "arn:aws:s3:::account-b-bucket/*" ] }, { "Sid": "DataSyncCreateS3Location", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-a-id:role/name-of-your-role" }, "Action": "s3:ListBucket", "Resource": "arn:aws:s3:::account-b-bucket" } ] }
    2. account-a-id替换为账户 A 的AWS 账户号码。

    3. name-of-datasync-role替换为您在账户 ADataSync 中创建的 IAM 角色(返回步骤 1)。

    4. account-b-bucket替换为账户 B 中 S3 存储桶的名称

    5. name-of-your-role替换为您用于访问控制台的 IAM 角色或AWS CLI账户 A。

  4. 选择保存更改

步骤 4:为 S3 存储桶创建DataSync目标位置

为 S3 存储桶创建位置后,即可运行DataSync任务。但是,该DataSync主机不支持在不同的账户中创建地点。必须先使用创建位置,AWS CLI然后才能运行任务。

使用 CLI 创建DataSync地点
  1. 打开 终端。

  2. 确保您的 CLI 配置文件配置为使用账户 A。

  3. 复制以下命令:

    aws datasync create-location-s3 \ --s3-bucket-arn arn:aws:s3:::account-b-bucket \ --s3-config '{"BucketAccessRoleArn":"arn:aws:iam::account-a-id:role/name-of-datasync-role"}'
  4. account-b-bucket替换为账户 B 中 S3 存储桶的名称

  5. account-a-id替换为账户 A 的AWS 账户号码。

  6. name-of-datasync-role替换为您在账户 ADataSync 中创建的 IAM 角色(返回步骤 1)。

  7. 如果账户 B 中的存储桶与账户 A 中的存储桶位于不同的区域,请在命令末尾添加--region选项以指定账户 B 存储桶所在的区域。例如,--region us-west-1

  8. 运行 命令。

    如果该命令返回与以下DataSync位置相似的位置 ARN,则表示您成功创建了位置:

    { "LocationArn": "arn:aws:datasync:us-east-2:123456789012:location/loc-abcdef01234567890" }
  9. 在中切换回账户 AAWS Management Console。

  10. 通过 https://console.aws.amazon.com/datasync/ 打开DataSync主机。

  11. 在左侧导航窗格中,选择位置

    您可以看到刚刚使用 CLI 创建的账户 B 中的 S3 存储桶的位置。

步骤 5:创建并启动DataSync任务

在移动数据之前,让我们回顾一下你到目前为止所做的事情:

  • 在账户 A 中创建了一个 IAM 角色,以便DataSync可以将数据写入账户 B 中的 S3 存储桶。

  • 在账户 B 中配置您的 S3 存储桶以确保您的DataSync任务正常运行。

  • 在账户 A 中创建了您的DataSync来源和目的地地点。

创建和启动DataSync任务
  1. 在账户 A 中仍使用DataSync控制台时,展开左侧导航窗格中的 “数据传输”,然后选择 “任务和创建任务”。

    注意

    您必须使用在步骤 3 中的 S3 存储桶策略中为账户 A 指定的 IAM 角色登录控制台。

  2. 如果账户 B 中的存储段与账户 A 中的存储段位于不同的区域,请在导航窗格中选择账户 B 存储段的区域。

    您必须从目标位置的区域(在本例中为账户 B 存储桶)启动DataSync任务,以避免连接错误。

  3. 在 “配置源位置” 页面上,选择 “选择现有位置”。

  4. 要跨区域转移,请选择 Account A 存储桶所在的区域。

  5. 选择要从中复制数据的源位置(账户 A 中的 S3 存储桶),然后选择下一步

  6. 配置目标位置页面上,选择选择现有位置。选择要将数据复制到的目标位置(账户 B 中的 S3 存储桶),然后选择下一步

  7. 配置设置页面上,为任务命名。根据需要配置其他设置,例如指定 AmazonCloudWatch 日志组。选择下一步

  8. 在 “查看” 页面上,查看您的设置并选择 “创建任务”。

  9. 在任务的详细信息页面上,选择 Start(开始),然后选择以下选项之一:

    • 要在不修改的情况下运行任务,请选择 “以默认值启动”。

    • 要在运行任务之前对其进行修改,请选择 “使用替代选项开始”

任务完成后,检查账户 B 中的 S3 存储桶。您应该会看到账户 A 存储桶中的数据。

相关资源

有关您在本教程中执行的操作的更多信息,请参阅以下主题: