Детали синхронизации и устранение неполадок

Обзор

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

Для первоначальной настройки ознакомьтесь с Руководством администратора и Руководством пользователя. Для получения подробной информации о CalDAV ознакомьтесь с Руководством для провайдеров CalDAV.

Как работает синхронизация

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

Этап 1: Обнаружение

Система идентифицирует учётные записи календаря, готовые к синхронизации (учётные записи с назначенным пользователем, которые не были удалены), и ставит их в очередь на обработку.

Что происходит
  • Запрос заданием планировщика учётных записей календаря с назначенным пользователем

  • Приоритезация учётных записей по дате последней попытки синхронизации (начиная с самых ранних)

  • Постановка в очередь заданий синхронизации для подходящих учётных записей (не более, чем указано в ограничениях синхронизации)

Пропускаемые учётные записи
  • Учётные записи без назначенного пользователя календаря

  • Удаленные учётные записи календаря

На первом этапе не осуществляется аутентификация (токены OAuth или учётные данные CalDAV). Проверка аутентификации происходит на втором этапе при получении внешних событий. Учётные записи с просроченными токенами или недействительными учётными данными будут поставлены в очередь, но не пройдут аутентификацию на втором этапе.

Этап 2: Сравнение

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

Что происходит
  • Проверка аутентификации (действительность токена OAuth, учётные данные CalDAV)

  • Автоматическое обновление просроченных токенов OAuth, если это возможно

  • Получение встреч SuiteCRM в пределах настроенного временного диапазона синхронизации (прошлые дни + будущие дни)

  • Получение событий внешнего календаря через API (Google Calendar) или протокол CalDAV

  • Сопоставление событий между системами с использованием идентификаторов внешних календарей

  • Идентификация новых, изменённых и удаленных событий в обеих системах

Применение временного диапазона синхронизации

События изначально фильтруются по настроенному временному диапазону:

Прошедшие дни

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

Будущие дни

События с сегодняшнего дня по указанному количеству дней вперед

События вне временного диапазона синхронизации изначально исключаются, но если они связаны с событиями внутри временного диапазона (через идентификатор внешнего календаря), они извлекаются для обеспечения точного сопоставления и разрешения конфликтов. Это предотвращает появление 'осиротевших' ссылок и обеспечивает корректное обнаружение удалённых записей.

Сопоставление событий

Сопоставление событий осуществляется с использованием:

Идентификаторов связанных событий

Каждое синхронизированное событие хранит идентификатор своего аналога. Система использует эту связь для сопоставления событий между календарями.

Сравнения содержимого

Сравнение основных полей события (заголовок, описание, местоположение, время начала/окончания) позволяет быстро определить, изменилось ли содержимое с момента последней синхронизации.

Обнаружения изменений

События помечаются как изменённые, если метка времени последнего изменения новее даты последней синхронизации.

Обнаружения удалений

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

Этап 3: Разрешение конфликтов

Когда одно и то же событие изменяется в обеих системах, стратегия разрешения конфликтов определяет, какую версию события следует сохранить.

Стратегии
Стратегия Поведение

Побеждает последнее изменение

Сравнивает метки времени изменений (с точностью до секунд); побеждает последнее изменение. Версия с последним изменением перезаписывает предыдущую.

Приоритет внешнего календаря

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

Приоритет SuiteCRM

Версия SuiteCRM всегда побеждает, независимо от времени изменения. В качестве резервного варианта, если источник события не может быть определён, используется сравнение меток времени.

Подробные примеры разрешения конфликтов и выбор правильной стратегии описаны здесь.

Отсутствие конфликтных сценариев возникает при:
  • Идентичном содержимом: Если оба события были изменены на одинаковые значения, синхронизация не требуется.

  • Создании нового события: Создаются в целевой системе без запуска разрешения конфликтов.

  • Удалении события: Обрабатываются в соответствии с настройкой поведения удаления.

Проверка безопасности

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

