2015-04-21 66 views
2

我們需要創建一個允許我們在客戶的S3賬戶中訪問存儲區的IAM用戶(前提是他們允許我們訪問這些存儲區)。S3 IAM訪問其他賬戶的政策

我們已經創建了一個IAM用戶在我們的帳戶與以下在線政策:

{ 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:AbortMultipartUpload", 
       "s3:PutObjectAcl", 
       "s3:ListMultipartUploadParts", 
       "s3:PutObject", 
       "s3:ListBucketMultipartUploads", 
       "s3:GetBucketLocation" 
      ], 
      "Resource": "arn:aws:s3:::*" 
     } 
    ] 
} 

除此之外,我們將要求我們的客戶使用下面的策略,並將其應用到自己的相關鬥:

{ 
    "Version": "2008-10-17", 
    "Id": "Policy1416999097026", 
    "Statement": [ 
     { 
      "Sid": "Stmt1416998971331", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::229569340673:user/our-iam-user" 
      }, 
      "Action": [ 
       "s3:AbortMultipartUpload", 
       "s3:PutObjectAcl", 
       "s3:ListMultipartUploadParts", 
       "s3:PutObject" 
      ], 
      "Resource": "arn:aws:s3:::client-bucket-name/*" 
     }, 
     { 
      "Sid": "Stmt1416999025675", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::229569340673:user/our-iam-user" 
      }, 
      "Action": [ 
       "s3:ListBucketMultipartUploads", 
       "s3:GetBucketLocation" 
      ], 
      "Resource": "arn:aws:s3:::client-bucket-name" 
     } 
    ] 
} 

雖然這一切似乎做工精細,我們已經發現了一個重要問題是我們自己內部的直列政策似乎充分使用我們-IAM用戶所有我們自己的內部桶。

我們是否錯配了某些東西,或者我們在這裏丟失了其他明顯的東西?

+0

如果外部賬戶授予您賬戶中特定IAM用戶的權限,第一項政策似乎不必要你能刪除它並確認嗎? –

回答

1

根據AWS支持,這是不正確的方式解決問題: https://forums.aws.amazon.com/message.jspa?messageID=618606

我在這裏複製他們的答案。

AWS:

您與您的IAM用戶訪問權限授予任何亞馬遜S3存儲使用策略。在這種情況下,這將包括您帳戶中的任何S3存儲桶以及帳戶所有者授予您用戶訪問權限的任何其他帳戶中的任何存儲桶。您需要更加具體地瞭解您的IAM用戶的政策。例如,以下策略將限制您的IAM用戶訪問單個存儲桶。

如果用戶需要訪問多個存儲桶,也可以授予對存儲桶數組的訪問權限。

不幸的是,我們不事先知道所有客戶的名字桶時,我們創建內嵌政策。隨着我們越來越多的客戶加入我們的服務,不斷增加新的客戶端存儲桶名稱到內聯策略中是不切實際的。

我想另一個選擇是創建僅用於上述目的的新的AWS賬戶 - 即此帳戶本身並不擁有任何東西,並且將只被用於上傳到客戶端的桶。

這是可以接受的,還是有任何其他替代選擇對我們開放嗎?

AWS

擁有一個獨立的AWS賬戶將提供明確的安全邊界。請記住,如果您曾在其他帳戶中創建存儲桶,則如果您授予對「arn:aws:s3 ::: *」的訪問權限,用戶將繼承對任何存儲桶的訪問權限。

另一種方法是使用黑名單(注意上面建議的白名單是一種更好的做法)。

正如你所看到的,第二條語句顯式拒絕訪問一個桶數組。這將覆蓋第一個語句中的允許。這裏的缺點是默認情況下用戶會繼承對任何新桶的訪問。因此,您需要努力將新桶添加到黑名單。無論採用哪種方法,都需要您保持對政策的更改。因此,我推薦我以前的策略(又名白名單),只允許用戶訪問S3存儲桶。

結論 對於我們而言,在白名單/黑名單的做法是不能接受的,因爲我們不認爲會被我們的客戶提供所有的桶之前知道。最後,我們開始創建一個用戶的新AWS賬戶,並且該用戶沒有自己的s3存儲桶

0

您授予內部用戶的策略給該用戶所有的S3存儲接入上市的API(你的問題的第一個策略)。這是不必要的,因爲您的客戶端存儲桶策略會授予您的用戶訪問客戶端存儲桶所需的特權。

解決您的問題,刪除用戶策略 - 或 - 明確您的客戶在允許[資源]清單鬥,而不是使用「*」