You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现两个不同AWS账户下的S3桶每日自动同步

实现方案

整体采用AWS全托管服务实现,无需自行搭建服务器运行cron任务,核心逻辑为通过EventBridge定时触发Lambda函数,使用IAM-B的凭证跨账号完成S3桶数据同步,具体步骤如下:

步骤1:安全存储IAM-B的访问凭证

  • 在ACCOUNT-A中使用AWS Secrets Manager存储IAM-B的Access Key ID和Secret Access Key,密钥命名为IAM-B-S3-Creds,避免硬编码密钥到业务代码中
  • 为后续使用的Lambda执行角色配置Secrets Manager只读权限,且仅开放该密钥的访问权限

步骤2:配置目标桶写入权限

在ACCOUNT-A的BUCKET-DESTINATION桶策略中添加如下权限,允许IAM-B身份写入目标桶:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::【ACCOUNT-B的12位账号ID】:user/IAM-B"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::BUCKET-DESTINATION/*",
                "arn:aws:s3:::BUCKET-DESTINATION"
            ]
        }
    ]
}

注意替换占位符为ACCOUNT-B的实际账号ID

步骤3:创建同步逻辑Lambda函数

  • 运行环境选择Python 3.9及以上版本,关联上一步配置好的、可读取Secrets Manager的执行角色
  • 代码逻辑如下:
    1. 调用Secrets Manager接口读取IAM-B的访问密钥
    2. 使用该密钥初始化S3客户端,连接ACCOUNT-B的BUCKET-SOURCE
    3. 遍历源桶对象列表,通过对象最后修改时间、文件大小和目标桶已存对象做对比,过滤出需要同步的对象
    4. 调用s3.copy_object接口直接跨账号复制对象,无需下载到本地再上传,单文件小于5GB场景可直接使用该接口,大于5GB的文件可补充分片复制逻辑
  • 根据桶的总数据量调整Lambda的超时时间(最长可设15分钟)和内存配置,若单桶数据量过大可拆分同步任务,配合S3 Batch Operations做分片处理

步骤4:配置定时触发规则

  • 进入ACCOUNT-A的EventBridge Scheduler控制台,创建新的定时任务
  • 触发模式选择Cron表达式,按需配置执行时间,例如北京时间每日凌晨1点执行对应Cron表达式为0 17 * * ? *(UTC时间比北京时间晚8小时)
  • 目标类型选择Lambda函数,关联上一步创建的同步函数,同时为EventBridge Scheduler配置调用Lambda的执行权限

可选优化项

  • 增量同步优化:在ACCOUNT-A的DynamoDB或者S3中存储上次同步的时间戳,每次同步仅拉取该时间戳之后修改的对象,降低资源消耗
  • 异常告警配置:为Lambda配置错误指标告警,同步失败时通过SNS发送通知,及时排查问题
  • 大数据量适配:如果单桶数据量超过TB级别,可将同步逻辑替换为S3 Batch Operations批量复制任务,由EventBridge定时触发,成本更低、执行效率更高

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:18:00