Этап 4: Синхронизация

В процессе синхронизации в обе системы вносятся изменения.

Что происходит
  • Операции создания: События, созданные в одной системе, создаются в другой.

  • Операции обновления: События, обновлённые в одной системе, обновляются в другой.

  • Операции удаления: События, удалённые в одной системе, удаляются в другой (если включена синхронизация удаления).

  • Поддержание связей: Идентификаторы внешних календарей сохраняются в SuiteCRM для последующего сопоставления.

  • Обновление статуса: Дата последней синхронизации обновляется в учётной записи календаря.

Обработка ошибок
  • Сбои синхронизации отдельных событий не останавливают весь процесс синхронизации.

  • Ошибки записываются в файл suitecrm.log с использованием специфичных префиксов (например, [CalendarSyncOrchestrator], [CalendarSync], [GoogleCalendarProvider]).

  • Попытка обработки несинхронизированных событий будет повторена при следующем запуске синхронизации.

Для просмотра ошибок синхронизации выполните команду:

grep -E "error|failed" suitecrm.log | grep -E "CalendarSync|CalendarProvider" | tail -50

Что синхронизируется

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

Синхронизирующиеся поля

Эти поля синхронизируются в обоих направлениях:
  • Тема встречи: Название встречи или мероприятия

  • Дата начала: Дата начала встречи

  • Дата окончания: Дата окончания встречи

  • Описание: Подробности встречи, повестка дня или заметки

  • Место встречи: Физическое или виртуальное место проведения встречи

Несинхронизирующиеся поля

Эти поля остаются неизменными в SuiteCRM:
  • Ответственный(ая): Ответственный за встречу

  • Статус: Статус встречи (В планах, Состоялась, Не состоялась)

  • Родительская запись: Связанная учётная запись, Контакт или другая запись SuiteCRM

  • Приглашённые: Участники встречи (участники указываются отдельно в каждой системе)

  • Пользовательские поля: Любые пользовательские поля, добавленные в модуль Встречи

  • Напоминания: Настройки напоминаний, указанные в SuiteCRM

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

Преобразование данных

При синхронизации между системами данные могут быть преобразованы для соответствия различным форматам:

  • HTML: Преобразуются в обычный текст, если внешний календарь не поддерживает форматированный текст.

  • Часовые пояса: Преобразуются в соответствующий часовой пояс для каждой системы.

  • События на весь день: Обрабатываются в соответствии с реализацией событий на весь день в каждой системе.

Направление синхронизации

По умолчанию синхронизация является двусторонней, с независимым созданием, изменением и удалением данных.

SuiteCRM → Внешний календарь

Изменения в SuiteCRM, передающиеся во внешний календарь:

  • Новые встречи: Создаются как события во внешнем календаре

  • Измененные встречи: Обновляются события во внешнем календаре

  • Удалённые встречи: Удаляются события из внешнего календаря (если включена синхронизация удаления)

При сохранении встречи в SuiteCRM:

  1. Если включены логические хуки, синхронизация запускается немедленно

  2. В противном случае, изменения синхронизируются во время следующего запланированного запуска задания синхронизации

  3. Идентификатор внешнего календаря сохраняется в записи встречи для последующего сопоставления

Внешний календарь → SuiteCRM

Изменения во внешнем календаре, передающиеся в SuiteCRM:

  • Новые события: Создаются как встречи в SuiteCRM

  • Измененные события: Обновляются встречи в SuiteCRM

  • Удалённые события: Удаляются встречи из SuiteCRM (если включена синхронизация удаления)

При изменении события во внешнем календаре:

  1. Изменения обнаруживаются во время следующего запуска синхронизации (запланированной или проведённой вручную)

  2. Соответствующая встреча SuiteCRM обновляется на основе стратегии разрешения конфликтов.

  3. Если соответствующей встречи нет, создается новая.

Удаления

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

Настройка поведения удаления

Все необходимы параметры прописываются в файле config_override.php.

