如何跨AWS账号递归复制S3存储桶内容?
跨AWS凭证复制S3存储桶内容的解决方案
以下是几种无需本地中转的高效解决方案,覆盖不同工具场景:
1. AWS CLI v2 多配置文件直接同步(推荐)
AWS CLI v2支持直接指定源和目标的凭证配置文件,实现S3到S3的服务器端复制:
- 先在
~/.aws/credentials中配置两组凭证的profile:[foo-profile] aws_access_key_id = 你的源桶凭证AccessKey aws_secret_access_key = 你的源桶凭证SecretKey [bar-profile] aws_access_key_id = 你的目标桶凭证AccessKey aws_secret_access_key = 你的目标桶凭证SecretKey - 执行递归复制(
sync自带增量同步,也可替换为cp --recursive实现全量复制):aws s3 sync s3://foo s3://bar --source-profile foo-profile --destination-profile bar-profile
2. AWS CLI v1 临时环境变量方案
若使用CLI v1(不支持--source-profile参数),可通过临时环境变量指定源凭证,默认用当前配置的目标凭证:
# 临时设置源桶凭证,执行复制命令 AWS_ACCESS_KEY_ID=源桶AccessKey AWS_SECRET_ACCESS_KEY=源桶SecretKey aws s3 cp s3://foo/ s3://bar/ --recursive --source-region 源桶区域 --dest-region 目标桶区域
3. 修正Rclone配置实现直接S3传输
你之前遇到的下载再上传问题,是因为未启用Rclone的S3服务器端复制功能:
- 用
rclone config分别创建两个S3远程(比如foo-s3和bar-s3),对应两组凭证 - 执行复制时添加参数触发服务器端复制:
注:rclone copy foo-s3: bar-s3: --recursive --s3-server-side-acl --s3-acl bucket-owner-full-controlbucket-owner-full-control用于跨账户场景,确保目标桶所有者拥有对象权限。
4. S3跨账户复制(CAR)(适合长期同步)
如果需要持续同步而非一次性复制,可配置S3原生的跨账户复制规则:
- 给源桶
s3://foo添加桶策略,允许目标账户的IAM角色读取源桶对象 - 在目标桶
s3://bar的控制台中配置复制规则,指定源桶、复制范围及存储类 - 配置完成后,S3会自动同步现有对象及后续新增对象,全程无需人工干预
权限注意事项
无论使用哪种方法,需确保:
- 源凭证拥有
s3:ListBucket和s3:GetObject权限 - 目标凭证拥有
s3:ListBucket、s3:PutObject和s3:PutObjectAcl权限
内容的提问来源于stack exchange,提问作者maxisme
相关产品推荐
相关产品推荐

