Перейти к содержанию
HexaTransfer
Вернуться к блогу
Облако и хранение

Автоматизированное архивирование файлов: настроил и забыл

Настройте автоматизированные процессы архивирования файлов. Задайте правила, планируйте архивирование и обеспечивайте соответствие политикам хранения.

Автоматизированное архивирование перемещает неактивные файлы из горячего хранилища на холодные уровни по расписанию — без чьего-либо участия. Правила S3 Lifecycle, Azure Blob Lifecycle Management и GCS Object Lifecycle позволяют задавать политики вида «через 90 дней без обращения переместить в Glacier Deep Archive; через 7 лет удалить, если не помечено legal-hold». Настройте их один раз, протестируйте на 1% объектов — и система сократит затраты на хранение на 50–80%, выполняя при этом требования по срокам: 7 лет по SOX, 6 лет по HIPAA, принцип минимизации данных по GDPR, а в российском контексте — требования 152-ФЗ к хранению персональных данных — без ручных обходов.

Выбор триггера: возраст, обращение или тег

Три типа триггеров архивирования используются чаще всего. Правила по возрасту (object.age > 90d) — простейший вариант, подходящий для данных с убывающей ценностью: логов, транзакций, экспортов почты. Правила по обращению (S3 Intelligent-Tiering, отслеживающий метки времени последнего доступа) умнее подходят для датасетов с непредсказуемым паттерном обращений — файл финансового аудита может быть неактивен 11 месяцев и стать критически важным на 12-й.

Правила по тегам (tag retention-class = sox-7y) дают пользователям и приложениям явный контроль. Команда compliance может помечать файлы retention-class: hipaa-6y при загрузке, и правила lifecycle будут архивировать их соответственно — без необходимости менять само правило при смене категорий. Комбинируйте: возраст — для общего случая, теги — для исключений.

Написание политики в YAML или JSON

Конфигурации S3 lifecycle используют XML или JSON; Azure — JSON; GCS — JSON. Пример правила S3 для репозитория документов:

{
  "Rules": [
    {
      "ID": "archive-documents",
      "Status": "Enabled",
      "Filter": {"Prefix": "documents/"},
      "Transitions": [
        {"Days": 30, "StorageClass": "STANDARD_IA"},
        {"Days": 90, "StorageClass": "GLACIER_IR"},
        {"Days": 365, "StorageClass": "DEEP_ARCHIVE"}
      ],
      "Expiration": {"Days": 2555},
      "NoncurrentVersionExpiration": {"NoncurrentDays": 180}
    }
  ]
}

Храните политику под контролем версий в Git. Каждое изменение проходит ревью в pull request, применяется через Terraform или CloudFormation, фиксируется в логе CI. Политики, отредактированные вручную в консоли, расходятся с эталоном и ломаются.

Тестирование перед продакшеном

Политика lifecycle, удаляющая не тот бакет, — это конец карьеры. Сначала тестируйте на небольшом префиксе. Создайте documents/test/ с тестовыми файлами и отдельную тестовую политику, применимую только к этому префиксу. Используйте короткие сроки — Days: 1 — чтобы быстро пройти все переходы.

Проверяйте результаты командой aws s3api list-objects-v2 --prefix documents/test/ и убедитесь, что классы хранения изменились ожидаемым образом. Затем расширяйте фильтр. Для критически важных бакетов (юридические, финансовые) запустите политику в режиме пробного прогона, если провайдер его поддерживает, или симулируйте скриптом, который сообщает, что произошло бы без реального применения изменений.

Минимальные сроки хранения — не для обсуждения

Правила lifecycle уважают минимальные сроки оплаты хранения. Перемещение объекта в Glacier Flexible Retrieval и его удаление через 7 дней всё равно тарифицируется за 90 дней. Deep Archive — минимум 180 дней. Плохо спроектированное правило, переводящее объекты из Standard в Deep Archive и затем удаляющее их за 30 дней, тройной платёж: за переход, за минимальный срок и за исходящий трафик при восстановлении.

Безопасная схема: переходите на более холодный уровень только в том случае, если объект, по ожиданиям, проживёт там не меньше минимального срока. Если файлы обычно удаляются через 60 дней — не прогоняйте их через Deep Archive (минимум 180 дней). Остановитесь на Standard-IA.

Обработка юридических удержаний и исключений

В каждой системе архивирования нужен аварийный выход для судебных процессов. Тег legal-hold: true должен освобождать объекты от lifecycle-удаления. Реализуйте через фильтр правила, исключающий помеченные объекты:

Filter:
  And:
    Prefix: "documents/"
    Tag: {Key: "legal-hold", Value: "false"}

В сочетании с S3 Object Lock в режиме Governance или Compliance объекты с тегом legal-hold становятся неизменяемыми до снятия удержания. Режим Compliance запрещает удаление даже от имени root — именно это требуют FINRA 4511, SEC 17a-4 и требования WORM по §164.316 HIPAA.

Автоматизация конвейера тегирования

Архивирование настолько хорошо, насколько хороши теги, которые им управляют. Автоматизируйте тегирование при загрузке: Lambda, запускаемая по S3 ObjectCreated, анализирует файл и присваивает теги content-type, department, retention-class. Для уже существующих неразмеченных данных запустите пакетное задание тегирования через S3 Batch Operations.

Источники значений тегов:

  • Расширение файла и magic bytes (PDF со словом «HIPAA» в метаданных получает тег healthcare)
  • Источник загрузки (API-ключ, привязанный к финансовому приложению, автоматически добавляет тег finance)
  • Сканирование содержимого (Amazon Macie обнаруживает ПД и тегирует соответственно)
  • Ввод пользователя при загрузке (форма с выпадающим списком Отдел)

Тегирование в S3 стоит $0,01 за 10 000 запросов — это оправданная инвестиция для точного lifecycle-таргетинга.

Журнал аудита архивирования

Логируйте каждое действие lifecycle. CloudTrail фиксирует события LifecycleTransition и LifecycleExpiration. Направьте их в Athena, Splunk или Datadog для доступной к запросам истории. Когда аудитор спросит «когда контракт 2019 года был перемещён в Glacier», запрос должен вернуть ответ за секунды.

Включайте в журнал аудита:

  • Ключ объекта и VersionId
  • Переход из одного класса хранения в другой
  • Триггер (возраст, тег, явный)
  • Метка времени
  • ID политики, которая сработала

Храните журнал аудита не меньше, чем требует срок хранения данных — если вы архивируете на 7 лет, храните журнал lifecycle 7 лет плюс буфер.

Архивирование в несколько регионов и облаков

Для аварийного восстановления архивы должны находиться во втором регионе или облаке. S3 Cross-Region Replication может реплицировать данные в другой класс хранения в регионе назначения — например, в us-west-2 сразу в Glacier Deep Archive. Azure поддерживает аналогичное через RA-GRS и репликацию объектов. GCS предлагает мультирегиональное хранилище и turbo replication.

Для межоблачного архивирования (AWS как основное, Backblaze B2 как резервное) rclone с cron выполняет синхронизацию по расписанию. Резервная копия обеспечивает независимость от специфических сбоев провайдера, атак шифровальщиков, нацеленных на IAM одного провайдера, или споров по выставленным счетам.

Архивы, готовые к восстановлению

Архив, который нельзя восстановить, — это просто медленное удаление. Задокументируйте путь восстановления для каждого уровня:

  • Glacier Instant Retrieval: прямой GET, восстановление не нужно
  • Glacier Flexible Retrieval: RestoreObject с Tier=Standard (3–5 часов) или Expedited (1–5 минут)
  • Glacier Deep Archive: RestoreObject со Standard (12 часов) или Bulk (48 часов)
  • Azure Archive: Set Blob Tier до Hot/Cool, регидратация 15 часов

Практикуйте ежеквартально. Выберите случайный архивный объект, восстановите его, проверьте по хешу из манифеста и засеките время всего процесса. Непроверенные восстановления обнаруживаются в самый неподходящий момент — во время инцидента.

Разовые передачи для архивирования

Автоматический lifecycle справляется с плановыми задачами, но иногда нужно немедленно переместить конкретный пакет на 50 ГБ — файлы уволившегося сотрудника или материалы завершённого проекта. Для этого инструмент передачи с проверкой целостности лучше, чем редактирование политик lifecycle. HexaTransfer перемещает файлы до 10 ГБ со сквозным шифрованием AES-256-GCM и одноразовой ссылкой — это удобно для передачи архивов внешним юристам или правопреемнику без предоставления доступа ко всему архивному бакету.

Настройте политику lifecycle, автоматизируйте тегирование, направьте журналы аудита — и система будет работать сама. Раз в квартал просматривайте дашборд затрат и корректируйте пороги, если паттерн доступа изменился. Вот и всё, что нужно архивированию: однажды настроенное, оно требует меньше внимания, чем заказ кофе.

Попробуйте на hexatransfer.com — бесплатно, без аккаунта, до 10 ГБ.

Безопасная отправка больших файлов со сквозным шифрованием

Передавайте файлы до 10 ГБ бесплатно со сквозным шифрованием. Регистрация не требуется. Ваши файлы шифруются в браузере перед загрузкой — никто другой не может их прочитать.

Отправить файл