Permissions

在不同 AWS 賬戶上的 s3 儲存桶之間同步時訪問被拒絕

  • July 1, 2018

我正在嘗試在不同 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

它成功地工作了。

引用自:https://serverfault.com/questions/810890