如何将AWS中账号A的EC2实例文件复制到账号B的S3存储桶?
AWS跨账号从EC2复制文件到S3的配置与操作步骤
一、IAM策略配置
1. 账号A:用户A的IAM权限策略
给账号A下的用户A附加以下IAM策略,允许其向账号B的目标S3桶上传文件:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::目标桶名称/*" } ] }
说明:PutObjectAcl为可选权限,若无需设置文件ACL可移除;替换目标桶名称为账号B的实际S3桶名。
2. 账号B:S3桶的桶策略
在账号B的目标S3桶上配置桶策略,允许账号A的用户A写入数据:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::账号A数字ID:user/用户A" }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::目标桶名称/*" } ] }
说明:替换账号A数字ID为账号A的12位数字ID,用户A为账号A中用户的名称,目标桶名称为实际桶名。若需要列出桶内容,可添加s3:ListBucket动作,对应的Resource设为arn:aws:s3:::目标桶名称。
二、操作步骤
1. 配置账号A的用户A权限
- 登录账号A的IAM控制台,找到用户A。
- 点击「添加权限」→「附加现有策略直接」→「创建策略」,选择JSON模式粘贴上述策略,完成创建后附加给用户A。
- 若用户A未生成Access Key,进入用户A的「安全凭证」页面,生成并保存Access Key和Secret Access Key。
2. 配置账号B的S3桶权限
- 登录账号B的S3控制台,打开目标桶的「权限」标签页。
- 找到「桶策略」并点击「编辑」,粘贴上述桶策略,替换对应参数后保存。
3. 在EC2实例中执行文件上传
- 登录账号A的EC2实例,确保AWS CLI已安装:
- Amazon Linux/RHEL:
sudo yum install aws-cli -y - Ubuntu/Debian:
sudo apt update && sudo apt install aws-cli -y
- Amazon Linux/RHEL:
- 配置用户A的凭证:执行
aws configure,依次输入Access Key、Secret Access Key、默认区域(建议与目标桶区域一致)、输出格式(选json即可)。 - 上传文件:
- 单个文件:
aws s3 cp /本地文件路径 s3://目标桶名称/目标路径/ - 整个目录:
aws s3 sync /本地目录路径 s3://目标桶名称/目标目录路径/
- 单个文件:
注意事项
- 确认EC2实例的安全组允许出站访问S3(默认放行,自定义安全组需检查)。
- 若使用EC2实例角色而非用户A的Access Key,需将账号A的用户策略附加到实例角色,同时桶策略中Principal改为实例角色的ARN。
- 大文件上传可使用
aws s3 cp --multipart-chunk-size 100MB参数优化传输效率。
内容的提问来源于stack exchange,提问作者Coolbreeze
相关产品推荐
相关产品推荐

