Estoy realizando la carga de varias partes en S3 directamente desde el navegador, es decir, sin pasar por mi servidor.
Mi código JS envía una solicitud a S3 (un POST), luego carga el archivo en fragmentos de 5 MB (un PUT para cada uno) y, finalmente, finaliza el archivo (un POST).
Eso funciona bien. Como puede adivinar, cada solicitud a S3 (apretón de manos, carga de partes y finalización) debe ser firmada. Por supuesto, es imposible generar la firma en JS, ya que expondría mi clave secreta de AWS.
Lo que estoy haciendo hasta ahora es lo siguiente: antes de cada solicitud a S3, envío una solicitud a mi propio back-end (a /sign?method=HTTPMethod&path=URLToSign
) que devuelve la cadena de la firma. De esta manera, todas las credenciales de AWS permanecen en el back-end, como debería ser.
Mi pregunta es la siguiente: ¿Es seguro?
Me doy cuenta de que cualquiera puede utilizar el punto final /sign
para firmar cualquier cosa en mi cubeta S3. Puedo reducir los riesgos asegurándome de que la solicitud /sign
sea un XHR cuyo referente sea mi propio dominio.