能否在源AWS账户运行S3 Batch拷贝作业实现跨账户数据迁移?
源账户运行S3 Batch跨账户复制作业的配置修改方案
你遇到的两个报错分别对应跨账户访问manifest文件、跨账户写入目标桶的权限缺失问题,按以下步骤配置即可解决:
1. 修复Manifest文件ETag读取报错
目标账户侧配置(Manifest存储桶所属账户)
- 给Manifest存储桶添加如下桶策略,授权源账户Batch作业角色读取Manifest权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<源账户ID>:role/<源账户S3 Batch作业角色名称>" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<Manifest存储桶名称>/*" } ] }
- 若Manifest文件使用KMS加密,需在对应KMS密钥的策略中添加上述角色的
kms:Decrypt权限。 - 确认Manifest对象本身没有设置限制跨账户读取的ACL。
源账户侧配置
- 给S3 Batch作业使用的IAM角色添加如下权限:
{ "Effect": "Allow", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": "arn:aws:s3:::<Manifest存储桶名称>/*" }
2. 修复目标桶访问权限不足报错
目标账户侧配置(目标S3桶所属账户)
- 给目标S3桶添加如下桶策略,授权源账户Batch作业角色写入对象权限:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<源账户ID>:role/<源账户S3 Batch作业角色名称>" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::<目标桶名称>/*", "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }
- 若目标桶开启KMS默认加密,需在对应KMS密钥的策略中添加上述角色的
kms:GenerateDataKey、kms:Encrypt权限。
源账户侧配置
- 给S3 Batch作业使用的IAM角色添加如下权限:
{ "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::<目标桶名称>/*" }
- 确认该IAM角色的信任关系已允许S3 Batch服务扮演,信任策略示例:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "s3batchops.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
额外校验项
- 确认S3 Batch作业配置中,复制操作的ACL设置为
bucket-owner-full-control,避免目标账户无法访问复制后的对象。 - 若使用S3 Inventory生成的Manifest,需确认Inventory导出时已授权源账户读取权限。
内容的提问来源于stack exchange,提问作者Swagatika
相关产品推荐
相关产品推荐

