AWS-datasync自动同步(Amazon S3 传输到另一个 Amazon S3AWS 账户)

以下是这种场景的样子:

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

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


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

1.       先在帐户A创建一个S3存储桶,创建如下:(存储桶名字可以更改,但是需要全局唯一,其它均为默认配置即可)

img2

2.       先在帐户B创建一个S3存储桶,创建如下:(存储桶名字可以更改,但是需要全局唯一,其它均为默认配置即可)

img3



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

您需要一个 IAM 角色,该角色可以 DataSync 授予写入账户 B 中的 S3 存储桶的权限。

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

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

创建 IAM 角色

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

创建 IAM 角色

1.       使用账户 A 登录。AWS Management Console

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

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

img4

img5

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

img6

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


img7

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

img8

7.       为您的角色命名,然后选择创建角色(角色名是可以自定义的)

img9

img10

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

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

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

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

img11

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

img12

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

a.       将下面的 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/*"

    }

  ]

}


https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/list_amazons3.html

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

c.       可以至帐号B中查看s3存储桶的arn,如下所示。

img13

4.       选择Review policy(查看策略)(我这是已经更换好我自己的实验场景)

img14

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

img15

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

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

l                      禁用 S3 存储桶的 ACL

1.       在中AWS Management Console,切换到账户 B。

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

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

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

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

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

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

8.       选择 Save changes(保存更改)。


因为我们创建S3存储桶时选择的默认时是ACL 已禁用(推荐),所以不需要操作,如果不是默认创建的,可以检查下。

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

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

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

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

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

更新 S3 存储桶策略

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

2.       在存储桶的详细信息页面上,选择 Permiss (权限) 选项卡。在存储桶策略下,选择编辑,然后执行以下操作来修改您的 S3 存储桶策略:

img16

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

{

  "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:user/name-of-your-role"

      },

      "Action": "s3:ListBucket",

      "Resource": "arn:aws:s3:::account-b-bucket"

    }

  ]

}

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

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

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

e.       arn:aws:iam::account-a-id:user/name-of-your-role替换为您用于访问控制台的 IAM 角色或AWS CLI账户 A。这点特别注意,很坑

3.       选择 Save changes(保存更改)。

img17

这里的arn:aws:iam::848227734245:user/datasync 是上文没有创建的用户,所以这里需要创建一个用户,创建流程如下:

1通过以下网址打开 Identity and Access Management (IAM)控制台:https://us-east-1.console.aws.amazon.com/iam/home#/home

添加用户:我这里是已经创建好了的。


img18

img19

安全凭证后续可能要用到,所以可以同步创建下。

img20

我这里是已经创建好的,可以参考该链接配置访问密钥https://www.cnblogs.com/syavingcs/p/14850710.html

img21


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

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

使用 CLI 创建 DataSync 地点

注意事项,使用CLI是要地区要求的https://docs.aws.amazon.com/zh_cn/general/latest/gr/cloudshell.html

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替换为您在账户 A DataSync 中创建的 IAM 角色(返回步骤 1)。

7.       如果账户 B 中的存储桶与账户 A 中的存储桶位于不同的区域,请在命令末尾添加--region选项以指定账户 B 存储桶所在的区域。例如,--region us-west-1  (可选,本文实验中没有遇到)

8.       运行 命令。

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

img22

注意,这里可能会有AK SK相关问题,报错为an error occurred (UnrecognizedClientException) when calling the CreateLocationS3 operation: The security token included in the request is invalid.,回到步骤3底部有AK SK相关文档

9.       在中切换回账户 AAWS Management Console。

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

11.       在左侧导航窗格中,选择 Loces (位置)。

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

img23

12.       现在创建帐号A,也就是本地的位置,可以使用控制台创建。

img24

创建好后显示如下:(位置编号是随机的,按照你们配置时的来即可)

img25


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

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

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

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

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

创建和启动 DataSync 任务

1.       在账户 A 中仍使用 DataSync 控制台时,在左侧导航窗格中选择任务,然后选择创建任务

img26

源位置我这里定义的是帐号B下的,也就是用CLI创建的位置

img27

目标位置是用帐号A下的,也就是用控制台创建的

img28

设置任何名称和cron定时时间,因为是测试,遂设置的5分钟一次,业务环境根据业务属性来定义。

img29

img30

img31



注意

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

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

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

3.       配置源位置页面上,选择选择现有位置

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

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

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

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

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

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

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

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

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


  • 回到顶部
  • 88888888
  • QQ客服
  • 微信二维码