Я создаю способ для клиентов загружать большие файлы на S3 для обработки.Защита S3 Bucket от повторных попыток от сторонних загрузок
Я построил механизм, который позволяет клиентам отправлять список файлов, которые у них есть, и взамен они получают HTTP-запрос, который им необходимо отправить на S3 вместе с прикрепленным файлом для одного из файлов, которые они предложили. Это устраняет нагрузку на загрузку с нашего сервера, и мы можем выбрать любой файл, который был загружен через уведомление из ведра S3.
Моя проблема заключается в повторных атаках. Если какая-либо сторона попросит отправить файл и получит запрос назад, он может повторять один и тот же запрос снова и снова, что требует нас в запросах. Мне не нужно перезаписывать файл, так как заголовок Contents-MD5
заставляет файл быть одним и тем же файлом (несмотря на конфликты). Мне также не нужно уведомлять о завершении загрузки файла.
Я думал о создании политики, которая позволяет загружать только определенный токен, который изменяется каждые X минут. Если кто-то захочет повторить атаку, они потерпят неудачу и должны будут повторно запросить у нас запрос S3 (что не получится, так как загрузка уже завершена заранее). Я не уверен, насколько наилучшей практикой было бы повернуть такой токен и беспокоиться о том, что это также вызовет множество законных запросов, которые слишком долго терпят неудачу.
Есть ли какой-либо другой механизм, о котором я не знаю, который должен использоваться в этом случае?
Я смущен этими двумя вещами, о которых вы упомянули: «HTTP-запрос, который им нужно отправить на S3», и «удаляет нагрузку на загрузки с нашего сервера»? если кто-то отправил файл в виде вложения на ваш сервер и вы его загрузили, как он освободит ваш сервер от нагрузки? я что-то упускаю? –
@ketan мы ожидаем много одновременных запросов на файлы в десятках МБ. если все они прибудут на сервер, это означало бы, что на нем должны быть тысячи долгоживущих связей. вместо этого мы быстро отвечаем с небольшим количеством информации, выгружая долгоживущее соединение с S3. –