跨AWS账户用IAM角色实现S3 Sync遇权限问题求解决方案
跨账户S3 Sync权限问题解决方案
问题核心
你当前的角色配置中,没有任何一个角色能同时访问两个账户的S3桶,而aws s3 sync默认使用当前会话权限访问源和目标桶,因此必然出现权限错误。
解决方案1:使用多CLI配置文件分权限执行(推荐)
无需修改现有角色,利用AWS CLI的多profile特性,让源桶和目标桶分别使用对应账户的权限:
- 在
~/.aws/config中配置两个profile:- account1111:关联你访问账户1111的SSO角色(确保该角色有权访问
bucket-in-account-1111) - account2222:关联你访问账户2222的
role-2222角色(或直接配置SSO角色)
- account1111:关联你访问账户1111的SSO角色(确保该角色有权访问
- 执行sync命令时指定双profile:
该命令会用aws s3 sync s3://bucket-in-account-1111 s3://bucket-in-account-2222 --source-profile account1111 --destination-profile account2222account1111权限读取源桶,用account2222权限写入目标桶,完全不需要S3桶策略。
解决方案2:创建可跨双桶访问的角色链
如果必须用单个角色执行sync,按以下步骤调整配置:
- 更新账户2222的
role-2222权限策略:
添加对账户1111桶的访问权限,策略内容如下:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:*", "Resource": [ "arn:aws:s3:::bucket-in-account-2222", "arn:aws:s3:::bucket-in-account-2222/*", "arn:aws:s3:::bucket-in-account-1111", "arn:aws:s3:::bucket-in-account-1111/*" ] } ] } - 在账户1111中授权
role-2222访问源桶:
在账户1111中创建一个IAM权限策略,允许arn:aws:iam::2222:role/role-2222访问bucket-in-account-1111,并将该策略附加到账户1111的管理员角色或对应的SSO角色上。 - 执行角色切换并同步:
先通过账户1111的角色assumerole-2222,再执行sync命令:# 切换到role-2222并获取临时凭证 aws sts assume-role --role-arn arn:aws:iam::2222:role/role-2222 --role-session-name sync-session # 配置临时凭证后执行同步 aws s3 sync s3://bucket-in-account-1111 s3://bucket-in-account-2222
内容的提问来源于stack exchange,提问作者Tom Harrison
相关产品推荐
相关产品推荐

