AWS S3跨账号复制迁移数据

作者:MeshCloud脉时云公有云架构师 周正

引言

我们在使用AWS S3对象存储的过程中有一种常见的场景是需要将S3的数据在不同账号之间进行复制迁移,如果采用下载再上传的方式既费时又费力,本文将介绍通过AWS内部网络实现跨账号同步复制S3数据的方法,方便快捷且可复用。

整体架构

技术简介

在目标账号B创建目标桶并配置存储桶策略,在源账号A为用户配置所需IAM策略,通过CloudShell或AWS CLI使用aws s3 sync指令完成全量和增量的数据复制同步。

目标

跨账号复制迁移AWS S3的对象数据。

准备工作

准备两个Amazon Web Services账号A和B,A作为源账号、B作为目标账号。

实施步骤

1. 在目标账号B创建目标桶并配置存储桶策略

1.1 在目标账号B创建目标桶

在账号B的S3控制页面中,创建目标存储桶s3-target-bucket

确认目标存储桶s3-target-bucket创建成功

1.2 为目标桶配置存储桶策略

点击进入目标存储桶s3-target-bucket

编辑存储桶策略,允许源账号A的用户s3-test对当前桶进行操作

2. 在源账号A为用户配置所需IAM策略

2.1 在源账号A为用户配置所需IAM策略

在账号A的IAM控制页面为用户s3-test用户添加S3和CloudShell的权限策略

检查确认账号A的用户s3-test用户的权限策略

3. 通过CloudShell执行aws s3 sync进行数据全量&增量同步

3.1 在源账号A中登录用户s3-test查看源桶s3-src-bucket

进入S3控制界面,点击进入源桶s3-src-bucket

查看源桶s3-src-bucket的对象数据

3.2 在源账号A中打开CloudShell并执行sync指令

在源账号A中进入CloudShell操作界面

在CloudShell中执行‘aws s3 sync s3://源桶名 s3://目标桶名’进行对象数据同步,首次执行为全量,以后再执行就是增量同步

aws s3 sync s3://s3-src-bucket/ s3://s3-target-bucket/

3.3 在目标账号B中检查确认对象数据已经同步过来

3.4 增量同步源桶中的新对象到目标桶

在源桶中上传两个新对象

再次执行aws s3 sync s3://s3-src-bucket/ s3://s3-target-bucket/,会只拷贝新对象

验证

补充

1. 在源桶中删除对象时,如何也将删除操作同步到目标桶?

方法、使用aws s3 sync –delete,在增量同步的同时删除目标桶中有但源桶中没有的对象

aws s3 sync --delete s3://s3-src-bucket/ s3://s3-target-bucket/

2. 对象同步到目标桶后没有权限怎么办?

方法1、修改目标桶的对象所有权,禁用ACL,强制存储桶拥有者为对象的所有者

执行sync命令

验证效果

方法2、保持目标桶的对象所有权,启用ACL,存储桶拥有者优先为对象的所有者,使用aws s3 sync –grants为复制后的对象授权

目标账号B的规范id为2f*********

执行sync命令

aws s3 sync s3://s3-src-bucket/ s3://s3-target-bucket/ --grants full=id=2f*********

验证效果

发表评论

您的电子邮箱地址不会被公开。