Поведение по умолчанию

По умолчанию обе настройки удаления имеют значение true, что обеспечивает полную двустороннюю синхронизацию удалений:

// Настройка по умолчанию (синхронизация удалений в обоих направлениях)
$sugar_config['calendar_sync']['allow_external_event_deletion'] = true;

$sugar_config['calendar_sync']['allow_internal_event_deletion'] = true;

При настройках по умолчанию:

  • Удаление встречи в SuiteCRM удаляет событие во внешнем календаре

  • Удаление события во внешнем календаре удаляет встречу в SuiteCRM

Защита событий внешнего календаря

Для сохранения события внешнего календаря при удалении встреч в SuiteCRM:

// Предотвращение влияния удалений в SuiteCRM на внешний календарь
$sugar_config['calendar_sync']['allow_external_event_deletion'] = false;
Результат
  • Удаление встречи в SuiteCRM НЕ удаляет событие из внешнего календаря

  • Событие будет повторно синхронизировано с SuiteCRM при следующем запуске синхронизации

  • Полезно, когда внешний календарь является основным источником информации

Защита встреч в SuiteCRM

Для сохранения встречи в SuiteCRM при удалении событий внешнего календаря:

// Предотвращение влияния удалений из внешнего календаря на SuiteCRM
$sugar_config['calendar_sync']['allow_internal_event_deletion'] = false;
Результат
  • Удаление события во внешнем календаре НЕ приводит к удалению встречи в SuiteCRM

  • Встреча будет повторно синхронизирована с внешним календарем при следующем запуске синхронизации

  • Полезно, когда SuiteCRM является основным источником информации

Односторонняя синхронизация

Для полного отключения синхронизации удаления в обоих направлениях:

// Удаления не распространяются ни в одном направлении
$sugar_config['calendar_sync']['allow_external_event_deletion'] = false;
$sugar_config['calendar_sync']['allow_internal_event_deletion'] = false;
Результат
  • Удаления в одной системе не влияют на данные в другой системе

  • Удалённые события создаются заново при следующем запуске синхронизации

  • Появляются 'осиротевшие' события, если их не удалить вручную

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

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

В этом разделе представлены подробные рекомендации по устранению распространенных проблем и сообщений об ошибках.

Справочник по сообщениям об ошибках

Ниже представлены распространенные сообщения об ошибках, их причины и способы их решения:

Сообщение об ошибке Причина Решение

Срок действия токена аутентификации истек / Требуется повторная авторизация

Срок действия OAuth-авторизации истек или токен обновления недоступен

Выполните Повторную авторизацию и в учётной записи календаря нажмите на кнопку Проверить подключение.

Сбой аутентификации. Проверьте учётные данные CalDAV

Неверное имя пользователя или пароль CalDAV

Убедитесь, что учётные данные CalDAV верны.

Ошибка сервера CalDAV: HTTP {код}

Сервер CalDAV вернул ответ с ошибкой.

Проверьте код состояния HTTP:
401 = проблема аутентификации,
403 = отказ в доступе,
404 = календарь не найден,
5xx = ошибка сервера.
Проверьте URL-адрес сервера и учётные данные.

Сетевая ошибка

Сбой подключения из-за проблем с сетью, разрешением DNS или брандмауэром.

Убедитесь, что сервер SuiteCRM может получить доступ к конечной точке API поставщика календаря. Проверьте правила брандмауэра и разрешение DNS. Проверьте подключение с помощью curl с сервера SuiteCRM.

Календарь не найден

Внешний календарь был удалён, переименован или изменён его идентификатор.

Убедитесь, что календарь по-прежнему существует во внешней системе. Для CalDAV убедитесь, что URL-адрес сервера указан правильно и заканчивается косой чертой. Создайте новую учётную запись календаря, если календарь больше не существует.

Этот внешний календарь уже подключен к учётной записи

Внешний календарь уже связан с другой учётной записью календаря.

