Трой Хант рассказал о неожиданно большом счёте за облачный хостинг Have I Been Pwned

Kate

Administrator
Команда форума
Основатель сервиса проверки утечек личных данных Have I Been Pwned (HIBP) Трой Хант заявил, что столкнулся с проблемой неожиданных счетов облачного хостинга. По его словам, счёт за услуги облачного хранилища Azure Table Storage за декабрь был намного выше обычного. Хант объяснил, в чём была суть проблемы.

b27a80740ace02ad5c35fba870746372.png

HIBP изначально построен на облакоориентированности, и Хант заложил в сервис современные облачные парадигмы Azure Table Storage для снижения стоимости. В проблемном месяце на аккаунте Ханта оказалось использовано неожиданно много трафика, и напротив сетевых услуг в инвойсе стояла сумма в 5 тысяч австралийских долларов.

Создатель проекта приводит в виде таблицы то, какой объём хранилища Azure используют отдельные службы на его аккаунте (Хант также хостит сайты Hack Yourself First и Why No HTTPS). Выяснилось, что 98% затрат приходится на пропускную способность во всех службах для данных, отправляемых из инфраструктуры Microsoft Azure (по цене 0,014 австралийского доллара за ГБ).

ce795f1981d45d855bb7ae49293c4c62.png

Ханта смутило то, что это аккаунт для хранилища, а не с веб-сайтами — поэтому большому объёму обмена данными с внешним миром взяться неоткуда. Он посчитал, что к проблеме привело начало взаимодействия Pwned Passwords с ФБР, а также загрузка сотен миллионов новых скомпрометированных паролей от Национального агентства по борьбе с преступностью Великобритании 20 декабря.

6a8cc79f6e05f599a16d33c7b2c8e6a0.png

Разработчик обратился к детальному изучению использования сетевых ресурсов. На графике за четыре часа видны нерегулярные последовательные всплески на уровне 17,3 ГБ. Трафик потребляли загружаемые хэши в Pwned Passwords. Эти данные Хант настроил для кэширования на Cloudflare, чтобы не нагружать сеть у хранилища.

2e272150a465f17900fcd56b44a05443.png

Хант изучил отдельные запросы и понял, что запросы приходили с IP-адреса Cloudflare, регулярно потребляя 17,3 ГБ трафика. Эта CDN должна была кэшировать эти данные и тем самым экономить трафик, но почему-то каждый раз заправшивала их из хранилища. Хант проверил эту догадку, временно зарезав трафик Cloudflare на уровне файрволла и пронаблюдав нормализацию потребления трафика до обычных значений.

Данные, переданные Cloudflare всего за 24 часа
Данные, переданные Cloudflare всего за 24 часа
Хант проверил, что такое особенное было в самих файлах, что могло вызвать подобное поведение Cloudflare. Он обнаружил отсутствие значения CacheControl и проверил его обработку правилами Cloudlfare. Реальная проблема крылась совсем в другом.

Разработчик HIBP связался со знакомым в Cloudflare и выяснил, почему хостинг-провайдер не кэширует эти zip-файлы. Как заметил сотрудник, в тарифном плане Ханта максимальный размер кэшируемого файла был установлен на уровне 15 ГБ.

b224fea629793f79e2e86cffdc713e7c.png

Хант перешел в Azure Storage Explorer и увидел, что два архива с хэшам SHA-1 больше 15 ГБ. Это и были проблемные файлы.

Для временного решения разработчик создал в Cloudflare правила для этих двух файлов и удалил прямые ссылки для скачивания с веб-сайта HIBP, оставив торренты, в которых уже было много сидов. Позднее Cloudflare поднял его лимит на кэширование, и Хант восстановил прямые ссылки.

a965a7f805c1032d9213245cdd1c35c7.png

Проблема была решена. Но всего за месяц Хант переплатил более 11 тысяч австралийских долларов (около 8 тысяч долларов США).

6cf7b225fa33f018b5fa59d9a9cfd83c.png

По словам разработчика, ему следовало лучше отслеживать пропускную способность в Azure, особенно в учетной записи хранения, обслуживающей наибольшее количество данных. Пропускная способность исходящего трафика никогда не превышала 50 ГБ в день при обычном использовании и стоила 0,7 австралийских доллара для исходящих данных, тогда как в декабре она выросла до 350 австралийских долларов в сутки.

Также Хант советует настраивать оповещения о расходах. Например, он знал еще до инцидента, что переплачивает за прием журналов из-за того, что App Insights хранит слишком много данных для часто используемых служб, а именно HIBP API.

c334397ae13531003bc2894fdb401c78.png

Разработчик попросил поддержать его финансово через страницу пожертвований на HIBP, чтобы он мог оплатить счет.

Пользователи в комментариях отметили, что нужно использовать собственный прокси-сервер перед выходом с Cloudflare в облако. Они советуют экземпляры Linode, Hetzner или другого веб-сервера, который поставляется с адекватным бесплатным уровнем пропускной способности, чтобы настроить обратный прокси-сервер nginx. Еще один вариант — использовать адекватный CDN, например, BunnyCDN.

В 2020 году Трой Хант открыл исходный код HIBP. До этого он рассказал, что отказался от идеи продать проект.

 
Сверху