Представьте, что вы создали пустую, приватную корзину (их ещё называют «бакетами» — от «bucket») AWS S3 в выбранном вами регионе. Каким будет счёт за услуги AWS на следующее утро?
![Как пустой S3 бакет может вас обанкротить - 1 Как пустой S3 бакет может вас обанкротить - 1](https://www.pvsm.ru/images/2025/02/10/kak-pustoi-S3-baket-mojet-vas-obankrotit.png)
Несколько недель назад я начал работу над прототипом системы индексирования документов для моего клиента. Я создал одну корзину S3 в регионе eu-west-1 и загрузил туда несколько файлов для тестирования. Через два дня я проверил мою страницу выставления счетов AWS, заглянув туда, преимущественно, для того, чтобы проверить, что то, чем я занимаюсь, нормально укладывается в лимиты бесплатного тарифного плана. Но, судя по тому, что я там увидел, ни о какой нормальности речи не шло. Мой счёт превышал $1300, а в консоли выставления счетов были видны сто миллионов PUT-запросов к корзине S3, выполненных всего за один день!
![Сведения о плате за использование S3 в день с разбивкой по регионам https://miro.medium.com/v2/resize:fit:700/1*ktXAgHa0JfQeuIANa5MVbw.png](https://www.pvsm.ru/images/2025/02/10/kak-pustoi-S3-baket-mojet-vas-obankrotit-2.png)
Откуда приходят эти запросы?
AWS, по умолчанию, не логирует запросы, выполняемые к корзинам S3. Но их логирование можно включить, используя AWS CloudTrail или S3 Server Access Logging. После включения логов CloudTrail я сразу же обнаружил тысячи запросов на запись, исходящих как от множества аккаунтов AWS, так и из-за пределов этой платформы.
Но почему посторонние заваливают мою корзину S3 неавторизованными запросами?
Может, это было что-то вроде DDoS-атаки на мой аккаунт? Или — это была атака на AWS? Как оказалось — один из популярных опенсорсных инструментов по умолчанию настроен на сохранение бэкапов в S3. И разработчики этого инструмента использовали в виде текстовой заглушки для имени корзины… то же имя, которым я назвал свою корзину. Это значит, что любой установленный экземпляр инструмента, в котором применяется его стандартная конфигурация, пытается сохранить бэкап в мою корзину S3!
Обратите внимание на то, что я не могу раскрыть название инструмента, о котором рассказываю, так как это подвергнет компании, затронутые проблемой, угрозе утечки данных (позже я к этому вернусь).
В результате получается, что полчища неправильно настроенных систем пытаются сохранить свои данные в моей приватной корзине S3. Но почему кто-то должен платить за эту ошибку? А вот почему.
S3 берёт деньги за неавторизованные входящие запросы
Это подтверждает общение с поддержкой AWS. Вот что они написали:
Да, S3 берёт плату и за неавторизованные запросы (4xx) [1]. Это — ожидаемое поведение системы.
Предположим, я сейчас открою терминал и введу команду такого вида:
aws s3 cp ./file.txt s3://your-bucket-name/random_key
Мне достанется сообщение об ошибке AccessDenied, а владелец корзины будет тем самым человеком, который заплатит за этот запрос. И мне, чтобы это сделать, даже не нужна учётная запись AWS.
Меня беспокоил ещё один вопрос: почему запросы, оплата которых составляет большую часть счёта, поступили из региона us-east-1? У меня нет ни единой корзины в этом регионе! Ответ на этот вопрос заключается в том, что S3-запросы без указанного региона, по умолчанию, считаются относящимися к региону us-east-1, и, при необходимости, перенаправляются. А владелец корзины доплачивает и за эти перенаправленные запросы.
Вопрос безопасности
Теперь мы разобрались с тем, почему мою корзину S3 заваливали миллионами запросов, и с тем, почему, в итоге, это привело к огромному счёту. В этот момент у меня появилась ещё одна идея, которую мне захотелось исследовать. Если все эти неправильно настроенные системы попытаются отправить бэкапы своих данных в мою корзину S3 — почему бы мне просто не позволить им это сделать? Я открыл свою корзину для публичного доступа на запись и, менее чем за 30 секунд, собрал более 10 Гб данных. Конечно, я не могу рассказать о том, чьи это были данные. Но меня прямо-таки поразило то, как невинный недосмотр в настройках может привести к опасной утечке данных!
Какие уроки я из всего этого вынес?
Урок 1: кто угодно, знающий имя любой из ваших корзин S3, может задрать ваши счета в AWS до какого угодно уровня.
Единственный способ этому помешать — удалить корзину. Если к корзине обращаются напрямую через API S3 — её нельзя защитить с помощью служб наподобие CloudFront или WAF. Стоимость стандартных PUT-запросов S3 составляет $0,005 за 1,000 запросов, но всего один компьютер легко способен выполнить тысячи подобных запросов в секунду.
Урок 2: добавление случайного суффикса к именам корзин может улучшить безопасность.
Этот подход позволяет снизить риск обращений к корзинам, исходящих от неправильно настроенных систем, а так же — риск целенаправленных атак. Давая имена корзинам S3, стоит, как минимум, избегать использования коротких, распространённых слов.
Урок 3: если требуется выполнять много запросов к S3 — стоит проверить, задан ли явным образом нужный регион AWS.
Это позволит избежать дополнительных расходов на перенаправление запросов API S3.
Итоги
-
Я сообщил о результатах моих изысканий тем, кто поддерживает уязвимый опенсорсный инструмент. Они быстро исправили стандартную конфигурацию, но внести исправления в уже установленные копии инструмента они не могут.
-
Я уведомил о произошедшем команду безопасности AWS. Я предложил ей ограничить возможность использования несчастного имени корзины S3 для того, чтобы, во-первых — оградить их пользователей от неожиданных трат, и во-вторых — чтобы защитить компании, на которые подействовала эта проблема, от утечек данных. Но команда безопасности не расположена решать проблемы настроек сторонних продуктов.
-
Я сообщил о проблеме двум компаниям, данные которых нашёл в своей корзине. Они не ответили на мои электронные письма, возможно, сочтя их спамом.
-
Сотрудники платформы AWS были так добры, что аннулировали мой счёт. Правда, они особо отметили, что сделано это было в порядке исключения.
Спасибо, что нашли время и прочли мой материал. Надеюсь, он поможет вам держаться подальше от неожиданных расходов в AWS.
О, а приходите к нам работать?
![💰](https://s.w.org/images/core/emoji/11/svg/1f4b0.svg)
Мы в wunderfund.io занимаемся высокочастотной алготорговлей с 2014 года. Высокочастотная торговля — это непрерывное соревнование лучших программистов и математиков всего мира. Присоединившись к нам, вы станете частью этой увлекательной схватки.
Мы предлагаем интересные и сложные задачи по анализу данных и low latency разработке для увлеченных исследователей и программистов. Гибкий график и никакой бюрократии, решения быстро принимаются и воплощаются в жизнь.
Сейчас мы ищем плюсовиков, питонистов, дата-инженеров и мл-рисерчеров.
Автор: mr-pickles