2016-12-03 4 views
0

Я использую Python и Boto для загрузки изображений на S3. Я могу заставить его работать, если я добавлю грантополучателя «Any Authenticated AWS User» и предоставит этому получателю разрешение на загрузку/удаление. Однако мое впечатление от документации и нескольких разных сообщений на этом сайте заключается в том, что это позволит буквально любому аутентифицированному пользователю AWS, а не только тем, которые были аутентифицированы для моей учетной записи, получить доступ к ведру, чего я не хочу. Тем не менее, я не могу загрузить файлы (403), если я только дать загружать/удалять разрешение на владельца счета, хотя я аутентифицировать так:S3 Boto 403 Запрещено, если доступ не предоставлен «любому пользователю Authenticated 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, которые я также должен был создать. Тогда я изменил мои запросы Boto так, что они используют эту пользователь вместо владельца счетов, и я добавил это ведро политики:

{ 
    "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/*" 
      ] 
     } 
    ] 
} 

Это работало для меня, хотя я не знаю, если политика была Ковш часть решения или нет, и я до сих пор не знаю, почему это не сработало, когда я пытался как пользователь владельца. Это, однако, более правильный и безопасный способ делать что-то в любом случае.