S3在不同帐户的桶之间移动文件?

Geu*_*uis 25 amazon-s3 s3cmd

我正在为拥有2个独立AWS账户的客户做一些工作.我们需要将其中一个S3帐户的存储桶中的所有文件移动到第二个帐户的新存储桶中.

我们认为s3cmd允许这样,使用以下格式:

s3cmd cp s3://bucket1 s3://bucket2 --recursive
Run Code Online (Sandbox Code Playgroud)

但是,这只允许我使用一个帐户的密钥,而我无法指定第二个帐户的帐户.

有没有办法在不下载文件并将其再次上传到第二个帐户的情况下执行此操作?

小智 43

您不必向所有人打开权限.在源和目标上使用以下Bucket策略,使用IAM用户从一个帐户中的存储桶复制到另一个帐户

从中复制的桶 - SourceBucket

要复制到的目录 - DestinationBucket

来源AWS账户ID - XXXX-XXXX-XXXX

源IAM用户 - src-iam-user

以下策略意味着 - IAM用户 - XXXX-XXXX-XXXX:src-iam-user在SourceBucket/*和s3上具有s3:ListBucket和s3:GetObject权限:ListBucket和s3:在DestinationBucket上的PutObject权限/*

在SourceBucket上,策略应该是:

{
  "Id": "Policy1357935677554",
  "Statement": [{
    "Sid": "Stmt1357935647218",
    "Action": ["s3:ListBucket"],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::SourceBucket",
    "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
  }, {
    "Sid": "Stmt1357935676138",
    "Action": ["s3:GetObject"],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::SourceBucket/*",
    "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
  }]
}
Run Code Online (Sandbox Code Playgroud)

在DestinationBucket上,策略应该是:

{
  "Id": "Policy1357935677555",
  "Statement": [{
    "Sid": "Stmt1357935647218",
    "Action": ["s3:ListBucket"],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::DestinationBucket",
    "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
  }, {
    "Sid": "Stmt1357935676138",
    "Action": ["s3:PutObject"],
    "Effect": "Allow",
    "Resource": "arn:aws:s3:::DestinationBucket/*",
    "Principal": {"AWS": "arn:aws:iam::XXXXXXXXXXXX:user/src–iam-user"}
  }]
}
Run Code Online (Sandbox Code Playgroud)

要运行的命令是 SourceBucket