Удалите дублирующуюся учётную запись календаря или используйте другой внешний календарь. Каждый внешний календарь может синхронизироваться только с одной учётной записью календаря SuiteCRM (во избежание конфликта данных).

Ошибка Google API

API календаря Google вернул ошибку (проблема с разрешениями, квотой или сервисом).

Проверьте консоль разработчика Google, чтобы узнать о квотах API и подробностях ошибки. Убедитесь, что области действия OAuth включают доступ на чтение/запись календаря. Повторно авторизуйтесь, если разрешения были отозваны.

Нет доступного токена доступа / Подключение OAuth не найдено

Отсутствует токен OAuth или запись подключения была удалена.

Отредактируйте соответствующее Внешнее подключение OAuth и нажмите на кнопку Аутентификация, чтобы установить новое подключение OAuth.

Распространённые проблемы

Ниже описана диагностика наиболее часто встречающихся проблем.

События не синхронизируются

Если события не синхронизируются между системами, выполните следующее:

  1. Проверьте состояние Планировщика

    • В панели администратора перейдите в раздел Настройка синхронизации календаря

    • Убедитесь, что Статус задания планировщика отображается как Включено

    • Убедитесь, что метка времени Последнего запуска планировщика является актуальной (в пределах установленного интервала синхронизации)

    • Если статус задания планировщика отображается как Отключено, убедитесь, что задание Планировщика запущено

  2. Проверьте подключение учётной записи календаря

    • Откройте учётную запись календаря в Форме просмотра

    • Убедитесь, что параметр Тест успешно пройден отображается как установленный

    • Убедитесь, что параметр Дата последней синхронизации регулярно обновляется

    • Если проверка подключения не удалась, выполните повторную проверку подключения

    • Для внешнего подключения OAuth повторите аутентификацию, если срок действия токена истёк

  3. Проверьте временной диапазон синхронизации

    • В панели администратора перейдите в раздел Настройка синхронизации календаря

    • Убедитесь, что дата события попадает во временной диапазон синхронизации

    • События за пределами временного диапазона намеренно игнорируются

    • При необходимости настройте временной диапазон

  4. Просмотрите системный журнал

    • В панели администратора перейдите в раздел Настройка конфигурации

    • В подразделе Параметры журнала установите Уровень детализации на Info или Debug

    • В учётной записи календаря запустите синхронизацию через меню Действия

    • Просмотрите записи журнала либо непосредственно в панели администратора, либо в консоли, посмотрев файл suitecrm.log на наличие записей, содержащих CalendarSync или CalendarProvider:

      grep -E "CalendarSync|CalendarProvider" suitecrm.log | tail -100
    • Найдите сообщения об ошибках или предупреждения, указывающие на сбои синхронизации

    • Проверьте наличие ошибок аутентификации, ошибок API или проблем с правами доступа

Ошибки авторизации

При возникновении ошибок OAuth или ошибок аутентификации выполните следующее:

  1. Проверьте настройки провайдера OAuth (только для Google Календаря)

    • В панели администратора перейдите в раздел Внешние провайдеры OAuth

    • Убедитесь, что провайдер OAuth Google существует и имеет действительные учётные данные

    • Проверьте правильность идентификатора клиента и секретного ключа клиента

    • Если учётные данные не верны, обновите их в консоли разработчика Google и в SuiteCRM

  2. Выполните повторную авторизацию учётной записи календаря

    • Отредактируйте соответствующее Внешнее подключение OAuth

    • Нажмите на кнопку Аутентификация, чтобы установить новое подключение OAuth

    • Завершите авторизацию Google во всплывающем окне

    • Нажмите на кнопку Сохранить

    • Откройте в Форме редактирования учётную запись календаря и убедитесь, что вы авторизуетесь с правильной учётной записью Google

    • Нажмите на кнопку Сохранить

    • Повторно откройте в Форме редактирования учётную запись календаря и нажмите на кнопку Проверить подключение

    • Нажмите на кнопку Сохранить, чтобы сохранить результат проверки

  3. Проверьте доступ к внешнему календарю

    • Войдите во внешнюю учётную запись поставщика календаря

    • Убедитесь, что календарь по-прежнему существует и доступен

    • Для Google Календаря проверьте авторизованные приложения в настройках учётной записи Google

    • Для CalDAV убедитесь, что имя пользователя и пароль верны

