2010-08-17 11 views
7

Non riesco a capirlo.Django Boto S3 Access

Ecco quello che voglio che accada ...

Ho un applicazioni che gli utenti caricare i file su S3 utilizzando boto e Django. Voglio che quei file siano privati ​​e accessibili solo attraverso la mia app usando le mie credenziali API.

Quindi, se un utente carica una foto tramite la mia app, l'unico modo in cui lui o chiunque altro può scaricarlo è tramite il suo account sulla mia app. È possibile, e se è così, come posso configurarlo usando le regole acl di boto. Non ho bisogno del codice, (si spera) riesco a capirlo, solo una panoramica di come farlo.

Ha senso? So che non lo sto comunicando molto bene e mi scuso in anticipo. Inoltre, grazie per l'aiuto.

+0

Il servizio S3 è un singolo account di proprietà dell'utente oppure i client forniscono i propri account S3 a cui accedono tramite il proprio sistema? – Andrew

+0

Un singolo account che possiedo – imns

risposta

7

I documenti per ACL di boto sono here. Suggerisco semplicemente di usare la "politica in scatola" private - poiché i tuoi utenti non hanno comunque account S3, è di gran lunga l'idea più semplice. La tua app dovrà ovviamente tenere traccia di quale utente "possiede" quali file (che dovrebbero essere un modello Django molto, molto semplice!).

5

Penso che tu stia cercando nell'area sbagliata per quello che vorresti realizzare. L'interfaccia ACL consente di concedere le autorizzazioni, ma esse dipendono dagli utenti che dispongono di account Amazon S3. @Alex Martelli ha suggerito di utilizzare la politica in scatola private e acconsento allo — in questo modo si impedirà ad ogni account tranne il proprio di poter accedere ai propri bucket/chiavi.

Al fine di imporre agli utenti il ​​solo download tramite la propria applicazione, basta passare un piccolo valore al parametro expires_in quando generating the URL. Gli utenti otterranno solo un link di download valido attraverso la tua applicazione e tale link verrà invalidato dopo il download.

2

django-storages ha già metodi per questo problema e ha un back-end di boto. Non tirare il tuo, tranne che per l'edificazione.

+0

Puoi fare riferimento alla documentazione della funzionalità ACL di django-storages? Non riesco a trovarne. –

+1

Non riesco a vedere alcun documento per questo, ma sembra che la classe S3BotoStorage stessa permetta di passare nomi di ACL predefiniti sia per il bucket ('bucket_acl') che per le nuove chiavi (' acl'). –