在不同AWS账户的s3桶之间进行同步

我试图在不同的AWS账户上设置两个桶之间的同步。 我得到了CP的工作

@ubuntu:~$ s3cmd cp -v s3://src/dir/ s3://dest/folder --recursive 

我是拥有/ src / dir的用户,我已经添加了

 { "Version": "2012-10-17", "Id": "Policy1477299702471", "Statement": [ { "Sid": "Stmt1477299696163", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::awsid:user/name" }, "Action": "s3:*", "Resource": "arn:aws:s3:::bucket/*" } ]} 

testing存储桶上的存储桶权限策略。

现在我正在使用同步工作,因为使用s3 cp不推荐使用cron。

我试过了

 user@ubuntu:~$ aws s3 sync --dryrun s3://src/ s3://dest/ --region eu-central-1 

但我得到访问被拒绝。

 fatal error: An error occurred (AccessDenied) when calling the ListObjects operation: Access Denied 

如果这是拥有该存储桶的用户,我如何才能拒绝访问? 并获得同步运行?

您的ListObjects错误的原因是您分配了访问您的存储桶( arn:aws:s3:::bucket/* )内容的权限但是您没有授予存储桶本身的权限( arn:aws:s3:::bucket )。 ListObjects命令需要访问存储桶。

为了testing这个,我做了以下工作:

  • 使用了两个AWS账户:账户A,账户B.
  • 在帐户A中创buildbucket-a
  • 在帐户B中创buildbucket-b
  • 在帐户A中创build一个IAM用户user-a -a,具有访问bucket-a权限
  • bucket-b添加了桶策略:

     { "Id": "CopyBuckets", "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1", "Action": "s3:*", "Effect": "Allow", "Resource": [ "arn:aws:s3:::bucket-b", "arn:aws:s3:::bucket-b/*" ], "Principal": { "AWS": [ "arn:aws:iam::<account-a-id>:user/user-a" ] } } ] } 

然后,我通过在帐户A中使用user-a来触发同步:

 aws s3 sync s3://bucket-a s3://bucket-b --profile user-a 

它工作成功。