Sto eseguendo il caricamento multipart su S3 direttamente dal browser, ignorando il mio back-end.
Il mio codice JS invia una richiesta di scuotimento a mano a S3 (un POST), quindi carica il file in blocchi di 5 MB (un PUT per ciascuno) e alla fine, finalizza il file (un POST).
Funziona bene. Come puoi immaginare, ogni richiesta di S3 (hand-shake, upload di parti e finalizzazione) deve essere firmata. Ovviamente è fuori questione generare la firma in JS poiché esporrà la mia chiave segreta di AWS.
Quello che sto facendo finora è il seguente: prima di ogni richiesta di S3, invio una richiesta al mio back-end (a /sign?method=HTTPMethod&path=URLToSign
) restituisce la stringa di firma. In questo modo, tutte le credenziali AWS rimangono nel back-end, come dovrebbe essere.
La mia domanda è la seguente: È sicuro?
Mi rendo conto che il /sign
end-point potrebbe essere usato da chiunque per firmare qualsiasi cosa nel mio bucket S3. Posso ridurre i rischi assicurandoti che la richiesta di /sign
sia un XHR il cui referrer è il mio dominio.