如何使用 s3cmd 在不同 aws 帐户的 s3 存储桶之间传输数据?
command will be like this: s3cmd rsync s3://acc1_bucket/folder/ s3://acc2_bucket/folder --recursive
但是它将如何识别第二个存储桶环境?正确的做法是什么?
答案1
您只需授权您的 IAM 用户在 S3 存储桶策略中访问该存储桶,如下所示:
{
"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>/*"
]
}
]
}
只需配置您的 cli,您就可以访问您的跨存储桶帐户。
答案2
您可以使用Minio 客户端又名 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 mirror 将对象/存储桶从一个帐户转移到另一个帐户。
$ ./mc mirror mys3one/photos mys3two/photos2
在此示例中,别名为“mys3one”且存储桶名为“photos”的 s3 帐户正在镜像到别名为“mys3two”且存储桶名为 photo2 的 s3 帐户。
您可以通过将其添加到 cron 来自动执行相同操作,这样无论何时需要,都可以定期同步内容。
希望对您有所帮助。免责声明:我为米尼奥
答案3
帐户使用不同的凭证。无法从一个帐户同步到另一个帐户并提供单独的凭证。唯一的方法是使用临时帐户允许公众访问第二个存储桶。
如果这不是一个选择,那么最好的选择是:
s3 sync s3://acct1/bucket . --profile acct1 s3 sync . s3://acct2/bucket --profile acct2