2012-08-11 15 views
14

Estoy tratando de entender exactamente cómo configurar un depósito que generalmente es privado pero permite cargas anónimas con restricciones. Los criterios específicos son:S3 - Carga anónima - Prefijo de clave

  • El depósito es en su mayoría privado y requiere mi clave/secreto para agregar/eliminar/actualizar/enumerar archivos.
  • Existe un "directorio" (es decir, prefijo de clave) llamado "entrante" que permitirá a los usuarios anónimos cargar contenido pero no hacer una lista.
  • El depósito tiene un día de vencimiento en todo el contenido. Como extra, me gustaría que el directorio "entrante" tenga una caducidad de 30 minutos, aunque si eso no es posible, un vencimiento de un día para toda la cubeta servirá.
  • Los archivos con el prefijo "entrante" tendrían un tamaño limitado por objeto.
  • También me gustaría limitar los objetos con el prefijo "entrante" solo a ciertos tipos de contenido.

preguntas que tengo son:

  1. sería mejor simplemente crear dos cubos. Una para mis archivos entrantes y otra para mi propio procesamiento y almacenamiento personal.
  2. ¿Cómo se vería el código para que un archivo se cargue en el directorio entrante? Idealmente, me gustaría evitar una dependencia en una biblioteca S3 y simplemente usar llamadas HTTP. Puntos de bonificación si me puedes mostrar la dirección correcta en Ruby. :)

El vencimiento parece configurable a través de la consola de administración S3, pero solo se limita a 1 día como la fecha de caducidad más pequeña. ¿Puedo poner un decimal en ese campo? Los permisos parecen aplicarse a un segmento completo en lugar de solo un prefijo. Esto me hace pensar que solo necesito dos cubos. Si sigo con un paquete, creo que necesito crear una política de IAM y aplicar eso al paquete, pero va más allá de mi conocimiento limitado de S3 y quiero asegurarme de no dejar un agujero en los permisos que permiten a las personas hacer más de lo que quiero que lo hagan.

He encontrado mucha documentación sobre cómo hacer cargas anónimas en S3 a través de una publicación de formulario HTTP. Podría adaptar eso al código, pero me pregunto que, dado que estoy en el código de la aplicación (y no en una publicación de formulario HTTP), ¿hay alguna manera más fácil?

+0

para 2, ¿ha considerado configurar s3 con clip de carrierwave? – rb512

+0

Gracias por la sugerencia. Sí, los he usado antes, aunque creo que, en general, todos funcionan de forma autenticada (no anónima). Puede haber algunos complementos para hacer el anonimato, pero realmente solo espero que S3 sea una interfaz REST y que estoy permitiendo cargas anónimas que una simple solicitud HTTP sin una biblioteca de terceros podría hacer el truco. Pero tratar de analizar la documentación de Amazon ha sido más laborioso de lo que esperaba, así que me encantaría que alguien me señale la dirección correcta. –

+0

No lo entendí del todo. Por anónimo, ¿quiere decir que quiere poder cargar archivos sin proporcionar sus credenciales s3? No creo que eso sea posible. – rb512

Respuesta

12

Lo que describes se puede implementar en un solo segmento. Puede permitir el acceso anónimo a una carpeta específica a través de la política de depósito, marque examples o use AWS Policy Generator. En su caso podría ser algo como esto:

{ 
    "Version": "2008-10-17", 
    "Id": "Policy1346097257207", 
    "Statement": [ 
     { 
      "Sid": "Allow anonymous upload to /incoming", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:PutObject", 
      "Resource": "arn:aws:s3:::[your_bucket]/incoming/*" 
     } 
    ] 
} 

También es posible subir archivos a su cubo de forma anónima mediante un simple formulario HTML:

<form action="http://[your_bucket].s3.amazonaws.com/" method="post" enctype="multipart/form-data"> 
    <input type="hidden" name="acl" value="public-read" /> 
    Name: <input type="text" name="key" value="incoming/[filename]" /><br/> 
    File: <input type="file" name="file" /> <br /> 
    <input type="submit" name="submit" value="Upload" /> 
</form>​ 
archivos basados ​​

navegador S3 se describen here en detalle .

+0

No he comprobado todo esto para ver si funciona como quiero, pero la recompensa está por terminar pronto y no quería que no obtuviera los puntos si lo tenía todo bien. Se ve bien y hará algunas pruebas pronto. ¡Gracias! –

3

Recientemente, dediqué un poco de tiempo a descifrar los pormenores de las cargas anónimas en S3, y me encontré con esta pregunta también. Escribí sobre la solución que funcionó para mí en cierta extensión en:

https://gist.github.com/jareware/d7a817a08e9eae51a7ea

Básicamente se puede lograr lo que se quiere, excepto que las solicitudes autenticadas de gestión no va a funcionar (o al menos no soy consciente de una solución).

Sé que esta es una pregunta anterior pero solo la documenta aquí en caso de que ayude a otra persona.