2016-06-10 254 views
1

我試圖使用允許他們僅上傳到s3存儲桶的特定文件夾的策略來配置Amazon IAM用戶。如何在Amazon S3存儲桶中的特定目錄上僅允許PutObject權限

我可以成功上傳圖片時,政策是這樣寫的:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:Put*" 
      ], 
      "Resource": "*" 
     } 
    ] 
} 

我的上傳功能(在瀏覽器端的CoffeeScript JavaScript的AWS-SDK):

s3.putObject data, (err, data) => 
    if err 
    console.log err 
    console.log 'Error uploading data: ', data 
    else 
    console.log 'succesfully uploaded the image!' 

不過,我想將權限範圍限制爲僅允許putObject,並且僅限於特定的目錄中。我想這個政策會工作,但它拋出一個403錯誤:

{ 
     "Version": "2012-10-17", 
     "Statement": [ 
      { 
       "Effect": "Allow", 
       "Action": [ 
        "s3:PutObject" 
       ], 
       "Resource": "arn:aws:s3:::my_bucket/example_directory" 
      } 
     ] 
    } 

是否有語法錯誤,在我的政策,還是我做別的事情不正確?我對編寫IAM策略還不熟悉。

更新

我做了通過讓下面的代碼在IAM模擬器的工作取得了一些進展,但是當我試圖儘管說putObject應該允許實際上傳遺憾的是它仍然拋出一個403錯誤。

simulator pass

{ 
     "Version": "2012-10-17", 
     "Statement": [ 
      { 
       "Effect": "Allow", 
       "Action": [ 
        "s3:PutObject*" 
       ], 
       "Resource": "*" 
      }, 
      { 
       "Effect": "Deny", 
       "Action": [ 
        "s3:PutObjectAcl*", 
        "s3:PutObjectVersionAcl*" 
       ], 
       "Resource": "*" 
      } 
     ] 
    } 
+0

可以添加'「校長」:「*」,'(或要限制IAM帳戶)在您的策略並重試 –

+0

感謝您的幫助,當我這樣做時,我收到了一個錯誤 – satyrsynth

回答

0

我終於得到這個工作正常,關鍵是,我不得不在Deny部分使用NotActionNotResource

請看下面的代碼:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "s3:PutObject*" 
      ], 
      "Resource": [ 
       "arn:aws:s3:::mybucket/myfolder", 
       "arn:aws:s3:::mybucket/myfolder/*" 
      ] 
     }, 
     { 
      "Effect": "Deny", 
      "NotAction": [ 
       "s3:PutObjectAcl*", 
       "s3:PutObjectVersionAcl*" 
      ], 
      "NotResource": [ 
       "arn:aws:s3:::mybucket/myfolder", 
       "arn:aws:s3:::mybucket/myfolder/*" 
      ] 
     } 
    ] 
} 
0

嘗試:

"Resource": "arn:aws:s3:::my_bucket/example_directory/*" 
+0

感謝您的建議,但不幸的是它不起作用 - 也許這與我的存儲桶名稱爲「www.bucketname.com」格式有關? – satyrsynth

+0

沒有,應該不重要。澄清一下,您是否在嘗試保存策略時遇到錯誤?或者當您在應用策略之後嘗試放置對象時是否出現錯誤? –

+0

我看到你將工作策略從'Put *'改爲'PutObject'。我認爲這可能是問題的一部分。嘗試將其更改回'Put *'或添加's3:PutObjectAcl'權限。 –

相關問題