2016-12-03 78 views
0

我正在使用Python和Boto將圖像上傳到S3。如果我添加「任何經過身份驗證的AWS用戶」的受讓人並授予此受讓人上載/刪除權限,我可以使其工作。然而,我對這個網站上的文檔和幾個不同帖子的印象是,這將允許任何經過身份驗證的AWS用戶,而不僅僅是通過身份驗證的AWS用戶訪問我不想要的存儲區。然而,我無法上傳文件(403),如果我只給上傳/刪除權限的帳戶的所有者,即使我這樣的身份驗證:S3 Boto 403禁止訪問「任何經過身份驗證的AWS用戶」

s3 = boto.connect_s3(aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=AWS_SECRET_ACCESS_KEY) 

im = Image.open(BytesIO(urllib.urlopen(self.url).read())) 
filename = self.url.split('/')[-1].split('.')[0] 
extension = self.url.split('.')[-1] 
out_im2 = cStringIO.StringIO() 
im.save(out_im2, im.format) 
key = bucket.new_key(filename + "." + extension) 
key.set_contents_from_string(out_im2.getvalue(), headers={ 
    "Content-Type": extension_contenttype_mapping[extension], 
}) 
key.set_acl('public-read') 
self.file = bucket_url + filename + "." + extension 

我是什麼在這種情況下做錯了什麼?

回答

0

我至少找到了答案,如果不是我正在尋找的答案。我創建了一個特定於此存儲桶的用戶,並將該用戶添加到具有AmazonS3FullAccess權限的組中,我還必須創建該權限。然後我修改了博託請求,以便他們使用這個用戶,而不是賬戶的所有者,我說這個水桶政策:

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::111111111111:root" 
      }, 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::media.example.com", 
       "arn:aws:s3:::media.example.com/*" 
      ] 
     } 
    ] 
} 

這個工作對我來說,雖然我不知道如果桶政策是是否是解決方案的一部分,我仍然不知道爲什麼當我嘗試成爲所有者用戶時它不起作用。無論如何,這是更正確和安全的方式。

相關問題