Дублирование событий

Если одно и то же событие появляется несколько раз в одной или обеих системах:

  1. Проверьте стратегию разрешения конфликтов

    • В панели администратора перейдите в раздел Настройка синхронизации календаря

    • Проверьте настройку Стратегия разрешения конфликтов

    • Убедитесь, что она соответствует желаемому поведению

    • Если проблема связана с параметром Побеждает последнее изменение, рассмотрите возможность его изменения на Приоритет внешнего календаря или Приоритет SuiteCRM

  2. Проверьте уникальность учётной записи календаря

    • Перейдите в модуль Учётные записи календаря

    • Отфильтруйте учётные записи по необходимому пользователю

    • Убедитесь, что существует только ОДНА активная учётная запись календаря для каждого внешнего календаря

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

    • Система предупредит о дублирующихся календарях во время проверки подключения

  3. Проверьте соответствия событий

    • Откройте продублированную встречу в SuiteCRM

    • Проверьте, заполнено ли поле ID внешнего календаря

    • Если поле пустое, встреча не связана с внешним событием (осиротевшая)

    • Удалите осиротевшие встречи и позвольте синхронизации создать их заново

    • Если дубликаты сохраняются, обратитесь к администратору для проверки настроек синхронизации

Ведение журнала

Синхронизация календаря использует стандартный журнал SuiteCRM со специальными префиксами для упрощения идентификации.

Установите уровень детализации журнала в Info (фиксируются общие операции синхронизации) или в Debug (фиксируется подробная информация о процессе синхронизации, вызовах API и преобразовании данных).

Уровень детализации Debug значительно увеличивает размер файла журнала. Включайте его только при устранении конкретных проблем, затем возвращайтесь к уровню Fatal или Error при штатной работе синхронизации.

Префиксы записей синхронизации календаря

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

Используются два формата для разделения названия класса и метода:

Формат с квадратными скобками [ClassName][methodName]:

Префикс Описание Команда фильтрации в Linux/macOS

[CalendarSync]

Основной класс для операций синхронизации

grep "\[CalendarSync\]" suitecrm.log

[CalendarSyncOrchestrator]

Основная логика синхронизации

grep "\[CalendarSyncOrchestrator\]" suitecrm.log

[CalendarSyncOperationDiscovery]

Сравнение событий и обнаружение операций

grep "\[CalendarSyncOperationDiscovery\]" suitecrm.log

[CalendarEventConflictResolver]

Обработка разрешения конфликтов

grep "\[CalendarEventConflictResolver\]" suitecrm.log

[SuiteCRMInternalCalendarProvider]

Операции встреч, фиксируемые в SuiteCRM

grep "\[SuiteCRMInternalCalendarProvider\]" suitecrm.log

Формат с двоеточием ClassName: message:

Префикс Описание Команда фильтрации в Linux/macOS

GoogleCalendarProvider:

Операции API Google Calendar

grep "GoogleCalendarProvider:" suitecrm.log

CalDAVProvider:

Операции протокола CalDAV

grep "CalDAVProvider:" suitecrm.log

Примеры записей журнала
[CalendarSync][syncAllCalendarAccounts] Starting sync for all calendar accounts
[CalendarSyncOrchestrator][syncCalendarAccount] Starting sync for account: My Google Calendar
[CalendarSyncOrchestrator][fetchAndEnrichEvents] Fetched 47 events from external provider
GoogleCalendarProvider: Successfully connected to Google Calendar
GoogleCalendarProvider: getEvents called with query: startDate=2024-01-01, endDate=2024-03-31
CalDAVProvider: Successfully connected to CalDAV server
[CalendarEventConflictResolver][resolve] Conflict detected - applying timestamp strategy
[CalendarSyncOrchestrator][syncComplete] Sync completed for account ID 12345
[CalendarSyncOrchestrator][syncComplete] Синхронизация завершена для учетной записи с ID 12345

