Мне было интересно, есть ли в Firestore внутренний механизм, блокирующий запросы, аналогичные DDOS, для предотвращения неожиданного роста расходов, или есть возможность для владельцев устанавливать ограничения на максимальные запросы / расходы.
Например, предположим, чтов Firestore есть коллекция, которая доступна, пока пользователь входит в мое приложение.
Если злоумышленник создает около 100 учетных записей пользователей и пишет сценарий, который постепенно и непрерывно обращается к одной записи из коллекции со скоростью примерно 10 ~ 50 т / с каждый с разных компьютеров (например, 100 случайных вычислительных экземпляров, по 1 для каждого пользователя)общее число обращений к чтению в день может превысить 216 миллионов запросов.
(100 пользователей * 25 средних TPS * 86400сек / день) = 216 миллионов.
Это составляет около 129 долларов США./ день, с текущей ценовой единицей $ 0,06 / 100 тыс. запросов.
Если злоумышленник использует запрос list
и получает доступ к 10 элементам одновременно, а не только к одному элементу, плата может возрасти до 1290 долларов в день.Если одна из коллекций позволяет пользователям запрашивать до 100 записей одновременно, это может составить $ 12900 в день.
Я могу быть слишком параноиком по этому поводу, но я хочу избежать неожиданного счета за 10 тысяч долларов, который накопился за ночь, и узнать об этом утром, когда я проснусь.Я знаю, что вероятность такого нападения невелика, но любой злоумышленник все же может выполнить его, если захочет.
Из-за этого риска я бы никогда не хотел показывать свою коллекцию Firestore напрямую клиенту.sdks (например, установите все правила безопасности чтения / записи в false) и предпочитаете использовать настраиваемые конечные точки и Firebase Admin SDK для управления ограничениями скорости ... но это только лишает всех преимуществ доступных клиентских sdks для уменьшения задержки и упрощениясобытия.
Есть ли в Firestore какой-либо механизм предотвращения такого рода проблем?Или это разрешает запросы ограничения скорости, подобные максимальным пределам емкости чтения / записи в AWS DynamoDB?