2016-12-03 4 views
0

Ich verwende Python und Boto, um Bilder nach S3 hochzuladen. Ich kann es zum Laufen bringen, wenn ich einen Empfänger von "Any Authenticated AWS User" hinzufüge und diesem die Erlaubnis zum Hochladen/Löschen gebe. Mein Eindruck aus der Dokumentation und verschiedenen Posts auf dieser Website ist jedoch, dass dies buchstäblich jeden authentifizierten AWS-Benutzer, nicht nur diejenigen, die für mein Konto authentifiziert sind, auf den Bucket zugreifen kann, den ich nicht möchte. Allerdings bin ich nicht in der Lage, Dateien zu (403), wenn ich nur Upload geben/lösche Erlaubnis an den Besitzer des Kontos, obwohl ich so authentifizieren:S3 Boto 403 Verboten, es sei denn Zugriff auf "jeden authentifizierten AWS-Benutzer"

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 

Was bin ich in dieser Situation falsch?

Antwort

0

Ich fand zumindest eine Antwort, wenn nicht diejenige, nach der ich suchte. Ich habe einen für diesen Bucket spezifischen Benutzer erstellt und diesen Benutzer zu einer Gruppe mit AmazonS3FullAccess-Berechtigungen hinzugefügt, die ich ebenfalls erstellen musste. Dann modifiziert ich meine Boto Anfragen, so dass sie den Benutzer anstelle des Eigentümers des Kontos verwenden, und ich hinzugefügt, um diese Eimer Politik:

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

Das ist für mich gearbeitet, obwohl ich weiß nicht, ob der Eimer Politik war Teil der Lösung oder nicht, und ich weiß immer noch nicht, warum es nicht funktionierte, wenn ich als Besitzer Benutzer versuchte. Dies ist jedoch der angemessenere und sicherere Weg, um Dinge trotzdem zu tun.