2010-08-17 19 views
7

No puedo resolver esto.Django Boto S3 Acceso

Esto es lo que quiero que suceda ...

Tengo una aplicaciones que los usuarios subir archivos a S3 usando boto y Django. Quiero que esos archivos sean privados y solo se pueda acceder a ellos a través de mi aplicación usando mis credenciales de API.

Así que si un usuario sube una foto a través de mi aplicación, la única forma en que él o cualquier otra persona puede descargarla es a través de su cuenta en mi aplicación. ¿Es esto posible y, de ser así, cómo lo configuro usando las reglas de Acl de Boto? No necesito el código, (con suerte) puedo resolverlo, solo un repaso de cómo hacerlo.

¿Tiene esto sentido? Sé que no lo estoy transmitiendo muy bien y me disculpo de antemano. Además, gracias por la ayuda.

+0

¿Es el servicio S3 una cuenta única de su propiedad, o los clientes proporcionan sus propias cuentas S3 a las que acceden a través de su sistema? – Andrew

+0

Una sola cuenta que poseo – imns

Respuesta

7

Los documentos para las ACL del boto son here. Sugiero simplemente usar la "política en lata" private, ya que sus usuarios no tienen cuentas de S3 de todos modos, es de lejos la idea más simple. Su aplicación, por supuesto, tendrá que hacer un seguimiento de qué usuario "posee" qué archivos (¡lo que debería ser un modelo de Django muy, muy simple!).

5

Creo que es posible que esté buscando en el área incorrecta lo que desea lograr. La interfaz ACL le permite otorgar permisos, pero dependen de los usuarios que tengan cuentas de Amazon S3. @Alex Martelli sugirió usar la política enlatada private, y estoy de acuerdo — esto evitará que cualquier cuenta, excepto la suya, pueda acceder a sus cubos/claves.

Para hacer que los usuarios solo puedan descargar a través de su propia aplicación, simplemente pase un pequeño valor al parámetro expires_in cuando generating the URL. Los usuarios solo obtendrán un enlace de descarga válido a través de su aplicación, y ese enlace se invalidará después de su descarga.

2

django-storages ya tiene métodos para este problema y tiene un backend boto. No enrolles el tuyo a excepción de la edificación.

+0

¿Podría apuntar a la documentación de la funcionalidad ACL de django-storageings? No puedo encontrar ninguno. –

+1

No puedo ver ningún documento para él, pero parece que la clase S3BotoStorage sí mismo le permite pasar nombres de ACL enlatados para el cubo ('bucket_acl') y las nuevas claves (' acl'). –

Cuestiones relacionadas