Permissions
在不同 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/*" } ]}
到測試儲存桶上的儲存桶權限策略。
現在我要
aws sync
工作了,因為s3 cp
不建議將 using 用於 cron 。我試過
user@ubuntu:~$ aws s3 sync --dryrun s3://src/ s3://dest/ --region eu-central-1
但我被拒絕訪問:
致命錯誤:呼叫 ListObjects 操作時發生錯誤 (AccessDenied):訪問被拒絕
如果這是擁有儲存桶的使用者,我怎樣才能拒絕訪問並執行同步?
錯誤的原因
ListObjects
是您分配了訪問儲存桶內容的權限 (arn:aws:s3:::bucket/*
),但您沒有授予儲存桶本身的權限(arn:aws:s3:::bucket
)。該ListObjects
命令需要訪問儲存桶。為了測試這一點,我做了以下事情:
- 使用了兩個 AWS 賬戶:賬戶 A、賬戶 B
bucket-a
在賬戶 A 中創建bucket-b
在賬戶 B 中創建- 在賬戶 A 中創建了
user-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
它成功地工作了。