You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在两个不同账户的S3存储桶间复制指定文件

解决方案:仅复制S3存储桶中的单个大文件(无需Kubernetes Pods)

针对你要将companys3中的file2(20GB+大文件)复制到clients3且不使用Kubernetes Pods的需求,这里有几个高效的方案,都是直接基于AWS原生工具实现的,不需要中转节点:

方法1:使用AWS CLI直接复制(推荐)

AWS CLI的s3 cp命令支持跨存储桶复制单个文件,并且会自动处理大文件的分段上传(无需手动拆分),非常适合你的场景。

操作步骤:

  1. 确保已安装并配置好AWS CLI(配置对应权限的IAM凭证)
  2. 执行以下命令:
aws s3 cp s3://companys3/file2 s3://clients3/file2
  • 如果需要重命名目标文件,直接修改目标路径即可:
aws s3 cp s3://companys3/file2 s3://clients3/renamed-file2
  1. 对于超大文件,你可以通过--multipart-chunk-size参数调整分段大小(比如设置为10GB,减少分段数量):
aws s3 cp s3://companys3/file2 s3://clients3/file2 --multipart-chunk-size 10GB

权限要求:

执行该命令的IAM身份需要具备:

  • 对源桶companys3s3:GetObject权限(仅针对file2即可)
  • 对目标桶clients3s3:PutObject权限

方法2:通过AWS管理控制台可视化操作

如果你更习惯图形界面,可以直接在AWS S3控制台完成复制:

  1. 登录AWS管理控制台,进入S3服务
  2. 找到源存储桶companys3,定位到file2文件
  3. 右键点击文件,选择复制
  4. 切换到目标存储桶clients3,在桶内空白处右键选择粘贴
  5. 控制台会自动处理大文件的分段上传,等待复制完成即可

方法3:使用AWS SDK实现自动化复制(适合脚本/集成场景)

如果需要将复制逻辑集成到自动化流程中,可以用AWS SDK(以Python的boto3为例),直接调用S3服务端复制接口,无需下载文件到本地:

import boto3

# 初始化S3客户端
s3_client = boto3.client('s3')

# 执行服务端复制(高效,直接在AWS内部传输)
s3_client.copy_object(
    Bucket='clients3',          # 目标桶名称
    Key='file2',               # 目标文件路径/名称
    CopySource={
        'Bucket': 'companys3', # 源桶名称
        'Key': 'file2'         # 源文件路径/名称
    }
)

这种方式是服务端侧复制,数据直接在S3之间传输,不会经过本地机器,效率极高,尤其适合大文件。

额外注意事项

  • 跨账户场景:如果客户的clients3属于另一个AWS账户,需要在源桶companys3的桶策略中添加允许目标账户读取file2的规则,同时确保目标账户的IAM身份拥有写入clients3的权限。
  • 进度监控:使用CLI时可以添加--progress参数查看复制进度;控制台会直接显示进度条;SDK可以通过回调函数实现进度监控。

内容的提问来源于stack exchange,提问作者Adam Tomaszewski

火山引擎 最新活动