教程:将数据从本地存储传输到不同的 Amazon S3AWS 账户 - AWS DataSync

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

教程:将数据从本地存储传输到不同的 Amazon S3AWS 账户

AWS DataSync与本地存储一起使用时,通常将数据复制到与您的DataSync代理同AWS 账户属的AWS存储服务。但是,在某些情况下,您可能需要将数据传输到与其他账户关联的 Amazon S3 存储桶。

重要

只有当 Amazon S3 是其中一个DataSync位置时,使用本教程中的方法复制数据才有效。AWS 账户

概览

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

以下是这种场景的样子:

  • 账户 A:用于管理网络资源的账户。AWS 账户您激活DataSync代理时使用的终端节点也属于此帐户。

    注意

    本教程中的步骤适用于激活代理时使用的任何类型的终端节点

  • 账户 B:您希望将数据复制到其中的 S3 存储桶。AWS 账户

下图阐明了此方案。

数据通过互联网从本地存储系统转移到的示例DataSync场景AWS。数据首先传输到一个账户AWS 账户(账户 A),最后转移到另一个账户AWS 账户(账户 B)的 Amazon S3 存储桶。

先决条件

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

  1. 配置您的网络,以便您的本地存储系统可以连接AWS。

  2. 使用账户 A 部署和激活DataSync代理

  3. 使用账户 A 为要从中复制数据的本地存储系统创建DataSync源位置

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

步骤 1:为账户 ADataSync 中创建 IAM 角色

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

当您为存储段创建位置时,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. 在角色的详细信息页面上,选择 Permission(权限)选项卡。选择添加权限,然后选择创建内联策略

  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. 运行 命令。

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

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

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

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

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

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

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

  • 在账户 A 中部署并激活了您的DataSync代理,以便代理可以从您的自管理存储系统读取数据并与之通信AWS。

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

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

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

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

    注意

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

  2. 在 “配置源位置” 页面上,选择 “选择现有位置”。选择要从中复制数据的源位置(您的本地存储),然后选择下一步

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

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

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

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

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

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

任务完成后,您将在 S3 存储桶中看到来自本地存储的数据。现在,您可以从账户 B 访问存储桶数据。

相关资源

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