2

Я создаю способ для клиентов загружать большие файлы на S3 для обработки.Защита S3 Bucket от повторных попыток от сторонних загрузок

Я построил механизм, который позволяет клиентам отправлять список файлов, которые у них есть, и взамен они получают HTTP-запрос, который им необходимо отправить на S3 вместе с прикрепленным файлом для одного из файлов, которые они предложили. Это устраняет нагрузку на загрузку с нашего сервера, и мы можем выбрать любой файл, который был загружен через уведомление из ведра S3.

Моя проблема заключается в повторных атаках. Если какая-либо сторона попросит отправить файл и получит запрос назад, он может повторять один и тот же запрос снова и снова, что требует нас в запросах. Мне не нужно перезаписывать файл, так как заголовок Contents-MD5 заставляет файл быть одним и тем же файлом (несмотря на конфликты). Мне также не нужно уведомлять о завершении загрузки файла.

Я думал о создании политики, которая позволяет загружать только определенный токен, который изменяется каждые X минут. Если кто-то захочет повторить атаку, они потерпят неудачу и должны будут повторно запросить у нас запрос S3 (что не получится, так как загрузка уже завершена заранее). Я не уверен, насколько наилучшей практикой было бы повернуть такой токен и беспокоиться о том, что это также вызовет множество законных запросов, которые слишком долго терпят неудачу.

Есть ли какой-либо другой механизм, о котором я не знаю, который должен использоваться в этом случае?

+0

Я смущен этими двумя вещами, о которых вы упомянули: «HTTP-запрос, который им нужно отправить на S3», и «удаляет нагрузку на загрузки с нашего сервера»? если кто-то отправил файл в виде вложения на ваш сервер и вы его загрузили, как он освободит ваш сервер от нагрузки? я что-то упускаю? –

+0

@ketan мы ожидаем много одновременных запросов на файлы в десятках МБ. если все они прибудут на сервер, это означало бы, что на нем должны быть тысячи долгоживущих связей. вместо этого мы быстро отвечаем с небольшим количеством информации, выгружая долгоживущее соединение с S3. –

ответ

1

обеспокоен тем, что это также вызовет много законных запросов, которые слишком долго терпят неудачу.

Вы можете отклонить это особое беспокойство, подписав URL-адреса с коротким сроком действия. Аутентификация и авторизация, включая проверку подписи, происходят в начале запроса. S3 не сократит загрузку или загрузку, потому что подпись истекает в середине длинного запроса.

Изменение правил ведра программным способом, многократно, на лету, безусловно, не является лучшей практикой.

Отметьте, что оно явно не задокументировано, но когда S3 отклоняет запрос, плата за каждый запрос (незначительная, но все же отличная от нуля), по-видимому, по-прежнему применяется, поэтому, если S3 откажется от избыточной перезаписи тот же объект с идентичным контентом вряд ли будет стоящим решением.

+0

То, что вы говорите, имеет смысл. Поскольку передача данных на S3 ничего не стоит, любое решение на этом уровне будет стоить так же, как и никакого решения. –