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

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

教程:将数据从本地存储传输到 Amazon S3 AWS 账户

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

重要

只有当 Amazon S3 是传输位置之一时,才可以使用本教程中的方法进行数据 DataSync 传输。 AWS 账户

概览

需要在不同组织之间传输数据的情况并不少见 AWS 账户,尤其是在您有单独的团队管理组织资源的情况下。以下是使用跨账户转账的 DataSync 样子:

  • 源账户: AWS 账户 用于管理网络资源。这是您激活 DataSync代理时使用的帐户。

  • 目标账户: AWS 账户 用于管理需要向其传输数据的 S3 存储桶。

下图阐明了此类方案。

数据通过互联网 AWS Direct Connect 连接从本地存储系统移动到的示例 DataSync 场景 AWS。数据首先被传输到一个账户 AWS 账户 (您的源账户),然后最后将其存入另一个 AWS 账户 (您的目标账户)中的 Amazon S3 存储桶。

先决条件:所需的源账户权限

对于您的来源 AWS 账户,这种跨账户转账需要考虑两组权限:

  • 允许@@ 用户使用的用户权限 DataSync(可能是您或您的存储管理员)。这些权限允许您创建 DataSync 位置和任务。

  • DataSync 允许将数据传输 DataSync 到目标账户存储桶的@@ 服务权限

User permissions

在您的源账户中,至少向用于创建 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" ] } } } ] }
提示

要设置您的用户权限,请考虑使用AWSDataSyncFullAccess。这是一个 AWS 托管策略,为用户提供对其依赖项的完全访问权限 DataSync 和最少访问权限。

DataSync service permissions

该 DataSync 服务需要您的源账户中的以下权限才能将数据传输到目标账户存储桶。

