Чаще всего ошибки связаны с безопасностью (слишком широкие права и хранение ключей в коде), неучетом сетевой природы S3 (отсутствие ретраев, игнорирование пагинации, модели консистентности) и неэффективной работой с объектами (без multipart upload, кеша и корректных метаданных). Это приводит к утечкам данных, неожиданным ошибкам в проде и лишним затратам. Хорошая интеграция с S3 начинается с правильных IAM-политик, безопасных креденшалов и устойчивых сетевых паттернов.
При интеграции с S3 разработчики нередко воспринимают его как «обычный диск», забывая, что это объектное хранилище, доступное по сети. Из-за этого упускают вопросы безопасности, отказоустойчивости и производительности, что приводит к проблемам в бою и росту стоимости эксплуатации.
s3:* на весь бакет, открывают публичный доступ к приватным данным или полагаются на ACL вместо продуманной комбинации IAM-политик и bucket policy. В результате любой с неправильной ролью или даже из интернета может прочитать или изменить данные.access key и secret key попадают в репозиторий, конфиги или фронтенд. Вместо этого нужно использовать переменные окружения, секрет-хранилища, роли для сервисов и краткоживущие креденшалы, чтобы утечка кода не приводила к компрометации всего аккаунта.ListObjects/ListObjectsV2 один раз и предполагают, что вернутся все объекты. Правильный подход — использовать пагинатор или вручную проходить по страницам, пока есть маркер продолжения / IsTruncated, иначе часть объектов просто «теряется» в логике приложения.tenant/date/type/...). Это усложняет поиск, листинг, настройку правил жизненного цикла и миграции, а также может негативно влиять на производительность операций со списками.Content-Type и метаданные: загружают файлы без указания Content-Type и необходимых заголовков, из-за чего браузеры и клиенты неправильно их обрабатывают. Часто забывают про заголовки кеширования, шифрование, класс хранения и другие метаданные, влияющие и на поведение, и на стоимость хранения.ETag, не сравнивают размеры после загрузки и скачивания. В результате частичные загрузки, сетевые сбои или повреждения остаются незамеченными до тех пор, пока ошибка не проявится в продакшене.Практический минимум для надежной интеграции с S3: безопасно управлять креденшалами, настраивать минимально необходимые IAM-права, аккуратно работать со списками объектов (с пагинацией) и оборачивать все сетевые операции в повторные попытки с логированием и проверкой целостности.
Ниже пример безопасной и устойчивой загрузки объекта в S3 с указанием Content-Type, повторными попытками и использованием переменных окружения для ключей:
И пример корректного обхода большого списка объектов с использованием пагинации, чтобы не полагаться на один вызов ListObjectsV2 и не терять данные:
Отметьте свой прогресс