Servir archivos almacenados en S3 en la aplicación express / nodejs

Tengo una aplicación donde las fotos de los usuarios son privadas. Guardo las fotos (también miniaturas) en AWS s3. Hay una página en el sitio donde el usuario puede ver sus fotos (es decir, miniaturas). Ahora mi problema es cómo sirvo estos archivos. Algunas opciones que he evaluado son:

Sirviendo archivos desde CloudFront (o AWS) usando la generación de url firmada. Pero el problema es que cada vez que el usuario actualiza la página, tengo que crear tantas URL firmadas nuevamente y cargarla. Por lo tanto, no podré almacenar las imágenes en el navegador, lo que hubiera sido una buena elección. ¿Hay alguna forma de hacerlo todavía en javascript? No puedo tener la validez de esas URL por más tiempo debido a problemas de seguridad. Y en segundo lugar, dentro de ese período de tiempo, si alguien consiguió esa URL, puede ver el archivo sin ejecutar la autenticación desde la aplicación.Otra opción es entregar el archivo desde mi propia aplicación Express después de transmitirlo desde los servidores S3. Esto me permite tener encabezados de caché http, por lo tanto habilitar el almacenamiento en caché del navegador. También se asegura de que nadie pueda ver un archivo sin estar autenticado. Idealmente, me gustaría transmitir el archivo y estoy alojando usando el proxy NGINX y retransmitiendo el otro lado de la transmisión a NGINX. Pero como veo, eso solo puede ser posible si el archivo existe en los mismos archivos del sistema. Pero aquí tengo que transmitirlo y volver cuando termine la transmisión. No quiero almacenar los archivos localmente.

¿No puedo evaluar cuál de las dos opciones sería una mejor opción? Quiero redirigir tanto trabajo como sea posible a S3 o cloudfront, pero incluso utilizando URLs individuales, también hago la solicitud primero a mis servidores. También quiero características de almacenamiento en caché.

Entonces, ¿cuál sería la forma ideal de hacer? ¿Con las respuestas para las preguntas particulares relacionadas con esos métodos?

Respuestas a la pregunta(4)

Su respuesta a la pregunta