2016-01-28 28 views
0

我有一個S3桶這一政策:無法訪問匿名上傳S3對象時驗證

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Sid": "", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": [ 
       "s3:DeleteObject", 
       "s3:GetObject", 
       "s3:PutObject" 
      ], 
      "Resource": "arn:aws:s3:::my-bucket/*" 
     }, 
     { 
      "Sid": "", 
      "Effect": "Allow", 
      "Principal": "*", 
      "Action": "s3:ListBucket", 
      "Resource": "arn:aws:s3:::my-bucket" 
     } 
    ] 
} 

上傳和刪除對象從任何Web客戶端無需任何身份驗證例如工作捲曲。

但是如果我認證爲IAM用戶(沒有任何政策甚至AmazonS3ReadOnlyAccess政策),我試圖訪問(GET)時得到的403錯誤的對象上傳匿名。訪問其他上傳的對象非匿名(例如通過S3控制檯)可以被訪問。發生什麼事?

要回顧一下:

  • 匿名用戶:
    • 可以上傳文件到水桶
    • 可自行下載從桶中上傳文件或任何其它用戶
  • 經過認證的IAM用戶:
    • 可以上傳文件到水桶
    • 可自行下載從桶中上傳文件
    • 不能下載匿名用戶上傳的文件

PS:根據IAM策略模擬器,匿名上傳的文件應該可以由IAM用戶下載。

回答

3

這實際上expectedbehavior是:

這是不可能有一個匿名的投入S3和私人獲取。原來,匿名用戶擁有該對象。

我犯的錯誤是假設使用*主體設置策略意味着「每個人」,而實際上只是意味着「匿名用戶」。並且由用戶(包括特殊的匿名用戶)「擁有」的對象不能被另一個用戶訪問(除非你想在我認爲的對象本身上設置策略)。其他用戶可以「看見」對象的事實是因爲它有權「列出」存儲桶並不意味着它可以讀取其內容。

+0

+1找到解決方案。我懷疑'*'不限於唯一的匿名用戶,但實際上我或其他人也可以*用我的憑證上傳到您的存儲桶,然後我將擁有該對象。如果我沒有給你閱讀權限,那麼你不能 - 你所能做的就是刪除它,因爲我擁有這個對象,但你擁有這個桶。允許匿名上傳到S3的好例子並不多。 –

+0

其實我很確定,即使在存儲桶上允許匿名上傳,如果通過身份驗證,您也無法上傳。因爲只允許匿名用戶。這當然是下載時發生的事情。 – Pol