Фильтрация записей журнала

Чтобы отфильтровать записи, относящиеся к синхронизации календаря:

В Linux/macOS выполните:

# Фильтрация всех записей, связанные с синхронизацией календарей
grep -E "\[CalendarSync|\[CalendarSyncOrchestrator|CalendarProvider:" suitecrm.log | tail -100

# Фильтрация только определенного класса
grep "\[CalendarSyncOrchestrator\]" suitecrm.log | tail -100

В Windows выполните:

findstr /R "CalendarSync CalendarProvider" suitecrm.log

В интерфейсе SuiteCRM:

В журнале выполните поиск по ключевым словам CalendarSync или CalendarProvider. Просмотр файла журнала осуществляется в панели администратора.

Вопросы безопасности

Понимание аспектов безопасности поможет обеспечить надежную синхронизацию календаря и защитить ваши данные.

Конфиденциальность данных

Модель прямого подключения:
  • Данные передаются напрямую между экземпляром SuiteCRM и серверами поставщика календаря

  • Не используются промежуточные сервисы или серверы третьих сторон

  • SuiteCRM выступает в качестве клиента для API внешнего календаря

  • Сетевой трафик шифруется при использовании HTTPS

Передаваемые данные:

По сети передаются следующие данные о встречах:

  • Названия и темы встреч

  • Даты/время начала и окончания встреч

  • Описания встреч

  • Информация о местоположении

  • Идентификаторы внешнего календаря (для сопоставления)

Данные, НЕ передаваемые на сервер:
  • Пароли пользователей SuiteCRM

  • Информация о назначенных ответственных

  • Подробная информация о родительских записях (связанные Контрагенты, Контакты, Сделки)

  • Пользовательские поля (метаданные SuiteCRM)

  • Данные о приглашённых участниках встреч

  • Статус встреч (В планах, Состоялась, Не состоялась)

Политика конфиденциальности поставщика:

Внешние поставщики календарей имеют свои собственные политики хранения данных и конфиденциальности:

  • Google Calendar: Данные хранятся на серверах Google и регулируются политикой конфиденциальности и правилами хранения данных Google

  • Облачные поставщики CalDAV: Зависит от политики конфиденциальности конкретного поставщика

    При использовании собственного сервера CalDAV:

    Доступен полный контроль над хранением и политикой конфиденциальности данных.

Убедитесь, что политика конфиденциальности поставщика календаря соответствует требованиям вашей организации (GDPR, HIPAA, CCPA и т.д.).

Контроль доступа

Авторизация для каждого пользователя:
  • Каждый пользователь авторизует только свое собственное подключение к календарю через модуль Учётные записи календаря

  • Пользователи не могут получить доступ к внешним календарям других пользователей, используя функционал SuiteCRM

  • Учётные записи календаря принадлежат конкретным пользователям

  • Администраторы системы могут просматривать учётные записи календаря, но не могут авторизовываться от имени пользователей

Токены OAuth (Google Calendar):
  • OAuth-токены доступа и обновления хранятся в зашифрованном виде в базе данных SuiteCRM

  • Токены шифруются с использованием ключа шифрования SuiteCRM (см. файл config.php)

  • Токены во время авторизации передаются по HTTPS

  • Обновление токенов происходит автоматически без участия пользователя

  • При использовании просроченных токенов требуется повторная авторизация пользователя

Учётные данные CalDAV:
  • Имя пользователя и пароль хранятся в базе данных SuiteCRM

  • Пароли перед хранением шифруются с помощью алгоритма Blowfish (db_encrypted ⇒ true); имена пользователей хранятся в открытом виде

  • Для дополнительной безопасности рекомендуется использовать пароли приложений вместо паролей учётных записей

