如何使用DataSync实现不同账号下两个S3存储桶的数据同步
跨账号S3存储桶DataSync同步方案
可行性说明
DataSync原生支持跨AWS账号的S3存储桶同步,没有功能限制,是经过大量生产场景验证的成熟方案。相比跨账号S3复制、aws cli批量同步,它在大文件/大数据量传输稳定性、增量同步效率、传输校验能力上优势明显,TB到PB级数据迁移场景都可以直接使用。
标准配置流程
- 权限配置(最容易出问题的环节)
- 统一在目标账号侧操作:创建DataSync服务使用的IAM角色,给角色配置目标S3桶的读写权限,同时补充源S3桶的读、列举、对象获取权限;角色信任策略直接配置为允许
datasync.amazonaws.com服务代入即可 - 切换到源账号,修改源S3桶的资源策略,添加允许上述目标账号下的DataSync角色访问桶和桶内对象的条目,注意权限要覆盖桶级列举、对象级读/获取标签/获取ACL几个维度,缺任何一个都会导致任务报错
- 如果桶内对象用KMS加密,还要在源账号的KMS密钥策略里给DataSync角色加解密权限,目标账号的KMS密钥给角色加加密权限,不要只配S3权限漏了KMS授权
- 统一在目标账号侧操作:创建DataSync服务使用的IAM角色,给角色配置目标S3桶的读写权限,同时补充源S3桶的读、列举、对象获取权限;角色信任策略直接配置为允许
- 任务创建
- 回到目标账号的DataSync控制台,新建源位置时选择S3类型,手动输入源账号的S3桶全名,关联之前配好的跨账号权限角色即可,不需要在源账号部署任何DataSync资源
- 目标位置直接选择本账号下的目标S3桶
- 任务参数按需配置:生产环境建议开启传输全链路校验,元数据保留规则和业务需求对齐,大流量场景配置带宽上限避免挤爆业务带宽,需要长期同步的可以配置定时调度规则自动跑增量
- 上线前验证
- 第一次跑任务先开试运行模式,只做对象比对不实际传输,确认待同步对象清单、权限配置都没问题,再启动正式同步
- 配置任务失败、传输错误率超阈值的告警,避免同步异常没及时发现
常见注意事项
- 不建议在源账号创建DataSync任务往目标桶写,这种模式的权限链路更绕,排错成本高,官方推荐的最佳实践就是所有DataSync资源都部署在目标账号
- 源桶开了对象锁的话,目标桶也要提前开启对应模式的对象锁,否则WORM配置不匹配会导致对象同步失败
- 要同步对象所有权、ACL、标签的话,记得在IAM权限里补上对应的s3接口权限,默认的S3只读权限模板不包含这部分细粒度权限
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

