如何使用命令行在不同的aws帐户的s3桶之间传输数据

如何使用s3cmd在不同的aws帐户的s3桶之间传输数据?

command will be like this: s3cmd rsync s3://acc1_bucket/folder/ s3://acc2_bucket/folder --recursive 

但那么它将如何识别第二个环境? 什么是正确的做法呢?

您只需在S3存储桶策略中授权您的IAM用户访问buvket,如下所示:

 { "Version": "2012-10-17", "Statement": [ { "Sid": "whatever", "Effect": "Allow", "Principal": { "AWS": [ "<ARN OF YOUR IAM USER>" ] }, "Action": [ "s3:ListBucket", "s3:GetBucketLocation", "s3:GetObject" ], "Resource": [ "arn:aws:s3:::<YOUR BUCKET NAME>", "arn:aws:s3:::<YOUR BUCKET NAME>/*" ] } ] } 

那么,因为这是跨账户,您还必须允许您的IAM用户执行S3调用,方法是将策略附加到您的IAM用户,如下所示:

 { "Version": "2012-10-17", "Statement": [ { "Sid": "whateveryoulike", "Effect": "Allow", "Action": [ "s3:*" ], "Resource": [ "arn:aws:s3:::<BUCKET_NAME>", "arn:aws:s3:::<BUCKET_NAME>/*" ] } ] } 

只需configuration你的cli,你就可以访问你的存储桶交叉帐户。

您可以使用Minio客户端aka mc ,其开放源代码并与AWS S3兼容。

在Linux上安装Minio客户端

 $ wget https://dl.minio.io/client/mc/release/linux-amd64/mc $ chmod 755 mc $ ./mc --help 

添加AWS S3凭证

 $ ./mc config host add mys3one https://s3.amazonaws.com BKIKJAA5BMMU2RHO6Izz V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 $ ./mc config host add mys3two https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSaa64 

使用mc镜像将对象/存储桶从一个帐户转移到另一个帐户。

 $ ./mc mirror mys3one/photos mys3two/photos2 

在这个例子中,具有桶名“photos”的别名“mys3one”的s3帐户被镜像到具有桶名photo2的别名“mys3two”的s3帐户。

您可以通过将其添加到cron来自动执行同样的操作,因此可以在需要的内容可以同步时定期进行。

希望能帮助到你。 免责声明:我为Minio工作

帐户使用不同的凭据。 无法从一个帐户同步到另一个帐户,并提供单独的凭据。 唯一的方法是允许公众使用临时帐户访问第二个存储桶。

如果这不是一个选项,那么你最好的select是:

s3 sync s3://acct1/bucket . --profile acct1 s3 sync . s3://acct2/bucket --profile acct2