Ви говорите, що хочете рішення без сервера. Але це означає, що ви не маєте можливості ставити будь-який "свій" код у циклі. (ПРИМІТКА. Після того, як ви дасте свій код клієнтові, це вже "їхній" код.) Блокування CORS не допоможе: люди можуть легко написати не-веб-інструмент (або веб-проксі), який додає правильний заголовок CORS для зловживання вашою системою.
Велика проблема полягає в тому, що ви не можете розрізняти різних користувачів. Ви не можете дозволити одному користувачеві перелічити / отримати доступ до його файлів, але заважаєте цим робити інших. Якщо ви виявите зловживання, ви нічого не можете з цим зробити, крім зміни ключа. (Імовірно, зловмисник може просто отримати знову.)
Ваша найкраща ставка - створити "користувача IAM" з ключем для вашого клієнта javascript. Дозвольте йому написати доступ лише до одного відра. (але в ідеалі не вмикайте операцію ListBucket, що зробить її більш привабливою для зловмисників.)
Якщо у вас був сервер (навіть простий мікроекземпляр за 20 доларів на місяць), ви можете підписати ключі на своєму сервері під час моніторингу / запобігання зловживань у режимі реального часу. Без сервера, найкраще, що ви можете зробити, - це періодично контролювати зловживання за фактом. Ось що я б робив:
1) періодично обертайте ключі для цього користувача IAM: Щовечора генеруйте новий ключ для цього користувача IAM та замінюйте найстаріший ключ. Оскільки є 2 клавіші, кожна клавіша дійсна протягом 2 днів.
2) включити журнал S3 та завантажувати журнали щогодини. Встановіть сповіщення про "занадто багато завантажень" та "занадто багато завантажень". Ви хочете перевірити як загальний розмір файлу, так і кількість завантажених файлів. І ви хочете відстежувати як загальні загальні підсумки, так і підсумки за IP-адресою (з нижчим порогом).
Ці перевірки можна зробити "без серверів", оскільки ви можете запустити їх на робочому столі. (тобто S3 робить всю роботу. Ці процеси просто там, щоб попередити вас про зловживання вашим ковшем S3, щоб у кінці місяця ви не отримали гігантський рахунок AWS.)