2016-12-03 1 views
0

J'utilise Python et Boto pour télécharger des images vers S3. Je peux le faire fonctionner si j'ajoute un bénéficiaire de "Tout utilisateur AWS authentifié" et donne à ce concessionnaire la permission de télécharger/supprimer. Cependant, mon impression de la documentation et de plusieurs messages différents sur ce site est que cela permettrait littéralement à tout utilisateur AWS authentifié, pas seulement ceux authentifiés sur mon compte, d'accéder au bucket, ce que je ne veux pas. Cependant, je ne peux pas télécharger des fichiers (403) si je ne donne upload/supprimer l'autorisation au propriétaire du compte, même si j'authentifie comme ceci:S3 Boto 403 Interdit à moins que l'accès soit donné à "tout utilisateur AWS authentifié"

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 

Qu'est-ce que je fais mal dans cette situation?

Répondre

0

J'ai trouvé une réponse au moins, sinon celle que je cherchais. J'ai créé un utilisateur spécifique à ce compartiment et ajouté cet utilisateur à un groupe avec des autorisations AmazonS3FullAccess, que j'ai également dû créer. Ensuite, je modifié mes demandes de boto afin qu'ils utilisent cet utilisateur au lieu du titulaire du compte, et j'ajouté cette politique de seau:

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

Cela a fonctionné pour moi, même si je ne sais pas si la politique du seau était partie de la solution ou non, et je ne sais toujours pas pourquoi cela n'a pas fonctionné quand je tentais en tant qu'utilisateur propriétaire. C'est, cependant, la façon la plus appropriée et la plus sûre de faire les choses de toute façon.