У меня есть общедоступная корзина S3, которая служит решением для хранения больших файлов (ГБ), которые я отправляю коллегам и клиентам. Файлы автоматически удаляются через несколько недель.
Проблема с этой настройкой заключается в том, что я могу понести значительные расходы, если кто-то запустит DDOS и массово загрузит одну из моих ссылок. Я могу в конечном итоге заплатить огромную плату за исходящую сеть, и я хочу избежать этого.
Одним из решений может быть запуск лямбда-функции всякий раз, когда кто-то загружает объект, и увеличение счетчика DynamoDB для объекта. Если счетчик превысит разумный порог (скажем, 50 загрузок), функция Lambda сделает файл закрытым, чтобы избежать дополнительных сборов.
Как я могу настроить срабатывание лямбда-функции, когда кто-то запрашивает файл из определенного сегмента S3?
Вместо того, чтобы сделать их общедоступными для кто угодно чтобы скачать, я бы сделал их частными и распространял только предварительно подписанные URL своим коллегам и клиентам.
Вы можете создать простой портал, на котором ваши клиенты будут входить в систему и получать предварительно подписанную ссылку на объект S3, срок действия которого истекает, например через час. Если им понадобится загрузить его снова, они могут получить новую ссылку в любое время. Это даст вам полный контроль и возможность проверки того, кто может загружать ваши объекты S3, не рискуя при этом огромными комиссиями за исходящий трафик.
Проверь это: https://aws.nz/best-practice/s3-presigned-url/
Надеюсь, это поможет :)
Как упоминалось в @MLu, вы можете использовать предварительно подписанные URL-адреса. Вы также можете сделать что-то вроде этого: