Перенос данных
Миграция партии пользователей
Формирование очерёдности
-
За основу деления принимаются группы связности, построенные по ведомости прав
acl_registry.csv(раздел Деление пользователей на партии по связям доступа). Группа связности не разделяется между партиями. -
Группы связности распределяются по партиям до достижения целевого размера партии. Размер партии для проекта — до 500 пользователей при трёх воркерах и согласованном окне работ.
-
В план включаются: пилотная партия (10–20 пользователей из числа сотрудников ИТ-подразделения), приоритетные партии, основные партии. Пилотная партия проходит полный цикл разделов Алгоритм обработки партии--Проверка целостности и консистентности данных первой; результаты пилота подтверждаются до запуска основных партий.
Алгоритм обработки партии
-
Сохраняется перечень групп рассылки, в которые включены пользователи партии (из выгрузки group_members.csv раздела Сведения об иных объектах).
-
Выполняется проверка наличия целевых объектов партии (раздел Проверка наличия целевых объектов в IVA Mail).
-
Для каждого пользователя партии выполняется процедура миграции почтового ящика (раздел Миграция почтового ящика).
-
После переноса всех ящиков партии заполняется состав групп рассылки IVA Mail, относящихся к партии: члены добавляются командой GroupAddAccount по выгрузке group_members.csv; для динамических групп задаются настройки DynamicMembersUri (раздел Сведения об иных объектах).
-
Восстанавливаются права доступа и делегирования по партии (раздел Восстановление прав доступа и делегирования).
-
Выполняется проверка результатов по партии (раздел Проверка целостности и консистентности данных).
-
Выполняется информирование пользователей партии о завершении перевода (раздел Информирование пользователей).
Миграция почтового ящика
Процедура выполняется для каждого пользователя партии. Основной объём данных копируется до отключения исходного ящика; после отключения досылаются изменения. Порядок действий фиксирован.
Проверка целевого аккаунта и первичное копирование
-
Подтверждается наличие целевого аккаунта, его псевдонимов и переадресаторов в IVA Mail (раздел Проверка наличия целевых объектов в IVA Mail). Аккаунт создан компонентом MailConnector по записи IVA ID.
-
Утилитой syncIMAPMail выполняется первичное копирование содержимого почтового ящика при активном исходном ящике Exchange (раздел Перенос содержимого почтового ящика (syncIMAPMail, IMAP)).
Перенос содержимого почтового ящика (syncIMAPMail, IMAP)
-
На вкладке Users импортируется входной файл партии (формат — раздел Формат входного файла syncIMAPMail (IMAP)). Режим аутентификации — ServiceAccounts: используются сервисные аккаунты из Connections, source и target выбираются через impersonation и --target ~user/.
-
На вкладке Connections для Source Microsoft Exchange IMAP указывается сервер exchange.domain.ru без порта: подключение выполняется на порт 993 через remote stunnel (сервер без явного порта или с :993 идёт через TLS-туннель). Для Destination указывается iva.domain.ru:143.
-
Устанавливается Parallelism = 3 — по количеству включённых SSH-раннеров. Один SSH-раннер выполняет обработку одного пользователя за раз; очередь пользователей одна, каждый раннер берёт следующего пользователя из общей очереди.
-
На вкладке Mail migration queue проверяется preview команды, нажимается Start. Контроль выполнения ведётся на вкладке Migration log (live stdout/stderr и строки per-user журналов) и на вкладке Logs and failures.
Журналирование и порог ошибок
Для каждого пользователя в журнале фиксируются дата и время запуска, идентификатор пользователя, результат, количество перенесённых объектов и сведения об ошибках. Для проекта устанавливается порог допустимого числа непереносимых элементов: 10 на ящик. При ошибке в пределах порога обработка пользователя завершается с фиксацией элементов в журнале; при превышении порога либо при сбое подключения пользователь помечается как проблемный, вносится в реестр исключений (раздел Реестр исключений), обработка очереди продолжается со следующего пользователя.
Завершение перевода пользователя
-
В Microsoft Exchange создаётся внешний контакт пользователя, указывающий на адрес доставки в промежуточном домене (команды — раздел Настройка механизмов маршрутизации).
-
Проверяется маршрутизация: с действующего ящика Exchange отправляется контрольное письмо на адрес контакта; доставка в аккаунт IVA Mail подтверждается входом в веб-интерфейс IVA Mail под целевым аккаунтом.
-
Почтовый ящик пользователя в Microsoft Exchange отключается:
Disable-Mailbox -Identity user01@domain.ru -Confirm:$false -
Утилитой
syncIMAPMailповторным запуском по данному пользователю досылаются изменения, накопившиеся в исходном ящике с момента первичного копирования: утилита переносит только отсутствующие в целевом ящике сообщения. -
Внешний контакт включается в группы рассылки, членом которых являлся пользователь (по перечню шага 1 раздела Алгоритм обработки партии):
Add-DistributionGroupMember -Identity "sales-team" ` -Member "User 01 (IVA)" -
Клиентское приложение IVA Mail разворачивается пользователю групповой политикой; параметры подключения включаются в уведомление о переводе (раздел Информирование пользователей).
При невыполнении шага 5 пользователь после перевода не получает сообщения, направляемые на адреса групп рассылки Exchange, членом которых он являлся: при отключении ящика пользовательский объект удаляется из состава групп.
Перенос календарей и контактов (ivatool_ews2imail, EWS)
Выполняется после завершения переноса содержимого ящиков партии, единым запуском по списку партии.
-
В GUI задаются Tool (путь к исполняемому файлу CLI) и Mode = migrate.
-
Заполняется Connections → Servers and admin accounts: Exchange Server = exchange.domain.ru (утилита обращается к https://exchange.domain.ru/EWS/Exchange.asmx); Exchange version = Auto; Admin = migrator@exchange.example.com с паролем; IVA Server = iva.domain.ru, Admin = migrator, Port = 8106, Use TLS включён; Use HTTPS for JUMP включён, JUMP port = 443.
-
Включается Use EWS impersonation — доступ к календарям и контактам пользователей выполняется под сервисной учётной записью с правом ApplicationImpersonation.
-
Задаются параметры миграции: Migrate calendars и Migrate contacts включены; устанавливается All dates — переносятся все элементы календаря независимо от даты; Calendar Bulk Size = 50; Calendar Max Bulk Bytes = 4194304; Contacts Bulk Size = 200. Include empty folders выключен: целевые папки для пустых исходных папок не создаются.
-
В режиме Accounts file (list) указывается CSV партии (формат — раздел Формат входного файла ivatool_ews2imail (EWS)), выполняется Load / preview list, затем Preflight checks.
-
Нажимается Start. Контроль ведётся на вкладке Users Progress: статус каждого ящика в реальном времени, сводка Total / Done / Failed / In progress / Pending над таблицей.
Параллелизм. Утилита обрабатывает пользователей списка в 5 потоков (значение по умолчанию). Журнал по каждому пользователю фиксирует дату и время запуска, идентификатор, результат, количество перенесённых объектов и сведения об ошибках; при ошибке на отдельном пользователе обработка продолжается со следующего.
Восстановление прав доступа и делегирования
Восстановление выполняется по ведомости acl_registry.csv (раздел Выгрузка прав) через CMD-интерфейс IVA Mail под сервисным аккаунтом после переноса данных партии. Обе стороны каждого права принадлежат одной партии (раздел Деление пользователей на партии по связям доступа), поэтому на момент восстановления объект и субъект доступа существуют в IVA Mail.
Соответствие прав Exchange правам IVA Mail
Права IVA Mail: права аккаунта (i — отправка от имени, s — отправка по поручению с указанием отправителя в Sender, r — чтение, w — администрирование, даёт все права на все папки), права папки (строка из символов l, r, s, w, i, p, k, x, t, e, a по стандарту IMAP ACL), права календаря (уровни чтения r0–r3, чтения приватных p0–p3, записи w0–w3).
| Право Exchange | Право IVA Mail | Команда назначения |
|---|---|---|
FullAccess |
ACL аккаунта: w |
ObjectSetSetting … AccountACL |
SendAs |
ACL аккаунта: i |
ObjectSetSetting … AccountACL |
SendOnBehalf |
ACL аккаунта: s |
ObjectSetSetting … AccountACL |
Делегат (Editor календаря + SendOnBehalf) |
ACL аккаунта: iw |
ObjectSetSetting … AccountACL |
Папка: Reviewer |
ACL папки: lr |
MailboxUpdateACL |
Папка: Author |
ACL папки: lrswi |
MailboxUpdateACL |
Папка: Editor |
ACL папки: lrswipkxte |
MailboxUpdateACL |
Папка: Owner |
ACL папки: все права (*) |
MailboxUpdateACL |
Календарь: AvailabilityOnly |
Календарный ACL: r1 |
CalendarUpdateACL |
Календарь: LimitedDetails |
Календарный ACL: r2 |
CalendarUpdateACL |
Календарь: Reviewer |
Календарный ACL: r3 |
CalendarUpdateACL |
Календарь: Editor |
Календарный ACL: r3w3 + ACL папки lrswite |
CalendarUpdateACL, MailboxUpdateACL |
Порядок восстановления
-
Выполняется подключение к CMD-интерфейсу IVA Mail (iva.domain.ru:8106, TLS) под сервисным аккаунтом IVA Mail.
-
Ведомость acl_registry.csv фильтруется по пользователям текущей партии.
-
Права уровня аккаунта (FullAccess, SendAs, SendOnBehalf) назначаются записью ключа AccountACL владельца. Словарь формируется по всем субъектам данного владельца из ведомости и записывается одной командой:
# ассистент assistant: FullAccess + SendOnBehalf к ящику user01 ObjectSetSetting "domain.ru" "user01" "AccountACL" {"assistant": "sw"} -
Права на папки назначаются по каждой строке типа Folder; идентификатор без доменной части относится к домену владельца ресурса:
# colleague: Reviewer на папку Inbox ящика user01 MailboxUpdateACL "domain.ru" "user01" "Inbox" "colleague" "+lr" -
Права на календари назначаются по каждой строке типа Calendar:
# secretary: Editor календаря user01 CalendarUpdateACL "domain.ru" "user01" "Calendar" "secretary" "r3w3" MailboxUpdateACL "domain.ru" "user01" "Calendar" "secretary" "+lrswite" -
Назначение проверяется контрольным чтением по каждому владельцу партии:
MailboxGetACL "domain.ru" "user01" "Inbox" CalendarGetACL "domain.ru" "user01" "Calendar" ObjectGetSetting "domain.ru" "user01" "AccountACL" -
Строки ведомости, назначение которых завершилось ошибкой, вносятся в реестр исключений с текстом ошибки CMD и обрабатываются до завершения партии.