在本教程的后面部分,您将在为创建 IAM 角色时添加这些权限 DataSync。您还可以在目标存储桶策略和创建 DataSync 目标位置时指定此角色 (source-datasync-role)。

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetBucketLocation", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket" }, { "Action": [ "s3:AbortMultipartUpload", "s3:DeleteObject", "s3:GetObject", "s3:ListMultipartUploadParts", "s3:PutObject", "s3:GetObjectTagging", "s3:PutObjectTagging" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" } ] }

先决条件:所需的目标账户权限

在您的目标账户中,您的用户权限必须允许您更新目标存储桶的策略并禁用其访问控制列表(ACLs)。有关这些特定权限的更多信息,请参阅 Amazon S3 用户指南

第 1 步:在您的源账户中,创建 DataSync 代理

首先,您必须创建一个可以从本地存储系统读取数据并与 DataSync 服务通信的 DataSync 代理。此过程包括在您的本地存储环境中部署代理以及在源 AWS 账户中激活代理。

注意

本教程中的步骤适用于您使用的任何类型的代理和服务端点。

步骤 2:在您的源账户中,创建用于访问目标存储桶 DataSync 的 IAM 角色

在您的源账户中,您需要一个 IAM 角色来授予向目标账户存储桶传输数据的权限。 DataSync

由于您要跨账户转账,因此必须手动创建角色。 (使用同一个账户进行转账时,DataSync可以在控制台中为你创建此角色。)

创建 I DataSync AM 角色

创建以 DataSync 作为可信实体的 IAM 角色。

创建 IAM 角色
  1. 使用您的源账户登录。 AWS Management Console

  2. 使用 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

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

  4. 选择可信实体页面中,为可信实体类型选择 AWS 服务

  5. 对于 “用例”,DataSync在下拉列表中进行选择,然后选择DataSync。选择下一步

  6. 添加权限页面上,选择下一步

  7. 输入角色名称,然后选择创建角色

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

向 DataSync IAM 角色添加权限

您刚刚创建的 IAM 角色需要允许将数据传输 DataSync 到目标账户中的 S3 存储桶的权限。

为您的 IAM 角色添加权限
  1. 在 IAM 控制台的角色页面上,搜索您刚刚创建的角色并选择其名称。

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

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

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

      注意

      的值aws:ResourceAccount应为拥有策略中指定的 Amazon S3 存储桶的账户 ID。

      { "Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetBucketLocation", "s3:ListBucket", "s3:ListBucketMultipartUploads" ], "Effect": "Allow", "Resource": "arn:aws:s3:::amzn-s3-demo-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:::amzn-s3-demo-destination-bucket/*" "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } } ] }
    2. amzn-s3-demo-destination-bucket 的每个实例替换为目标账户中 S3 存储桶的名称。

  4. 选择下一步。为您的策略输入名称,然后选择创建策略

第 3 步:在您的目标账户中,更新 S3 存储桶策略

在您的目标账户中,修改目标 S3 存储桶策略以包含您在源账户中创建的 DataSync IAM 角色

开始之前:请确保您拥有目标账户所需的权限

更新目标 S3 存储桶策略
  1. 在中 AWS Management Console,切换到您的目标账户。

  2. 打开 Amazon S3 控制台,网址为 https://console.aws.amazon.com/s3/

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

  4. 存储桶列表中,选择要向其传输数据的 S3 存储桶。

  5. 在存储桶的详情页面上,选择权限选项卡。

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

    1. 更新编辑器中的内容,以包含以下策略声明:

      { "Version": "2008-10-17", "Statement": [ { "Sid": "DataSyncCreateS3LocationAndTaskAccess", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::source-account:role/source-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:::amzn-s3-demo-destination-bucket", "arn:aws:s3:::amzn-s3-demo-destination-bucket/*" ] } ] }
    2. source-account 的每个实例替换为您源账户的 AWS 账户 ID。

    3. source-datasync-role替换为您在源账户 DataSync 中为其创建的 IAM 角色

    4. amzn-s3-demo-destination-bucket 的每个实例替换为目标账户中 S3 存储桶的名称。

  7. 选择保存更改

步骤 4:在您的目标账户中, ACLs 对您的 S3 存储桶禁用

您复制到 S3 存储桶的所有数据都属于您的目标账户,这一点至关重要。为确保该账户拥有数据,请禁用存储桶的访问控制列表 (ACLs)。有关更多信息,请参阅 Amazon S3 用户指南中的控制对象所有权和禁用 ACLs 存储桶

为目标存储桶禁用 ACLs
  1. 仍使用目标账户登录 S3 控制台时,请选择要向其传输数据的 S3 存储桶。

  2. 在存储桶的详情页面上,选择权限选项卡。

  3. 对象所有权下方,请选择编辑

  4. 如果尚未选中,请选择ACLs 禁用(推荐)选项。

  5. 选择保存更改

第 5 步:在您的源账户中,为您的本地存储创建 DataSync 源位置

在您的源帐户中,为要从中传输数据的本地存储系统创建DataSync 源位置。此位置使用您在源账户中激活的代理

步骤 6:在您的源账户中,为您的 S3 存储桶创建 DataSync 目标位置

仍然是在源账户中,为要向其传输数据的 S3 存储桶创建位置。

开始之前:请确保您拥有源账户所需的权限

由于您无法使用 DataSync 控制台界面创建跨账户营业地点,因此这些说明要求您运行create-location-s3命令来创建目标营业地点。我们建议使用直接从控制台启动的基于浏览器 AWS CloudShell、经过预先验证的 shell 来运行该命令。 CloudShell 允许你在create-location-s3不下载或安装 AWS CLI 命令行工具的情况下运行命令。

注意

要使用除之外的命令行工具完成以下步骤 CloudShell,请确保您的AWS CLI 个人资料使用相同的 IAM 角色,其中包含在源账户 DataSync 中使用的所需用户权限

要创建 DataSync 目标位置,请使用以下方法: CloudShell
  1. 在您的源账户中,执行以下任一操作以 CloudShell 从控制台启动:

    • 选择控制台导航栏上的 CloudShell 图标。它位于搜索框的右侧。

    • 使用控制台导航栏上的搜索框进行搜索,CloudShell然后选择CloudShell选项。

  2. 复制以下命令:

    aws datasync create-location-s3 \ --s3-bucket-arn arn:aws:s3:::amzn-s3-demo-destination-bucket \ --s3-config '{ "BucketAccessRoleArn":"arn:aws:iam::source-user-account:role/source-datasync-role" }'
  3. amzn-s3-demo-destination-bucket 替换为目标账户中 S3 存储桶的名称。

  4. source-user-account 替换为您源账户的 AWS 账户 ID。

  5. source-datasync-role替换为您在源账户中创建的 DataSync IAM 角色

  6. 在中运行命令 CloudShell。

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

    { "LocationArn": "arn:aws:datasync:us-east-2:123456789012:location/loc-abcdef01234567890" }
  7. 在左侧导航窗格中,展开数据传输,然后选择位置

在您的源账户中,您可以看到刚刚为目标账户存储桶创建的 S3 位置。

第 7 步:在您的源账户中,创建并启动 DataSync 任务

在开始传输数据的 DataSync 任务之前,让我们回顾一下你到目前为止所做的事情:

  • 在您的来源账户中,您创建了 DataSync 代理。代理可以从您的本地存储系统读取数据并与 DataSync 服务通信。

  • 在您的源账户中,您创建了一个 IAM 角色,允许将数据传输 DataSync 到目标账户中的 S3 存储桶。

  • 在目标账户中,您配置了 S3 存储桶,以便 DataSync 可以向其传输数据。

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

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

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

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

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

  5. 审核页面上,检查您的设置,然后选择创建任务

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

    • 如需运行任务而不进行修改,请选择从默认值开始

    • 如需修改任务再运行,请选择使用覆盖选项开始

任务完成后,请检查目标账户中的 S3 存储桶。您应该会看到从源位置移出的数据。

相关资源

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