Я реализую прямую загрузку файлов с клиентской машины в Amazon S3 через REST API, используя только JavaScript, без какого-либо кода на стороне сервера. Все работает нормально, но меня беспокоит одна вещь...
Когда я отправляю запрос API-интерфейсу Amazon S3 REST, мне нужно подписать запрос и поместить подпись в заголовок Authentication
. Чтобы создать подпись, я должен использовать свой секретный ключ. Но все происходит на стороне клиента, поэтому секретный ключ может быть легко обнаружен из источника страницы (даже если я обфускации/шифрования моих источников).
Как я могу справиться с этим? И это вообще проблема? Может быть, я могу ограничить использование частного ключа только для вызовов REST API из определенного CORS Origin и только для методов PUT и POST или, возможно, для ссылки только на S3 и конкретном ведре? Могут ли быть другие методы проверки подлинности?
"Безсерверное" решение идеально, но я могу рассмотреть возможность использования некоторых обработок serveride, исключая загрузку файла на мой сервер, а затем отправку на S3.