pimenov.ai

База знаний

Как выбрать управляемое S3-хранилище: российские и зарубежные варианты

Практическое руководство по выбору S3-хранилища: российские и зарубежные сервисы, расходы, совместимость, риски оплаты и тест перед миграцией.

Управляемое S3-хранилище подходит для файлов приложений, медиаконтента, архивов и резервных копий. Это руководство помогает выбрать сервис по реальному сценарию, посчитать полную стоимость и проверить совместимость до переноса данных.

📌
Актуальность: публичная документация и страницы тарифов проверены 13 августа 2026 года. Регистрацию, способ оплаты и сетевую доступность нужно проверить на тестовом аккаунте: они зависят от страны, банка, типа клиента и сети.

Содержание

  1. Короткий выбор по сценарию
  2. Что означает совместимость с S3
  3. Сравнение провайдеров
  4. Как считать полную стоимость
  5. Юридические и операционные ограничения
  6. Базовый smoke test через AWS CLI
  7. Расширенная проверка совместимости
  8. Защита данных и выход из сервиса
  9. Финальный чеклист

Короткий выбор по сценарию

Это отправные точки для тестирования, а не рейтинг победителей.

  • Российский сайт или приложение: начните с Selectel, Yandex Object Storage, Timeweb Cloud и VK Object Storage. Смотрите на близость к вычислительной инфраструктуре, оплату, API и стоимость выдачи файлов.
  • Корпоративный проект: добавьте Cloud.ru и MWS. Запросите SLA, размещение данных, журналирование, поддержку и условия неизменяемого хранения.
  • Резервная копия: для российского контура сравните холодные классы Selectel и Yandex. Для независимой зарубежной копии проверьте Backblaze B2, Wasabi и Hetzner.
  • Международная раздача контента: сравните Cloudflare R2, DigitalOcean Spaces и хранилище рядом с вашим CDN. Для пользователей в России обязательно протестируйте реальный маршрут доставки.
  • Максимальная полнота S3 API и экосистемы: используйте Amazon S3 как контрольную точку сравнения.
⚖️
Не выбирайте сервис только по цене хранения. Для медиаконтента решающим может оказаться исходящий трафик, для архива — минимальный срок, а для приложения — конкретные методы S3 API.

Что означает совместимость с S3

Amazon S3 — объектное хранилище и набор API, ставший отраслевым стандартом. Данные хранятся как объекты внутри бакетов. У каждого объекта есть ключ, содержимое и метаданные.

S3-совместимые сервисы позволяют подключать AWS CLI, SDK, rclone, restic, Kopia и приложения с настраиваемым endpoint. Совместимость бывает неполной. Провайдер может не поддерживать Object Lock, события бакета, отдельные политики доступа, CORS, lifecycle или некоторые варианты multipart upload.

Перед сравнением зафиксируйте:

  • объём и средний размер объектов;
  • число загрузок и чтений в месяц;
  • объём выдачи в интернет;
  • срок хранения и частоту удаления;
  • обязательные методы API;
  • требования к региону, локализации и трансграничной передаче;
  • целевые RPO и RTO для резервных копий;
  • способ массовой выгрузки при смене провайдера.

Сравнение провайдеров

СервисОсновной сценарийКритичное ограничениеЧто проверить из России
SelectelРоссийские приложения, медиа, бэкапыСтандартный, холодный и ледяной классы доступны не во всех регионах и пулах; версии объектов увеличивают оплачиваемый объёмРегион, класс хранения, цена API и исходящего трафика
Yandex Object StorageПроекты внутри Yandex CloudДля ледяного класса минимальный оплачиваемый срок объекта — 12 месяцевТариф региона, lifecycle и стоимость операций
VK Object StorageПроекты внутри VK CloudПолноту API нужно сверять с используемым приложениемEndpoint, ключи, AWS CLI и необходимые методы
Timeweb Cloud S3Небольшие проекты, сайты, архивыПоддерживаются S3- и Swift-инструменты; параметры подключения зависят от бакетаAWS Signature, endpoint, rclone и тариф выдачи
Cloud.ru EvolutionКорпоративная инфраструктура и большие данныеОтдельно тарифицируются хранение, API-запросы и исходящий трафикКласс размещения, SLA, документы и итоговый расчёт
MWS Object StorageКорпоративные проекты в российском облакеMWS заявляет хранение в нескольких дата-центрах, 11 девяток надёжности и SLA 99,95%; проверяйте условия договораМатрицу методов API, поддержку Object Lock и тариф восстановления
Amazon S3Максимальная функциональность и проекты в AWSСложная тарификация: хранение, запросы, извлечение и трафик зависят от класса и регионаРегистрацию, оплату и доступность аккаунта
Backblaze B2Бэкапы, архивы, медиаколлекцииБесплатный egress ограничен тройным средним месячным объёмом хранения; сверх лимита действует тарифРегистрацию, оплату и совместимость приложения с B2 S3 API
WasabiДолгоживущие бэкапы и архивыДля Pay as You Go минимальный срок — 90 дней; бесплатный egress рассчитан на месячную выгрузку не выше активного объёма храненияПлатёж, регион и соответствие политике допустимой нагрузки
Cloudflare R2Международная выдача файлов и приложения CloudflareEgress бесплатен, но Infrequent Access тарифицирует извлечение; в России Cloudflare фиксирует систематическое замедление трафикаДоступность конкретного домена и endpoint у разных операторов
Hetzner Object StorageЕвропейские проекты и бэкапыПоддержка функций шире базового S3, но доступность и регистрацию нужно проверять для конкретного клиентаВерификацию, оплату и сетевой маршрут
DigitalOcean SpacesВеб-проекты внутри DigitalOceanCDN относится к Standard Storage. Cold Storage не поддерживает CDN, CORS, bucket policies и статический хостинг; минимальный срок — 30 днейРегистрацию, оплату и доступность CDN
Scaleway Object StorageЕвропейское S3-хранилище и lifecycleДля перехода в холодные классы действуют минимальные сроки: 30 дней для Standard One Zone и 90 дней для GlacierРегистрацию, оплату, регион и сетевую доступность