Права администратора:
  • Администраторы системы могут:

    • Настраивать глобальные параметры синхронизации (диапазон синхронизации, стратегия разрешения конфликтов, поведение при удалении записей)

    • Запускать синхронизацию для всех пользователей, используя немедленную синхронизацию

    • Просматривать все учётные записи календаря (но без возможности OAuth-авторизации от имени пользователей)

    • Получать доступ к журналам синхронизации и диагностической информации

    • Изменять расширенные параметры синхронизации в файле config_override.php (при доступе к консоли)

  • Администраторы НЕ МОГУТ:

    • Получать прямой доступ к содержимому внешних календарей пользователей

    • Повторно авторизовывать подключения OAuth от имени пользователей без использования их учётных данных

    • Просматривать зашифрованные токены в открытом виде

    • Расшифровывать сохраненные пароли CalDAV

Рекомендации

Используйте HTTPS:

Убедитесь, что подключение к SuiteCRM происходит с использованием HTTPS:

  • В рабочей среде: HTTPS обязателен для защиты токенов и учётных данных

  • При разработке/тестировании: Используйте HTTPS даже в средах разработки, когда это возможно

  • Конфигурация SSL: Используйте действительные SSL-сертификаты (не самоподписанные - в рабочей среде)

  • HTTP Strict Transport Security: Включите HSTS для принудительного использования HTTPS-соединений

Используйте пароли приложений:

По возможности для подключений к CalDAV используйте пароли приложений. Преимущества такого подхода:

  • Ограниченная область действия (доступ только к календарю)

  • Простое аннулирование пароля без изменения пароля основной учетной записи

  • Улучшенный аудит безопасности

  • Соответствие политикам многофакторной аутентификации (MFA)

  • Дополнительный пароль, используемый независимо от основных учётных данных

Выполняйте регулярный аудит:

Поддерживайте необходимый уровень безопасности посредством периодических аудитов:

  • Ежемесячный аудит: проверяйте активные учётные записи календаря на наличие неиспользуемых или 'осиротевших' подключений

  • Ежеквартальный аудит: проверяйте актуальность токенов OAuth для обеспечения доступа пользователей к календарям

  • Мониторинг журналов: проводите анализ журналов синхронизации на предмет подозрительной активности или повторяющихся сбоев аутентификации

  • Проверка доступа: проверяйте, что только у авторизованных пользователей есть активные учётные записи календаря

    Контрольный список аудита:
  • ❏ Проверка всех активных учётных записей календаря

  • ❏ Проверка актуальности Даты последней синхронизации для всех учётных записей

  • ❏ Проверка учётных записей с неудачными попытками подключения

  • ❏ Удаление учётных записей календаря для уволившихся или неактивных пользователей

  • ❏ Анализ журналов синхронизации на предмет сбоев аутентификации или повторяющихся ошибок

  • ❏ Проверка прав доступа к внешнему календарю

  • ❏ Проверка актуальности учётных данных у провайдеров OAuth

Обеспечьте максимальную безопасность данных:
  • Храните резервные копии базы данных в зашифрованном хранилище

  • В БД при возможности включите шифрование полей, содержащих конфиденциальную информацию (сторонние решения)

  • Используйте надежные пароли для учетных записей CalDAV (минимум 16 символов)

  • Регулярно меняйте пароли CalDAV и пароли приложений (ежеквартально или ежегодно)

  • Внедрите при возможности ограничения по IP-адресам для доступа к внешнему календарю (при использовании CalDAV на собственном сервере)

  • Используйте VPN для подключения к CalDAV при размещении календаря на собственном сервере (повышенная безопасность)

  • Задокументируйте, у каких пользователей включена синхронизация календаря, и проверьте их права доступа

Дальнейшие шаги

При необходимости ознакомьтесь с другими разделами документации:

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.