如何使用不同访问密钥跨AWS账号高效复制S3存储桶内容?
跨账号大体积S3路径复制方案
不需要先下载到本地再上传,只要同时持有源端读权限、目标端写权限,就能实现直传,不占用本地磁盘,传输效率比下载-上传模式高3~10倍
方案1:rclone跨凭证直传(优先选,配置简单速度快)
rclone对多云存储的适配非常成熟,支持源和目标配置独立的访问凭证,内置多线程分片传输、增量校验能力,TB级数据量场景下稳定性和速度都远高于官方AWS CLI,全程文件不落地本地磁盘。
操作步骤:
- 安装rclone,按照官方文档指引完成安装即可
- 配置两个独立的S3连接配置项:
- 第一项命名为
customer-s3,填入客户提供的Access Key ID、Secret Access Key,以及客户S3桶所在的区域 - 第二项命名为
our-s3,填入我方S3的访问凭证、我方桶所在区域
- 第一项命名为
- 执行同步命令即可开始传输:
rclone sync customer-s3:bucket/company4/ our-s3:我方桶名/目标存储路径/ -P --transfers 32 --checkers 16
常用参数说明:
-P:实时显示传输进度、瞬时速度、剩余预估时间--transfers 32:开启32个并行传输线程,可根据实际带宽调整,大文件多的场景最高可以开到64--checkers 16:开启16个并行文件校验线程,快速对比两端文件差异,自动跳过已经传输完成的文件- 如果只需要全量复制不需要后续增量同步,把命令里的
sync替换为copy即可 - 正式执行前可以加上
--dry-run参数预跑,核对待传输文件列表无误后再启动正式任务,避免路径写错导致数据错传
方案2:同区域EC2+AWS CLI直传(仅用官方工具场景选)
如果合规要求只能使用AWS官方CLI,用这个方案可以最大化传输速度:
- 在我方S3桶所在的AWS区域开一台大带宽EC2实例,建议选10Gbps以上网络配置的机型(比如m5.2xlarge及以上规格),按实际传输时长计费,成本很低
- 给EC2绑定的IAM角色授予我方目标S3桶的
s3:PutObject、s3:ListBucket权限 - 联系客户给源桶添加一条桶策略,允许我方EC2绑定的IAM角色拥有源路径
s3:GetObject、s3:ListBucket权限 - 登录EC2直接执行同步命令即可,传输全程走AWS内网,单实例最高可以跑满10Gbps带宽:
aws s3 sync s3://客户bucket/company4/ s3://我方bucket/目标路径/ --source-region 客户桶所在区域 --region 我方桶所在区域 --only-show-errors
如果客户不配合修改桶策略,就在EC2上装rclone按方案1执行即可,不需要改任何桶配置。
方案3:本地多线程直传(1TB以内小数据量选)
如果总数据量在1TB以内,不想额外开EC2实例,直接在本地安装rclone执行方案1里的同步命令即可,会自动跑满本地上行带宽,同样不需要把文件下载到本地磁盘,不要用官方CLI默认的单线程模式,速度差距非常大。
注意事项
- 传输大文件时记得调小分片阈值,避免单分片过大导致重传成本高
- 最新版rclone和AWS CLI都原生支持5GB以上大文件的分片上传/复制,不需要额外做拆分处理
- 如果传输过程中断,重新执行相同的sync/copy命令会自动从断点续传,不会重复传输已经完成的文件
内容的提问来源于stack exchange,提问作者ca9163d9
相关产品推荐
相关产品推荐