Как считать полную стоимость

Используйте один сценарий для всех кандидатов. Иначе дешёвый гигабайт скрывает дорогую выдачу или операции.

Стоимость месяца = хранение
                 + операции записи и чтения
                 + исходящий трафик
                 + извлечение из холодного класса
                 + раннее удаление
                 + старые версии объектов
                 + минимальный платёж

Для первого расчёта подойдёт такой профиль:

  • среднее хранение: 2 ТБ;
  • выдача в интернет: 300 ГБ в месяц;
  • 500 000 операций записи;
  • 5 млн операций чтения;
  • 10% объектов обновляются или удаляются ежемесячно;
  • крупный файл для проверки multipart: от 6 ГБ;
  • восстановление всего объёма: один раз в год.
Строка расчётаЧто подставить
Хранение2 048 ГБ × цена класса
Операции500 000 PUT/LIST и 5 млн GET/HEAD по тарифу провайдера
Выдача300 ГБ минус бесплатная квота
ИзвлечениеОбъём чтения из холодного класса × тариф retrieval
Раннее удалениеОбновляемый объём × оставшийся минимальный срок
Аварийное восстановлениеСтоимость полной выгрузки 2 ТБ и ожидаемое время

Запишите две суммы: обычный месяц и месяц полного восстановления. Для бэкапа вторая цифра важнее первой.

Юридические и операционные ограничения

Российская или зарубежная юрисдикция сама по себе не отвечает на вопрос, можно ли хранить конкретные данные. Для проекта с персональными данными определите:

  • кто является оператором данных;
  • где выполняется первичная запись и хранение;
  • допустима ли трансграничная передача;
  • какие данные можно обезличить или зашифровать до отправки;
  • распространяются ли требования на резервные копии и журналы;
  • кто имеет доступ к ключам расшифровки.
⚠️
Это технический чеклист, а не юридическое заключение. Для персональных, медицинских, финансовых и других регулируемых данных сверяйте архитектуру с профильным специалистом.

Для зарубежного сервиса проведите отдельный операционный тест: создайте аккаунт, привяжите допустимый способ оплаты, получите счёт, загрузите небольшой объект и скачайте его через сеть реального пользователя. Публичная страница тарифа не подтверждает, что весь этот маршрут доступен именно вам.

Базовый smoke test через AWS CLI

Тест проверяет PutObject, HeadObject, GetObject, presigned GET, целостность и удаление. Бакет должен быть создан заранее. Используйте отдельный профиль и тестовые ключи с минимальными правами.

export AWS_PROFILE="s3-test"
export S3_ENDPOINT="https://s3.example-provider.ru"
export S3_REGION="provider-region"
export S3_BUCKET="s3-compatibility-test"

aws configure --profile "$AWS_PROFILE"

В aws configure укажите тестовые Access Key ID и Secret Access Key, затем значение региона из документации провайдера. Некоторые сервисы требуют path-style addressing. Настраивайте его только по официальной инструкции выбранного endpoint.

Создайте и загрузите файл:

printf "s3 compatibility test\n" > healthcheck.txt

aws s3api put-object \
  --profile "$AWS_PROFILE" \
  --region "$S3_REGION" \
  --endpoint-url "$S3_ENDPOINT" \
  --bucket "$S3_BUCKET" \
  --key "checks/healthcheck.txt" \
  --body "./healthcheck.txt"

