Seguridad de configurar el acceso al depósito S3 solo desde un sitio web en particular

3

Leí sobre configurando el acceso a S3 solo desde un sitio web en particular en Amazon Docs. Y cito:

  

Supongamos que tiene un sitio web con nombre de dominio (www.example.com o   example.com) con enlaces a fotos y videos almacenados en su cubo S3,   examplebucket. Por defecto, todos los recursos de S3 son privados, por lo que solo   La cuenta de AWS que creó los recursos puede acceder a ellos. Permitir   Lea el acceso a estos objetos desde su sitio web, puede agregar un cubo   política que permite el permiso s3: GetObject con una condición, usando el   aws: clave de referencia, que la solicitud de obtención debe originarse a partir de   páginas web.

Este es exactamente mi requisito.

Pero esto no me parece convincente desde el punto de vista de la seguridad. ¿Alguien no puede ejecutar algún JavaScript desde el navegador mientras mantengo mi sitio web abierto y accedo a estos objetos o de alguna otra forma esto puede romperse?

En general, ¿puedo asegurarme de que no se podrá acceder a estos archivos de otra forma que no sea posible acceder a ellos a través del sitio web?

P.S. : Realmente no soy un experto en seguridad, solo trato de confirmar absolutamente porque intuitivamente sentí que no es seguro. Supongo que el intruso tiene de alguna manera la lista de archivos (nombres clave absolutos) almacenada en mi cubo.

    
pregunta Amit Tomar 02.09.2016 - 11:16
fuente

1 respuesta

4

Su intuición es correcta de la manera más importante: esto no es, en ningún sentido significativo, "seguro".

Pero la forma en que se derrotó no es exactamente lo que imaginas.

Cuando hace clic en un enlace en una página web, o su navegador carga una imagen incrustada en una página, su navegador se conecta al servidor web y envía una solicitud. En la solicitud se encuentran los encabezados HTTP, que incluyen uno llamado Referer: . Si bien no siempre está presente (por varias razones que pueden estar fuera del alcance de esta respuesta), el valor que se acompaña es la URL de la página que estaba viendo, en la misma pestaña del navegador, cuando se hizo clic en el enlace o en la imagen. cargado.

La creación de una política de este tipo en S3 implementa el control de acceso mediante el ajuste de cadenas de este valor, enviado por el navegador y casi sin ningún valor desde una perspectiva de seguridad.

Por lo tanto, Javascript en otra pestaña mientras tu página está abierta no es realmente la preocupación. La preocupación es que un usuario malintencionado realice solicitudes con un encabezado forjado Referer: , que se realiza fácilmente con herramientas de prueba como curl ( curl -v http://example-bucket.s3.amazonaws.com/secret-image.jpg -H 'Referer: http://example.com/good-guy.html' ) o complementos del navegador. Ahora el cubo dice "oh, estás en la página de Good Guy de example.com? Aquí está el archivo de imagen secreto que pediste".

Entonces, con una limitación tan obvia, ¿para qué es realmente útil este mecanismo?

No está asegurando su contenido.

Sin embargo, es útil para evitar la difusión generalizada de enlaces a su contenido, incorporando enlaces a sus activos en sitios de terceros, lo que equivale a un robo de su ancho de banda. Una vez me encontré con un sitio de estafa donde el creador había buscado en Google páginas que mostraban imágenes de tarjetas de regalo. Encontró tales imágenes en uno de mis sitios, pero no las descargó ... incrustó enlaces a mis imágenes en su estafa HTML. Una configuración que niega el referer reduce significativamente tales molestias ... pero ya que es adecuada para muy poco más.

Con S3, puede generar URL firmadas sobre la marcha (asumiendo que su sitio es dinámico) e incrustarlas en el html. Esta es quizás la solución más efectiva, ya que especifica el período de tiempo durante el cual la URL es válida, y estas URL son inmunes a la manipulación hasta el punto de infactibilidad computacional. CloudFront, junto con S3, le permite crear cookies firmadas que logran resultados similares pero sin necesidad de firmar cada enlace individual en cada página que renderiza, pero URL firmadas individuales para objetos con un tiempo de caducidad muy corto, usando HTTPS y entregados a través de HTTPS son un mecanismo efectivo de control de acceso, a diferencia de las políticas de páginas de referencia.

    
respondido por el Michael - sqlbot 02.09.2016 - 15:44
fuente

Lea otras preguntas en las etiquetas