作者: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*********
验证效果