Проверьте метаданные и скачайте объект:

aws s3api head-object \
  --profile "$AWS_PROFILE" \
  --region "$S3_REGION" \
  --endpoint-url "$S3_ENDPOINT" \
  --bucket "$S3_BUCKET" \
  --key "checks/healthcheck.txt"

aws s3api get-object \
  --profile "$AWS_PROFILE" \
  --region "$S3_REGION" \
  --endpoint-url "$S3_ENDPOINT" \
  --bucket "$S3_BUCKET" \
  --key "checks/healthcheck.txt" \
  downloaded-healthcheck.txt

cmp healthcheck.txt downloaded-healthcheck.txt && echo "download OK"

Создайте подписанную ссылку и проверьте её из другой сети:

S3_URL="$(aws s3 presign \
  "s3://$S3_BUCKET/checks/healthcheck.txt" \
  --profile "$AWS_PROFILE" \
  --region "$S3_REGION" \
  --endpoint-url "$S3_ENDPOINT" \
  --expires-in 300)"

curl -fL "$S3_URL" -o presigned-healthcheck.txt
cmp healthcheck.txt presigned-healthcheck.txt && echo "presigned URL OK"

Удалите тестовый объект:

aws s3api delete-object \
  --profile "$AWS_PROFILE" \
  --region "$S3_REGION" \
  --endpoint-url "$S3_ENDPOINT" \
  --bucket "$S3_BUCKET" \
  --key "checks/healthcheck.txt"

rm -f healthcheck.txt downloaded-healthcheck.txt presigned-healthcheck.txt

Признак успеха: обе команды cmp завершаются без расхождений, ссылка открывается из нужной сети, а объект удаляется без ошибки.

Расширенная проверка совместимости

Базовый тест не подтверждает полную совместимость. Проверьте только функции, которые действительно использует ваш продукт.

ФункцияКак проверитьПризнак успеха
Multipart uploadЗагрузить файл больше 5 ГБ используемым SDK или клиентомЗагрузка возобновляется после обрыва, объект скачивается без повреждений
ВерсионированиеЗагрузить две версии одного ключа и восстановить первуюОбе версии доступны по version ID
LifecycleСоздать правило на тестовом префиксеПравило принимается API и применяется в заявленный срок
CORSВыполнить браузерную загрузку с тестового доменаPreflight и основной запрос проходят без ошибки
Object LockВключить на отдельном бакете с коротким retentionОбъект нельзя удалить до истечения срока
Range GETЗапросить диапазон байтов большого файлаВозвращается HTTP 206 и правильный фрагмент
Массовая выгрузкаСкопировать тестовый набор через rclone или штатный клиентСовпадают число объектов, размер и контрольные суммы
Сетевая доступностьПовторить чтение у нужных операторов и из серверного регионаНет блокировок, а задержка и скорость укладываются в требования

Защита данных и выход из сервиса

Управляемое S3 не является единственной резервной копией. Для критичных данных используйте версионирование, отдельные ключи, журналирование, Object Lock или другой механизм неизменяемости, а также независимую копию у второго провайдера.

Рабочая базовая схема:

flowchart LR
    A["Рабочие данные"] --> B["Основное S3"]
    A --> C["Локальная или NAS-копия"]
    B --> D["Независимое S3 другого провайдера"]
    C --> E["Регулярный тест восстановления"]
    D --> E

До запуска зафиксируйте план выхода:

  1. Чем выгружается весь бакет.
  2. Сколько стоит полный egress.
  3. Сколько времени займёт перенос.
  4. Как проверить количество объектов и контрольные суммы.
  5. Как отозвать ключи после миграции.
  6. Как удалить данные и получить подтверждение удаления.

Второй бакет в том же аккаунте не защищает от блокировки аккаунта, ошибки администратора или компрометации главного ключа.

Финальный чеклист

Сценарий и объём данных определены
Посчитаны обычный месяц и полное восстановление
Проверены операции, retrieval и минимальный срок хранения
Регистрация, оплата и документы проверены на тестовом аккаунте
Юридические требования разобраны для конкретных данных
Нужные методы API подтверждены документацией и тестом
Базовый smoke test прошёл с явным регионом
Multipart, CORS, lifecycle и Object Lock проверены, если нужны
Измерена доступность из сетей реальных пользователей
Созданы отдельные ключи с минимальными правами
Есть независимая резервная копия
Зафиксирован и проверен план массовой выгрузки
Проведено тестовое восстановление

По теме

Следующий шаг

Правило 3-2-1: рабочая схема резервного копирования

Связанные материалы

Если вы выбираете хранилище для рабочего проекта, полезно заранее проверить стоимость полного восстановления, сетевую доступность и возможность уйти к другому провайдеру.

Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov