BackupZit

Резервное копирование Microsoft 365 на собственный сервер

Пошаговое руководство: копируйте почтовые ящики Exchange Online, OneDrive, SharePoint, календари и контакты клиента Microsoft 365 на хранилище, которое вы контролируете, — с правами только на чтение, дедупликацией, шифрованием и внешней копией.

Что вы настроите

BackupZit читает клиент Microsoft 365 через Microsoft Graph с помощью регистрации приложения, у которой есть права только на чтение: в клиенте ничего не изменяется и не удаляется. Данные скачивает любой агент BackupZit с доступом в интернет — например, агент на машине с консолью — и сохраняет их, как любую другую копию: с дедупликацией, шифрованием, хранением, заданиями копирования и тестами восстановления. BackupZit бесплатен и с открытым исходным кодом (AGPLv3), без лицензий на пользователя.

Зачем отдельная копия Microsoft 365?

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

Microsoft и другие поставщики продают резервное копирование Microsoft 365 и как облачный сервис, обычно с оплатой за пользователя или за гигабайт. BackupZit — вариант на собственном сервере: данные попадают на ваш NAS, сервер или бакет S3, а единственные расходы — хранилище.

Что нужно

  • Консоль BackupZit — небольшая Linux-ВМ (2 vCPU, 2–4 ГБ ОЗУ, диск 16–20 ГБ) из готового образа со страницы загрузки или скрипт установки на существующем сервере Debian, Ubuntu, AlmaLinux или Rocky Linux.
  • Агент, который скачивает данные: Windows или Linux, с доступом по HTTPS к login.microsoftonline.com, graph.microsoft.com и, для файлов OneDrive и SharePoint, к *.sharepoint.com. Достаточно агента на машине с консолью.
  • Хранилище для копий: SFTP, общая папка SMB, S3-совместимый бакет, Azure Blob Storage или защищённый репозиторий BackupZit.
  • Глобальный администратор клиента — один раз, чтобы зарегистрировать приложение и дать согласие.

Шаг 1 — Зарегистрируйте приложение в Microsoft Entra ID

Один раз для каждого клиента, в центре администрирования Microsoft Entra:

  1. App registrations → New registration: назовите его, например, BackupZit, выберите Accounts in this organizational directory only, без URI перенаправления. Запишите Application (client) ID и Directory (tenant) ID со страницы обзора.
  2. Certificates & secrets → New client secret: выберите срок действия (например, 24 месяца) и сразу скопируйте Value секрета — оно показывается только один раз. Secret ID — это не секрет.
  3. API permissions → Add a permission → Microsoft Graph → Application permissions (не делегированные):
    Что копироватьРазрешения
    Почта и OneDriveUser.Read.All, Mail.Read, Files.Read.All
    Календари и контактытакже Calendars.Read, Contacts.Read
    Сайты SharePointтакже Sites.Read.All
  4. Нажмите Grant admin consent for …. До этого статус показывает Not granted, и копирование отклоняется.

Это только права на чтение. Чтобы ограничить приложение отдельными ящиками, администратор Exchange может добавить политику доступа приложений или область RBAC for Applications; учётные записи вне её будут отмечаться как недоступные для чтения.

Шаг 2 — Добавьте хранилище

В консоли откройте Хранилище и добавьте место назначения — например, общую папку SMB на NAS для первой копии и бакет S3 с Object Lock для внешней копии. Оставьте включённым Шифровать копии (AES-256) (по умолчанию): почта и файлы шифруются AES-256 на агенте до того, как покинут его. Храните ключ восстановления, который покажет консоль, отдельно от копий — например, распечатанным или в менеджере паролей.

Шаг 3 — Создайте задание Microsoft 365

  1. В разделе Задания копирования создайте задание типа Microsoft 365 и выберите агент, который будет скачивать данные.
  2. Введите Directory (tenant) ID, Application (client) ID и Client secret из шага 1. Секрет хранится в зашифрованном виде.
  3. Выберите, что копировать: Почта, OneDrive, Календари и контакты, Сайты SharePoint — в любом сочетании.
  4. Выберите учётные записи: Все учётные записи с почтовым ящиком или OneDrive (добавленные позже включаются автоматически; исключения в поле Кроме, по одному на строку) или Только эти учётные записи. Учётные записи без лицензии пропускаются. Для SharePoint тот же выбор действует для сайтов: все сайты с исключениями или только указанные адреса, например https://contoso.sharepoint.com/sites/sales.
  5. Вместо ввода адресов нажмите Выбрать из списка: консоль прочитает учётные записи и сайты клиента через только что введённое приложение и позволит отметить их.
  6. Выберите хранилище, расписание (например, каждую ночь) и хранение.

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

Первая копия скачивает всё. Каждая следующая заново перечисляет папки, но скачивает только новые или изменённые сообщения и файлы (прочитанные, помеченные, перемещённые или отредактированные сообщения считаются изменёнными); неизменённые данные берутся из предыдущей копии. Microsoft ограничивает скорость чтения для приложений — BackupZit ждёт, когда Microsoft просит об этом, и продолжает, поэтому первая копия больших ящиков может занять часы.

Что копируется

ДанныеСохраняются как
ПочтаВсе папки и подпапки; каждое сообщение целиком с вложениями как файл .eml, названный по дате и теме. Открывается в Outlook, Thunderbird и большинстве почтовых программ.
OneDriveВсе файлы и папки с временем изменения.
КалендариКаждый календарь; каждое событие как файл iCalendar (.ics) со временем, местом, участниками, напоминанием и повторением. Импортируется в Outlook, Google Календарь и Thunderbird.
КонтактыКонтакты и папки контактов как vCard (.vcf).
SharePointКаждая библиотека документов каждого сайта со всеми папками и файлами. Файлы Teams хранятся в SharePoint и тоже копируются.

В копии — одна папка на учётную запись: ana@contoso.com/Mail/Inbox/…, …/OneDrive/…, …/Calendar/…, …/Contacts/… — и SharePoint/<сайт>/<библиотека>/…. Это стандартные форматы, поэтому файлы остаются читаемыми и без BackupZit.

Шаг 4 — Внешняя копия (3-2-1)

Добавьте задание типа Копия резервной копии с заданием Microsoft 365 как источником и вторым местом назначения в другом месте — бакет S3 с Object Lock или защищённый репозиторий делают эту копию неизменяемой. Отправляются только данные, которых ещё нет в месте назначения, а у копии своё хранение. Автоматические тесты восстановления (по умолчанию еженедельно, в Настройки → Тесты восстановления) восстанавливают случайную выборку из последней копии и сверяют каждый байт с сохранёнными контрольными суммами.

Восстановление

  • Просмотр и скачивание: в запуске копирования откройте папки почты, OneDrive, календари или контакты учётной записи либо сайт SharePoint; отметьте сообщения, события, файлы или папки и скачайте их — один файл как есть, несколько архивом ZIP. Откройте файлы .eml в Outlook или перетащите их в почтовый ящик.
  • Восстановить в папку на любом агенте: сообщения как .eml, события как .ics, контакты как .vcf, файлы OneDrive и SharePoint в исходном виде — в <папка>/<учётная запись>/… и <папка>/SharePoint/….

Ограничения

  • Восстановления прямо в почтовый ящик или OneDrive пока нет (оно запланировано; будет записывать только в новую папку и никогда не перезапишет). Пока данные скачиваются или восстанавливаются в папку.
  • Не копируются: чаты и сообщения каналов Teams, списки и страницы SharePoint (только библиотеки документов), вложения событий, фото контактов, отдельно изменённые экземпляры серии и общие ящики без учётной записи пользователя.
  • Время событий календаря сохраняется в UTC.

Устранение неполадок

  • AADSTS7000215 / invalid client secret: скопирован ID секрета вместо Value, или срок действия секрета истёк — создайте новый и введите его в задании.
  • Missing application permissions / Authorization_RequestDenied: добавьте разрешения как разрешения приложения и нажмите Grant admin consent.
  • The account has no Exchange Online mailbox: у учётной записи нет лицензии Exchange (или это контакт); уберите её из задания.
  • Запуск с предупреждениями перечисляет сообщения или файлы, которые не удалось прочитать (например, записную книжку OneNote); остальная копия полная.

Что дальше

Скачайте BackupZit, посмотрите все функции для Microsoft 365 или прочитайте раздел о Microsoft 365 в руководстве в консоли. Та же консоль копирует и серверы, и виртуальные машины — см. руководства по Proxmox VE и Hyper-V. Вопросы можно задать в GitHub Discussions. Компании могут получить коммерческую поддержку от MaxZit (только на английском).