quisiera proteger a mis documentos s3 por detrás de los carriles aplicación de tal manera que si voy a:aplicación Rails para la obtención de documentos S3
www.myapp.com/attachment/5 que debe autenticar al usuario antes de mostrar/descargando el documento.
He leído preguntas similares en stackoverflow pero no estoy seguro de haber llegado a conclusiones.
Por lo que he leído, hay varias cosas que puede hacer para "proteger" sus documentos S3.
1) Ofender la URL. He hecho esto. Creo que esto es algo bueno que hacer, así que nadie puede adivinar la URL. Por ejemplo, sería fácil "recorrer" la URL si sus URL S3 son obvias: https://s3.amazonaws.com/myapp.com/attachments/1/document.doc. Tener una URL como: https://s3.amazonaws.com/myapp.com/7ca/6ab/c9d/db2/727/f14/document.doc parece mucho mejor. Esto es ideal pero no resuelve el problema de pasar URL por correo electrónico o sitios web.
2) Utilizar una dirección URL que expira como se muestra aquí: Rails 3, paperclip + S3 - Howto Store for an Instance and Protect Access Para mí, sin embargo, esto no es una gran solución ya que la URL está expuesto (aunque solo sea por un corto período de tiempo) y otro usuario podría quizás con el tiempo volver a utilizar el URL rápidamente Debe ajustar el tiempo para permitir la descarga sin proporcionar demasiado tiempo para copiar. Simplemente parece una solución incorrecta.
3) Proxy la descarga del documento a través de la aplicación. Al principio intenté simplemente usar send_file: http://www.therailsway.com/2009/2/22/file-downloads-done-right, pero el problema es que estos archivos solo pueden ser archivos estáticos/locales en su servidor y no se sirven a través de otro sitio (S3/AWS). Sin embargo, puedo usar send_data y cargar el documento en mi aplicación y enviar inmediatamente el documento al usuario. El problema con esta solución es obvio: el doble de ancho de banda y el doble de tiempo (para cargar el documento en mi aplicación y luego volver al usuario).
Estoy buscando una solución que brinde la seguridad total del n. ° 3 pero no requiere el ancho de banda adicional y el tiempo de carga. Parece que Basecamp está "protegiendo" documentos detrás de su aplicación (a través de la autenticación) y asumo que otros sitios están haciendo algo similar, pero no creo que estén usando mi solución n. ° 3.
Las sugerencias serían muy apreciadas.
ACTUALIZACIÓN:
Fui con una cuarta solución:
4) Utilizar políticas depósito de Amazon para controlar el acceso a los archivos en función de remitente: http://docs.amazonwebservices.com/AmazonS3/latest/dev/index.html?UsingBucketPolicies.html
actualización de nuevo:
El pozo # 4 se puede solucionar fácilmente mediante la herramienta de desarrollo de navegadores. Así que aún estoy en busca de una solución sólida.
Gracias por la publicación. ¿No es esa mi solución # 2? Sé que es viable, pero parece que no es un enfoque verdaderamente seguro. Por alguna razón, siento que deja un agujero (incluso si es bastante pequeño). ¿Alguna sugerencia sobre cómo implementar mi # 3 sin el problema del doble ancho de banda? –
Bueno, es lo más seguro posible. Es posible que pueda usar un proxy inverso de algún tipo para obtener esto, pero el ancho de banda se usará en algún lugar con esto. Solo establecería el tiempo de espera en 1 min. –
Tenía la esperanza de que me faltaba alguna solución relacionada con algún plugin de apache en el que pudiera redirigirse en función de la autenticación de RoR. ¿El tiempo de espera (sin importar cuán pequeña sea la ventana que intente establecer) aún permite cierto nivel de inseguridad? .... Sin embargo, estoy de acuerdo en que esta puede ser la única respuesta. Si nadie más responde, estableceré la tuya como la respuesta correcta. Gracias. –