我正在尝试在不同的 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/*"
}
]}
到测试存储桶上的存储桶权限策略。
现在我要开始aws sync
工作了,因为s3 cp
不建议与 cron 一起使用。
我试过
user@ubuntu:~$ aws s3 sync --dryrun s3://src/ s3://dest/ --region eu-central-1
但我的访问被拒绝:
致命错误:调用 ListObjects 操作时发生错误(AccessDenied):访问被拒绝
如果这是拥有存储桶的用户,我该如何拒绝访问并运行同步?
答案1
导致错误的原因ListObjects
是您分配了访问内容您的存储桶(arn:aws:s3:::bucket/*
)但您没有授予权限到桶本身(arn:aws:s3:::bucket
)。该ListObjects
命令需要访问存储桶。
为了测试这一点,我做了以下事情:
- 使用两个 AWS 账户:账户 A、账户 B
bucket-a
在帐户 A 中创建bucket-b
在帐户 B 中创建user-a
在账户 A 中创建具有访问权限的IAM 用户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" ] } } ] }
user-a
然后我使用帐户 A触发同步:
aws s3 sync s3://bucket-a s3://bucket-b --profile user-a
它成功运行了。