Перейти к содержанию

Инструкция по настройке интеграции с DLP-системами

Назначение документа

В данном документе представлено описание механизма отправки запросов в DLP-системы, а также процесс настройки отправки данных в DLP-систему для версии 25.2 и выше.

Документ предназначен для использования системными администраторами.

Дополнительная документация

Архитектура и описание системы VK Teams — в документе представлено описание сервисов, обеспечивающих отправку данных в DLP-систему Solar Dozor, и расположение log-файлов данных сервисов. Не является частью публичной документации, обратитесь к представителю VK Tech, чтобы ознакомиться с документом.

Инструкция по настройке интеграции с DLP-системами SearchInform и InfoWatch — в документе описан механизм отправки запросов в DLP-системы SearchInform и InfoWatch, актуальный для версии 24.9 и ниже. Документ предназначен для использования системными администраторами.

Общее описание

DLP-система — специализированное программное обеспечение, предназначенное для защиты компании от утечек информации.

VK Teams поддерживает интеграцию со следующими поставщиками DLP-систем:

  1. Solar Dozor
  2. SearchInform
  3. InfoWatch
DLP-система Отправка данных Получение результата проверки
Solar Dozor Используется протокол ICAP.
Метаинформация передается в заголовках, а не в теле запроса. В теле запроса передаётся только проверяемый контент. Содержимое заголовков закодировано Base64 (RFC 2045).
Результат проверки возвращается в ответе на отправку данных для проверки.
InfoWatch Передача данных осуществляется через InfoWatch Traffic Monitor SDK методом pushAPI SDK. Данные, отправляемые сервисом Plumber в DLP-систему InfoWatch, представлены в документации к продукту https://kb.infowatch.com/pages/viewpage.action?pageId=165545261. Результат проверки возвращается в ответе на HTTP-запрос в проверяющую систему, запрос содержит идентификатор отправленного события.
SearchInform Для текстовых сообщений: используется протокол ICAP.
Для файлов: HTTP-запрос.
Для текстовых сообщений: результат проверки возвращается в ответе на ICAP-запрос отправки данных.
Для файлов: результат проверки возвращается в ответе на HTTP-запрос отправки данных.

Режимы проверки отправляемых сообщений:

  • Синхронный – адресаты не увидят сообщение, пока не пройдет проверка DLP-системой. В случае негативного результата проверки сообщение не будет показано адресатам.
  • Асинхронный — в случае негативного результата проверки в DLP-системе автоматический отзыв сообщения не происходит.

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

  • Личный чат.
  • Групповой чат.
  • Канал.
  • Чаты звонков и чаты обсуждения задач.

Есть два типа запросов, отправляемых в DLP-систему:

  • Текстовое сообщение — текстовое сообщение и текстовое сообщение с прикреплённым файлом без проверки файла.
  • Файл — фото, видео, аудио, стикер, голосовое сообщение, текстовый и табличный документ, архивы. Ограничений на расширение файла нет. Размер — не более 4 Гб.

Если отправленное сообщение содержит и текст, и файл, контент проверяется на стороне DLP-системы независимо. Проверка файла не блокирует отправку сообщения.

Проверка текстовых сообщений

При отправке пользователем текстового сообщения VK Teams отправляет данные на проверку в DLP-систему. Вместе с текстом сообщения передается информация об отправителе сообщения (user, login, user-agent, IP-адрес), эти параметры учитывается DLP-системой при принятии решения о блокировке сообщения. Также отправляется информация о количестве участников чата. До получения ответа от DLP-системы текстовое сообщение не отображается у адресатов и на других устройствах отправителя.

При получении положительного ответа от DLP-системы текстовое сообщение становится видимым для адресатов. Отправитель сообщения видит, что сообщение получено адресатами.

При получении отрицательного ответа от DLP-системы VK Teams блокирует текстовое сообщение. Заблокированные сообщения отображаются в клиентском приложении отправителя в статусе часов и не синхронизируются с остальными устройствами этого пользователя. Адресаты не видят заблокированное сообщение.

Если ответ DLP-системы сопровождает статус «невозможно провести анализ», это дополнительно фиксируется в журнале на сервере VK Teams, передается извещение в систему мониторинга и VK Teams разрешает или запрещает отправку сообщения в зависимости от настроек интеграции.

При превышении времени ожидания ответа от DLP-системы VK Teams дополнительно отображает предупреждение в логах и передает извещение в систему мониторинга.

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

VK Teams не хранит заблокированные текстовые сообщения. При сигнале от DLP-системы о блокировке, мессенджер не отправляет текстовое сообщение, оно остается (хранится) на устройстве пользователя.

Проверка файлов

При отправке пользователем файла VK Teams отправляет данные на проверку в DLP-систему. При этом ссылка на файл всегда отправляется адресатам, но файл недоступен для просмотра или скачивания, пока не получен ответ от DLP-системы. Для файлов типа картинок также отключена возможность превью, до получения положительного ответа от DLP-системы адресаты видят только «заглушку» файла.

При получении положительного ответа от DLP-системы файл становится доступным для просмотра и скачивания в зависимости от уровня доступа файла:

  • External – файл доступен вне корпоративной системы передачи данных (интернет/внешняя среда).
  • Internal – файл доступен только в корпоративной системе передачи данных.

Примечание

Правила определения уровня доступа настраиваются администратором организации. По умолчанию в инсталляции не предоставляется никакой конфигурации правил, связывающих эти уровни с конкретными подсетями/клиентами. Настройка описана ниже.

Уровень доступа на скачивание файла определяется по IP-адресу получателя и устройству, с которого он зашёл в VK Teams.

При получении отрицательного ответа от DLP-системы файл недоступен для просмотра и скачивания, но адресатам доступны метаданные файла (название, тип расширения, размер и т. д.).

Если DLP-система недоступна

При ожидании ответа от DLP-системы или если DLP-система недоступна, файл недоступен для просмотра и скачивания, но адресатам доступны метаданные файла.

При ожидании ответа от DLP-системы VK Teams отражает предупреждение в логах и передает извещение в систему мониторинга.

Если DLP-система недоступна, VK Teams отражает сбой в логах и передает извещение во внешнюю систему мониторинга по стандартному протоколу. Далее, в зависимости от настроек, VK Teams отправляет файлы без проверки в DLP-системе либо останавливает отправку файлов до восстановления доступа к DLP-системе.

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

Если ответ DLP-системы сопровождает статус «невозможно провести анализ», это дополнительно фиксируется в журнале на сервере VK Teams, и извещение передается в систему мониторинга.

Настройка отправки текстовых сообщений в DLP-систему

Внимание

Все команды в консоли выполняются под пользователем root.

Шаг 1. Активируйте сервис Vahter

Сервис отвечает за интеграцию с DLP-системой и находится в инсталляции в неактивном состоянии.

Чтобы активировать сервис:

  1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/projects.yml и удалите из секции disabled сервис Vahter.
  2. Запустите деплой сервиса:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t vahter
    
  3. Проверьте, что сервис запустился:

    kubectl -n vkteams get po | grep vahter
    

    В выводе консоли pod должен находиться в статусе Running.

Шаг 2. Настройте конфигурацию адаптера к DLP-системе

В конфигурационном файле /usr/local/etc/k8s/helmwave/store/dlp.yml в секции adapters содержатся общие и исключительные параметры для проверки текста и файлов. Секция adapter_manager управляет всеми адаптерами, описанными в секции adapters, и определяет, какой адаптер будет использован.

  1. Укажите настройки подключения к DLP-системе:

    adapters:
        solar_dozor: 
            name: solar_dozor
            enabled: false
            url: <your_solar_dozor_host.example>
            icap_client_timeout: 10s
            topic_url: http://VkTeams
            check_text_warn_timeout: 1s
            check_text_disconnect_timeout: 3s
            check_file_warn_timeout: 1m #используется для отправки файлов в DLP-систему
            check_file_disconnect_timeout: 10m #используется для отправки файлов в DLP-систему
            strategy_on_fail: fail 
            debug_mode: false
            access_levels_recheck: false
            default_access_level: Internal #используется для отправки файлов в DLP-систему
            access_levels: #используется для отправки файлов в DLP-систему
              - Internal 
              - External
    adapters_manager:
        icap_debug: false
        default_adapter_name: solar_dozor
    

    где:

    • name — имя адаптера.

    • enabled — если значение true – включена отправка данных в DLP-систему, если false – выключена.

    • url — адрес ICAP-сервера.

    • icap_client_timeout — таймаут для соединения с ICAP-сервером.

    • topic_url — топик сообщения.

    • check_text_warn_timeout — таймаут, при достижении которого пишется лог о превышении времени проверки текста и увеличивается соответствующая метрика, которая подсчитывает количество превышений этого порога. Необходим для оценки времени реакции DLP-системы.

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

      Внимание

      Не устанавливайте таймаут более семи секунд, это может привести к проблемам отправки сообщений в клиентских приложениях VK Teams

    • check_file_warn_timeout — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • check_file_disconnect_timeout — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • strategy_on_fail — используется для формирования результата проверки текста, когда DLP-система долго не отвечает или недоступна. Параметр может принимать значения:

      • ok — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в сервис Vahter будет возвращаться успешный ответ, как если бы был получен положительный результат проверки сообщения.

      • block — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в envoy-плагин Tourniquet будет возвращаться ошибка. Плагин будет интерпретировать ее в соответствии с правилами dlp_resp_blocked_code и dlp_resp_blocked_body.

      • fail — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в envoy-плагин Tourniquet будет возвращаться ошибка. Плагин будет интерпретировать ее в соответствии с правилами dlp_internal_error_code и dlp_internal_error_body.

    • debug_mode — активация режима отладки, который рекомендуется включать при первичной настройке системы, чтобы в случае проблемы в интеграции с DLP-системой работа мессенджера не была затронута. Режим отладки отличается от реального лишь тем, что на проверку текста будет сразу отдан успешный ответ, как если бы DLP-система провела проверку и не нашла бы ничего подозрительного в тексте. Значение true включает режим отладки, значение false выключает.

    • access_levels_recheck — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • default_access_level — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • access_levels — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    В секции adapters_manager укажите настройки управления адаптерами:

    • icap_debug — если true, то включено подробное логирование при общении по протоколу ICAP.
    • default_adapter_name — укажите адаптер, используемый по умолчанию.

    adapters:
        info_watch: 
            name: info_watch
            enabled: false
            address: <your_infowatch_host.example>
            token: <your_token>
            company: VKteams # не меняйте параметр при использовании предоставленного manifest.json, значения должны совпадать с указанными внутри manifest.json
            imservice: im_VKteams # не меняйте параметр при использовании предоставленного manifest.json, значения должны совпадать с указанными внутри manifest.json
            capture_server_fqdn: vahter
            push_api_version: 1.9
            push_api_address: <your_infowatch_host.example>:1234/verdict
            push_api_retry_count: 5
            check_text_warn_timeout: 1s
            check_text_disconnect_timeout: 3s
            check_file_warn_timeout: 1m #используется для отправки файлов в DLP-систему
            check_file_disconnect_timeout: 10m #используется для отправки файлов в DLP-систему
            strategy_on_fail: block
            debug_mode: false
            access_levels_recheck: false
            default_access_level: Internal #используется для отправки файлов в DLP-систему
            access_levels: #используется для отправки файлов в DLP-систему
              - Internal 
              - External
            check_file_chunk_bytes: 100480 #используется для отправки файлов в DLP-систему
    adapters_manager:
        default_adapter_name: solar_dozor            
    

    где:

    • name — имя адаптера.

    • enabled — если значение true – включена отправка данных в DLP-систему, если false – выключена.

    • address — адрес проверяющего сервера.

    • token — токен доступа.

    • company — наименования компании отправителя. Не меняйте параметр при использовании предоставленного manifest.json, значения должны совпадать с указанными внутри manifest.json.

    • imservice — наименование сервиса отправителя. Не меняйте параметр при использовании предоставленного manifest.json, значения должны совпадать с указанными внутри manifest.json.

    • capture_server_fqdn — наименование сервера отправителя.

    • push_api_version — версия push_api.

    • push_api_address — адрес HTTP-сервера, возвращающего результат проверки.

    • push_api_retry_count — количество попыток получения результата.

    • check_text_warn_timeout — таймаут, при достижении которого пишется лог о превышении времени проверки текста и увеличивается соответствующая метрика, которая подсчитывает количество превышений этого порога. Необходим для оценки времени реакции DLP-системы.

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

      Внимание

      Не устанавливайте таймаут более семи секунд, это может привести к проблемам отправки сообщений в клиентских приложениях VK Teams

    • check_file_warn_timeout — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • check_file_disconnect_timeout — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • strategy_on_fail — используется для формирования результата проверки текста, когда DLP-система долго не отвечает или недоступна. Параметр может принимать значения:

      • ok — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в сервис Vahter будет возвращаться успешный ответ, как если бы был получен положительный результат проверки сообщения.

      • block — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в envoy-плагин Tourniquet будет возвращаться ошибка. Плагин будет интерпретировать ее в соответствии с правилами dlp_resp_blocked_code и dlp_resp_blocked_body.

      • fail — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в envoy-плагин Tourniquet будет возвращаться ошибка. Плагин будет интерпретировать ее в соответствии с правилами dlp_internal_error_code и dlp_internal_error_body.

    • debug_mode — активация режима отладки, который рекомендуется включать при первичной настройке системы, чтобы в случае проблемы в интеграции с DLP-системой работа мессенджера не была затронута. Режим отладки отличается от реального лишь тем, что на проверку текста будет сразу отдан успешный ответ, как если бы DLP-система провела проверку и не нашла бы ничего подозрительного в тексте. Значение true включает режим отладки, значение false выключает.

    • access_levels_recheck— используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • default_access_level— используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • access_levels — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • check_file_chunk_bytes — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    В секции adapters_manager укажите настройки управления адаптерами:

    • default_adapter_name — укажите адаптер, используемый по умолчанию.
    adapters:
        search_inform:
            name: search_inform                             
            enabled: false                                  
            url: <your_searchinform_host.example>             
            icap_client_timeout: 600s                       
            topic_url: http://VkTeams                       
            check_text_warn_timeout: 1s                     
            check_text_disconnect_timeout: 5s              
            check_file_warn_timeout: 1s #используется для отправки файлов в DLP-систему                   
            check_file_disconnect_timeout: 1500s #используется для отправки файлов в DLP-систему          
            strategy_on_fail: block                         
            debug_mode: false                              
            default_access_level: Internal #используется для отправки файлов в DLP-систему                
            file_api_retry_count: 10 #используется для отправки файлов в DLP-систему                      
            file_api_retry_timeout: 3m #используется для отправки файлов в DLP-систему                     
            file_api_login: test #используется для отправки файлов в DLP-систему                           
            file_api_password: test #используется для отправки файлов в DLP-систему                        
            file_api_auth_address: <searchinform_host.example>:9082 #используется для отправки файлов в DLP-систему
            file_api_address: <searchinform_host.example>:9086 #используется для отправки файлов в DLP-систему      
            file_api_insecure: true #используется для отправки файлов в DLP-систему
    adapters_manager:
        default_adapter_name: search_inform
    

    где:

    • name — имя адаптера.

    • enabled — если значение true – включена отправка данных в DLP-систему, если false – выключена.

    • url — адрес и порт ICAP API проверяющего сервера.

    • icap_client_timeout — таймаут подключения к ICAP-серверу.

    • topic_url — топик сообщения.

    • check_text_warn_timeout — таймаут, при достижении которого пишется лог о превышении времени проверки текста и увеличивается соответствующая метрика, которая подсчитывает количество превышений этого порога. Необходим для оценки времени реакции DLP-системы.

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

      Внимание

      Не устанавливайте таймаут более семи секунд, это может привести к проблемам отправки сообщений в клиентских приложениях VK Teams

    • check_file_warn_timeout — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • check_file_disconnect_timeout — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • strategy_on_fail — используется для формирования результата проверки текста, когда DLP-система долго не отвечает или недоступна. Параметр может принимать значения:

      • ok — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в сервис Vahter будет возвращаться успешный ответ, как если бы был получен положительный результат проверки сообщения.

      • block — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в envoy-плагин Tourniquet будет возвращаться ошибка. Плагин будет интерпретировать ее в соответствии с правилами dlp_resp_blocked_code и dlp_resp_blocked_body.

      • fail — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в envoy-плагин Tourniquet будет возвращаться ошибка. Плагин будет интерпретировать ее в соответствии с правилами dlp_internal_error_code и dlp_internal_error_body.

    • debug_mode — активация режима отладки, который рекомендуется включать при первичной настройке системы, чтобы в случае проблемы в интеграции с DLP-системой работа мессенджера не была затронута. Режим отладки отличается от реального лишь тем, что на проверку текста будет сразу отдан успешный ответ, как если бы DLP-система провела проверку и не нашла бы ничего подозрительного в тексте. Значение true включает режим отладки, значение false выключает.

    • default_access_level— используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • file_api_retry_count — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • file_api_retry_timeout — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • file_api_login — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • file_api_password — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • file_api_auth_address — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • file_api_address — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    • file_api_insecure — используется для отправки файлов в DLP-систему, не изменяйте параметр.

    В секции adapters_manager укажите настройки управления адаптерами:

    • default_adapter_name — укажите адаптер, используемый по умолчанию.
  2. Примените изменения командой:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t vahter
    

Шаг 3. Создайте плагин для подключения провайдера

Данный шаг актуален только для DLP-системы InfoWatch. Если вы используете Solar Dozor или SearchInform, перейдите к следующему шагу.

Подключение провайдера данных осуществляется через подключение плагина. В плагине содержится информация о поставщике данных, типы обрабатываемых событий и пользовательские заголовки. Подробнее про регистрацию сторонних компонентов можно посмотреть в документации InfoWatch — https://kb.infowatch.com/pages/viewpage.action?pageId=217787144

Для создания плагина создайте файл manifest.json. Пример manifest.json-файла плагина:

{
    "PLUGIN_ID": "346227C2657C4701B86892CAE732805D",
    "DISPLAY_NAME": "Плагин для события мессенджера",
    "DESCRIPTION": {
        "eng": "IM events reception",
        "rus": "Прием событий менеджера"
    },
    "VERSION": "0.0.1",
    "VENDOR": "VKteams",
    "LICENSE": [
        {
            "PATH": "licenses/tm_license.license"
        }
    ],
    "PATTERN_SEARCH_LICENSE": {
        "operator": "and",
        "conditions": [
            {
                "common_name": "VKteams"
            },
            {
                "object_type": "im_VKteams"
            },
            {
                "protocol": "NONE"
            }
        ]
    },
    "ADDS_SERVICES": {
        "SERVICE_TYPE": [
            {
                "SERVICE_MNEMO": "im_VKteams",
                "DATA_CLASS": [
                    "kChat",
                    "kFileExchange"
                ],
                "ICON": "icon/acme_messenger.png",
                "LOCALE": {
                    "rus": "Мессенджер VKteams",
                    "eng": "VKteams messenger"
                },
                "CONTACT_TYPE": [
                    {
                        "MNEMO": "im_VKteams",
                        "SCOPE": [
                            "person"
                        ],
                        "ICON": "icon/acme_messenger.png",
                        "LOCALE": {
                            "rus": "Аккаунт VKteams",
                            "eng": "VKteams account"
                        }
                    }
                ]
            }
        ]
    },
    "OBJECT_HEADER": [
        {
            "NAME": "VKteams_file_hash_header",
            "NOTE": {
                "rus": "Хеш файла",
                "eng": "File hash"
            },
            "DATA_CLASS": [
                "kChat",
                "kFileExchange"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_text_chat_name_header",
            "NOTE": {
                "rus": "Название чата",
                "eng": "Chat name"
            },
            "DATA_CLASS": [
                "kChat"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_text_chat_id_header",
            "NOTE": {
                "rus": "ID чата",
                "eng": "Chat ID"
            },
            "DATA_CLASS": [
                "kChat"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_text_chat_participants_header",
            "NOTE": {
                "rus": "Количество участников чата",
                "eng": "Number of chat participants"
            },
            "DATA_CLASS": [
                "kChat"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "number",
            "FORMAT": "integer",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_message_type_header",
            "NOTE": {
                "rus": "Тип отправленного сообщения",
                "eng": "Message type"
            },
            "DATA_CLASS": [
                "kChat",
                "kFileExchange"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_sender_ip_header",
            "NOTE": {
                "rus": "IP отправителя",
                "eng": "Sender IP"
            },
            "DATA_CLASS": [
                "kChat",
                "kFileExchange"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_sender_ua_header",
            "NOTE": {
                "rus": "UA отправителя",
                "eng": "Sender UA"
            },
            "DATA_CLASS": [
                "kChat",
                "kFileExchange"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_access_level_header",
            "NOTE": {
                "rus": "Уровень доступа к файлу",
                "eng": "File access_level"
            },
            "DATA_CLASS": [
                "kFileExchange"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        }
    ]
}

Шаг 4. Активируйте envoy-плагин Tourniquet

  1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/projects/istio/values/istio-ingress.yml и убедитесь, что gateway включен:

    gateway:
        enabled: true
    
  2. В конфигурационном файле /usr/local/etc/k8s/helmwave/store/dlp.yml установить в поле tourniquetEnabled значение true.

  3. Примените изменения командой:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t istio-ingress
    

    Примечание

    Если вы хотите получать IP-адрес клиентского приложения, сделавшего запрос в DLP-систему:

    1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/projects/istio/values/istio-ingress.yml.
    2. В секцию tourniquet вставьте параметр dlp_ip_source_header. Укажите для него заголовок, который будет использоваться для извлечения IP-адреса клиента, сделавшего запрос.

      tourniquet:
        defined: [[.Release.Store.dlp.tourniquetEnabled]]
        plugin_config: &tourniquet_plugin_config
          dlp_vahter_addr: "vahter.vkteams.svc.cluster.local:44448"
          # добавьте параметр сюда
          dlp_ip_source_header: "x-forwarded-for" 
      
    3. Примените изменения:

      HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t istio-ingress
      
  4. Проверьте, что плагин запустился:

    kubectl -n istio-ingress get po | grep istio-ingress
    
    В выводе консоли pod должен находиться в статусе Running.
  5. Проверьте логи сервиса на возможные проблемы:

    sudo kubectl logs -n istio-ingress $(sudo kubectl get pod -n istio-ingress | grep istio-ingress | awk '{print $1}')
    
    Искать необходимо по названию модуля Tourniquet. Пример проблем в логах:

    2024-11-21T13:52:28.946719Z error   envoy golang external/envoy/contrib/golang/common/log/cgo.cc:24 failed to parse golang plugin config: dlp_resp_blocked_code: expect float64 while got string    thread=14
    2024-11-21T13:52:28.946961Z warning envoy config external/envoy/source/extensions/config_subscription/grpc/delta_subscription_state.cc:269  delta config for type.googleapis.com/envoy.config.listener.v3.Listener rejected: Error adding/updating listener(s) 0.0.0.0_80: golang filter failed to parse plugin config: tourniquet /var/lib/im/modules/tourniquet.so
    
    Подобная запись в логах говорит о проблемах в конфигурации — необходимо перепроверить конфигурацию или вернуть конфиг к значению по умолчанию.

Шаг 5. Отключите Zstandard-сжатие

Для правильной работы модуля Tourniquet необходимо отключить Zstd-сжатие. Для этого:

  1. Перейдите в конфигурационный файл /usr/local/nginx-im/html/myteam/myteam-config.json и установите для полей zstd-requests-enabled и zstd-responses-enabled значение false:

    {
        // ...
          "zstd-requests-enabled": false,
          "zstd-responses-enabled": false,
        // ...
    }
    
  2. Перезапустите сервис Godmod:

    kubectl delete pods $(kubectl get pods -A | grep  myteam-admin | awk '{print $2}') -n vkteams
    

Настройка отправки файлов в DLP-систему

Внимание

Все команды в консоли выполняются под пользователем root.

Шаг 1. Активируйте сервис Vahter

Сервис отвечает за интеграцию с DLP-системой Solar Dozor через протокол ICAP и находится в инсталляции в неактивном состоянии.

Чтобы активировать сервис:

  1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/projects.yml и удалите из секции disabled сервис Vahter.
  2. Запустите деплой сервиса:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t vahter
    
  3. Проверьте, что сервис запустился:

    kubectl -n vkteams get po | grep vahter
    

    В выводе консоли pod должен находиться в статусе Running.

Шаг 2. Активируйте сервис Multifora

  1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/projects.yml и удалите из секции disabled сервис Multifora.
  2. Запустите деплой сервиса:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t multifora
    
  3. Проверьте, что сервис запустился:

    kubectl -n vkteams get po | grep multifora
    

    В выводе консоли pod должен находиться в статусе Running.

Шаг 3. Настройте конфигурацию адаптера к DLP-системе

В конфигурационном файле /usr/local/etc/k8s/helmwave/store/dlp.yml в секции adapters содержатся общие параметры для проверки текста/файлов и исключительные для текста и файлов. Секция adapter_manager управляет всеми адаптерами, описанными в секции adapters, и определяет, какой адаптер будет использован.

  1. Укажите настройки подключения к DLP-системе:

    adapters:
        solar_dozor: 
            name: solar_dozor
            enabled: false
            url: <your_solar_dozor_host.example>
            icap_client_timeout: 10s
            topic_url: http://VkTeams
            check_text_warn_timeout: 1s #используется для отправки текстовых сообщений в DLP-систему
            check_text_disconnect_timeout: 3s #используется для отправки текстовых сообщений в DLP-систему
            check_file_warn_timeout: 1m 
            check_file_disconnect_timeout: 10m 
            strategy_on_fail: fail 
            debug_mode: false
            access_levels_recheck: false
            default_access_level: Internal 
            access_levels: 
              - Internal 
              - External
    adapters_manager:
        icap_debug: false
        default_adapter_name: solar_dozor
    

    где:

    • name — имя адаптера.

    • enabled — если значение true – включена отправка данных в DLP-систему, если false – выключена.

    • url — адрес для интеграции с DLP-системой.

    • icap_client_timeout — таймаут на соединение с DLP-системой.

    • topic_url — тема сообщения в URL-формате.

    • check_text_warn_timeout — используется для отправки текстовых сообщений в DLP-систему, не изменяйте параметр.

    • check_text_disconnect_timeout — используется для отправки текстовых сообщений в DLP-систему, не изменяйте параметр.

      Внимание

      Не устанавливайте таймаут более семи секунд, это может привести к проблемам отправки сообщений в клиентских приложениях VK Teams

    • check_file_warn_timeout — таймаут, при достижении которого пишется лог о превышении времени проверки файлов и увеличивается соответствующая метрика, которая подсчитывает количество превышений этого порога. Необходим для оценки времени реакции DLP-системы.

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

    • strategy_on_fail — используется для формирования результата проверки текста, когда DLP-система долго не отвечает или недоступна. Параметр может принимать значения:

      • ok — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в сервис Vahter будет возвращаться успешный ответ, как если бы был получен положительный результат проверки сообщения.

      • block — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в envoy-плагин Tourniquet будет возвращаться ошибка. Плагин будет интерпретировать ее в соответствии с правилами dlp_resp_blocked_code и dlp_resp_blocked_body.

      • fail — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в envoy-плагин Tourniquet будет возвращаться ошибка. Плагин будет интерпретировать ее в соответствии с правилами dlp_internal_error_code и dlp_internal_error_body.

    • debug_mode — активация режима отладки, который рекомендуется включать при первичной настройке системы, чтобы в случае проблемы в интеграции с DLP-системой работа мессенджера не была затронута. Режим отладки отличается от реального лишь тем, что на проверку текста будет сразу отдан успешный ответ, как если бы DLP-система провела проверку и не нашла бы ничего подозрительного в тексте. Значение true включает режим отладки, значение false выключает.

    • access_levels_recheck — если значение true, включается логика «перезапросов» доступа к файлу из разных контуров. Пример: пользователь ранее запросил доступ к файлу из корпоративной сети, и DLP-система вернула позитивный результат проверки. Далее пользователь запросил доступ к тому же файлу из внешней сети. Если для параметра установлено значение true, в DLP-систему будет направлен «перезапрос» доступа. Перезапросы выполняются последовательно - от самого доверенного до менее доверенного. Результатом будет минимальный уровень доступа, которым должен обладать пользователь, чтобы просмотреть/скачать файл.

    • default_access_level— уровень доступа к файлам по умолчанию, используется при выключеннном параметре access_levels_recheck.

    • access_levels — уровни доступа к файлу:

      • External — файл доступен вне корпоративной системы передачи данных (интернет/внешняя среда).
      • Internal — файл доступен только в корпоративной системе передачи данных. Обязательное требование к порядку уровней – от самого доверенного к менее доверенному уровню доступа, иначе будут получены некорректные результаты проверки и «перепроверки».

    В секции adapters_manager укажите настройки управления адаптерами:

    • icap_debug — если true, то включено подробное логирование при общении по протоколу ICAP.
    • default_adapter_name — укажите адаптер, используемый по умолчанию.
    adapters:
        info_watch: 
            name: info_watch
            enabled: false
            address: <your_infowatch_host.example>
            token: <your_token>
            company: VKteams # не меняйте параметр при использовании предоставленного manifest.json, значения должны совпадать с указанными внутри manifest.json
            imservice: im_VKteams # не меняйте параметр при использовании предоставленного manifest.json, значения должны совпадать с указанными внутри manifest.json
            capture_server_fqdn: vahter
            push_api_version: 1.9
            push_api_address: <your_infowatch_host.example>:1234/verdict
            push_api_retry_count: 5
            check_text_warn_timeout: 1s #используется для отправки текстовых сообщений в DLP-систему
            check_text_disconnect_timeout: 3s #используется для отправки текстовых сообщений в DLP-систему
            check_file_warn_timeout: 1m 
            check_file_disconnect_timeout: 10m 
            strategy_on_fail: block
            debug_mode: false
            access_levels_recheck: false
            default_access_level: Internal 
            access_levels: 
              - Internal 
              - External
            check_file_chunk_bytes: 100480
    adapters_manager:
        default_adapter_name: info_watch            
    

    где:

    • name — имя адаптера.

    • enabled — если значение true – включена отправка данных в DLP-систему, если false – выключена.

    • address — адрес проверяющего сервера.

    • token — токен доступа.

    • company — наименования компании отправителя. Не меняйте параметр при использовании предоставленного manifest.json, значения должны совпадать с указанными внутри manifest.json.

    • imservice — наименование сервиса отправителя. Не меняйте параметр при использовании предоставленного manifest.json, значения должны совпадать с указанными внутри manifest.json.

    • capture_server_fqdn — наименование сервера отправителя.

    • push_api_version — версия push_api.

    • push_api_address — адрес HTTP-сервера, возвращающего результат проверки.

    • push_api_retry_count — количество попыток получения результата.

    • check_text_warn_timeout — используется для текстовых сообщений файлов в DLP-систему, не изменяйте параметр.

    • check_text_disconnect_timeout — используется для отправки тектовых сообщений в DLP-систему, не изменяйте параметр.

      Внимание

      Не устанавливайте таймаут более семи секунд, это может привести к проблемам отправки сообщений в клиентских приложениях VK Teams

    • check_file_warn_timeout — таймаут, при достижении которого пишется лог о превышении времени проверки файлов и увеличивается соответствующая метрика, которая подсчитывает количество превышений этого порога. Необходим для оценки времени реакции DLP-системы.

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

    • strategy_on_fail — используется для формирования результата проверки текста, когда DLP-система долго не отвечает или недоступна. Параметр может принимать значения:

      • ok — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в сервис Vahter будет возвращаться успешный ответ, как если бы был получен положительный результат проверки сообщения.

      • block — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в envoy-плагин Tourniquet будет возвращаться ошибка. Плагин будет интерпретировать ее в соответствии с правилами dlp_resp_blocked_code и dlp_resp_blocked_body.

      • fail — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в envoy-плагин Tourniquet будет возвращаться ошибка. Плагин будет интерпретировать ее в соответствии с правилами dlp_internal_error_code и dlp_internal_error_body.

    • debug_mode — активация режима отладки, который рекомендуется включать при первичной настройке системы, чтобы в случае проблемы в интеграции с DLP-системой работа мессенджера не была затронута. Режим отладки отличается от реального лишь тем, что на проверку текста будет сразу отдан успешный ответ, как если бы DLP-система провела проверку и не нашла бы ничего подозрительного в тексте. Значение true включает режим отладки, значение false выключает.

    • access_levels_recheck — если значение true, включается логика «перезапросов» доступа к файлу из разных контуров. Пример: пользователь ранее запросил доступ к файлу из корпоративной сети, и DLP-система вернула позитивный результат проверки. Далее пользователь запросил доступ к тому же файлу из внешней сети. Если для параметра установлено значение true, в DLP-систему будет направлен «перезапрос» доступа. Перезапросы выполняются последовательно - от самого доверенного до менее доверенного. Результатом будет минимальный уровень доступа, которым должен обладать пользователь, чтобы просмотреть/скачать файл..

    • default_access_level— уровень доступа к файлам по умолчанию, используется при выключеннном параметре access_levels_recheck.

    • access_levels — уровни доступа к файлу:

      • External — файл доступен вне корпоративной системы передачи данных (интернет/внешняя среда).
      • Internal — файл доступен только в корпоративной системе передачи данных. Обязательное требование к порядку уровней – от самого доверенного к менее доверенному уровню доступа, иначе будут получены некорректные результаты проверки и «перепроверки».
    • check_file_chunk_bytes — размер передаваемых чанков.

    В секции adapters_manager укажите настройки управления адаптерами:

    • default_adapter_name — укажите адаптер, используемый по умолчанию.
    adapters:
        search_inform:
            name: search_inform                             
            enabled: false                                  
            url: <your_searchinform_host.example>             
            icap_client_timeout: 600s                       
            topic_url: http://VkTeams                       
            check_text_warn_timeout: 1s #используется для отправки текстовых сообщений в DLP-систему                      
            check_text_disconnect_timeout: 5s #используется для отправки текстовых сообщений в DLP-систему               
            check_file_warn_timeout: 1s                    
            check_file_disconnect_timeout: 1500s           
            strategy_on_fail: block                         
            debug_mode: false                              
            default_access_level: Internal                 
            file_api_retry_count: 10                       
            file_api_retry_timeout: 3m                     
            file_api_login: test                            
            file_api_password: test                         
            file_api_auth_address: <searchinform_host.example>:9082 
            file_api_address: <searchinform_host.example>:9086       
            file_api_insecure: true 
    adapters_manager:
        default_adapter_name: search_inform
    

    где:

    • name — имя адаптера.

    • enabled — если значение true – включена отправка данных в DLP-систему, если false – выключена.

    • url — адрес и порт ICAP API проверяющего сервера.

    • icap_client_timeout — таймаут подключения к ICAP-серверу.

    • topic_url — топик сообщения.

    • check_text_warn_timeout — используется для отправки текстовых сообщений в DLP-систему, не изменяйте параметр.

    • check_text_disconnect_timeout — используется для отправки текстовых сообщений в DLP-систему, не изменяйте параметр.

      Внимание

      Не устанавливайте таймаут более семи секунд, это может привести к проблемам отправки сообщений в клиентских приложениях VK Teams

    • check_file_warn_timeout — таймаут, при достижении которого пишется лог о превышении времени проверки файлов и увеличивается соответствующая метрика, которая подсчитывает количество превышений этого порога. Необходим для оценки времени реакции DLP-системы.

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

    • strategy_on_fail — используется для формирования результата проверки текста, когда DLP-система долго не отвечает или недоступна. Параметр может принимать значения:

      • ok — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в сервис Vahter будет возвращаться успешный ответ, как если бы был получен положительный результат проверки сообщения.

      • block — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в envoy-плагин Tourniquet будет возвращаться ошибка. Плагин будет интерпретировать ее в соответствии с правилами dlp_resp_blocked_code и dlp_resp_blocked_body.

      • fail — при превышении порога check_text_disconnect_timeout или недоступности DLP-системы в envoy-плагин Tourniquet будет возвращаться ошибка. Плагин будет интерпретировать ее в соответствии с правилами dlp_internal_error_code и dlp_internal_error_body.

    • debug_mode — активация режима отладки, который рекомендуется включать при первичной настройке системы, чтобы в случае проблемы в интеграции с DLP-системой работа мессенджера не была затронута. Режим отладки отличается от реального лишь тем, что на проверку текста будет сразу отдан успешный ответ, как если бы DLP-система провела проверку и не нашла бы ничего подозрительного в тексте. Значение true включает режим отладки, значение false выключает.

    • default_access_level — уровень доступа, выставляемый проверенным и допущенным файлам.

    • file_api_retry_count — количество попыток запросов к HTTP API проверяющего сервера.

    • file_api_retry_timeout — таймаут запросов к HTTP API проверяющего сервера.

    • file_api_login — логин авторизации к HTTP API проверяющего сервера.

    • file_api_password — пароль авторизации к HTTP API проверяющего сервера.

    • file_api_auth_address — адрес и порт API-авторизации.

    • file_api_address — пароль авторизации HTTP API проверяющего сервера.

    • file_api_insecure — нужно ли игнорировать ошибки сертификата HTTP API проверяющего сервера.

    В секции adapters_manager укажите настройки управления адаптерами:

    • default_adapter_name — укажите адаптер, используемый по умолчанию.
  2. Примените изменения командой:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t vahter
    

Шаг 4. Создайте плагин для подключения провайдера

Данный шаг актуален только для DLP-системы InfoWatch. Если вы используете Solar Dozor или SearchInform, перейдите к следующему шагу.

Подключение провайдера данных осуществляется через подключение плагина. В плагине содержится информация о поставщике данных, типы обрабатываемых событий и пользовательские заголовки. Подробнее про регистрацию сторонних компонентов можно посмотреть в документации InfoWatch — https://kb.infowatch.com/pages/viewpage.action?pageId=217787144

Для создания плагина создайте файл manifest.json. Пример manifest.json-файла плагина:

{
    "PLUGIN_ID": "346227C2657C4701B86892CAE732805D",
    "DISPLAY_NAME": "Плагин для события мессенджера",
    "DESCRIPTION": {
        "eng": "IM events reception",
        "rus": "Прием событий менеджера"
    },
    "VERSION": "0.0.1",
    "VENDOR": "VKteams",
    "LICENSE": [
        {
            "PATH": "licenses/tm_license.license"
        }
    ],
    "PATTERN_SEARCH_LICENSE": {
        "operator": "and",
        "conditions": [
            {
                "common_name": "VKteams"
            },
            {
                "object_type": "im_VKteams"
            },
            {
                "protocol": "NONE"
            }
        ]
    },
    "ADDS_SERVICES": {
        "SERVICE_TYPE": [
            {
                "SERVICE_MNEMO": "im_VKteams",
                "DATA_CLASS": [
                    "kChat",
                    "kFileExchange"
                ],
                "ICON": "icon/acme_messenger.png",
                "LOCALE": {
                    "rus": "Мессенджер VKteams",
                    "eng": "VKteams messenger"
                },
                "CONTACT_TYPE": [
                    {
                        "MNEMO": "im_VKteams",
                        "SCOPE": [
                            "person"
                        ],
                        "ICON": "icon/acme_messenger.png",
                        "LOCALE": {
                            "rus": "Аккаунт VKteams",
                            "eng": "VKteams account"
                        }
                    }
                ]
            }
        ]
    },
    "OBJECT_HEADER": [
        {
            "NAME": "VKteams_file_hash_header",
            "NOTE": {
                "rus": "Хеш файла",
                "eng": "File hash"
            },
            "DATA_CLASS": [
                "kChat",
                "kFileExchange"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_text_chat_name_header",
            "NOTE": {
                "rus": "Название чата",
                "eng": "Chat name"
            },
            "DATA_CLASS": [
                "kChat"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_text_chat_id_header",
            "NOTE": {
                "rus": "ID чата",
                "eng": "Chat ID"
            },
            "DATA_CLASS": [
                "kChat"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_text_chat_participants_header",
            "NOTE": {
                "rus": "Количество участников чата",
                "eng": "Number of chat participants"
            },
            "DATA_CLASS": [
                "kChat"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "number",
            "FORMAT": "integer",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_message_type_header",
            "NOTE": {
                "rus": "Тип отправленного сообщения",
                "eng": "Message type"
            },
            "DATA_CLASS": [
                "kChat",
                "kFileExchange"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_sender_ip_header",
            "NOTE": {
                "rus": "IP отправителя",
                "eng": "Sender IP"
            },
            "DATA_CLASS": [
                "kChat",
                "kFileExchange"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_sender_ua_header",
            "NOTE": {
                "rus": "UA отправителя",
                "eng": "Sender UA"
            },
            "DATA_CLASS": [
                "kChat",
                "kFileExchange"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        },
        {
            "NAME": "VKteams_access_level_header",
            "NOTE": {
                "rus": "Уровень доступа к файлу",
                "eng": "File access_level"
            },
            "DATA_CLASS": [
                "kFileExchange"
            ],
            "USE_IN_POLICY": "1",
            "USE_IN_QUERY": "1",
            "USE_IN_NOTIFICATION": "1",
            "USE_IN_LIST": "1",
            "USE_IN_SHOW": "1",
            "USE_IN_DETAIL": "1",
            "TYPE": "string",
            "FORMAT": "string",
            "IS_MULTIPLE_VALUE": "1"
        }
    ]
}

Шаг 5. Активируйте envoy-плагин Tourniquet

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

Чтобы активировать плагин:

  1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/projects/istio/values/istio-ingress.yml и убедитесь, что gateway включен:

    gateway:
        enabled: true
    
  2. В конфигурационном файле /usr/local/etc/k8s/helmwave/store/dlp.yml установить в поле tourniquetEnabled значение true.

  3. Примените изменения командой:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t istio-ingress
    

    Примечание

    Если вы хотите получать IP-адрес клиентского приложения, сделавшего запрос в DLP-систему:

    1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/projects/istio/values/istio-ingress.yml.
    2. В секцию tourniquet вставьте параметр dlp_ip_source_header. Укажите для него заголовок, который будет использоваться для извлечения IP-адреса клиента, сделавшего запрос.

      tourniquet:
        defined: [[.Release.Store.dlp.tourniquetEnabled]]
        plugin_config: &tourniquet_plugin_config
          dlp_vahter_addr: "vahter.vkteams.svc.cluster.local:44448"
          # добавьте параметр сюда
          dlp_ip_source_header: "x-forwarded-for" 
      
    3. Примените изменения:

      HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t istio-ingress
      
  4. Проверьте, что плагин запустился:

    kubectl -n istio-ingress get po | grep istio-ingress
    
    В выводе консоли pod должен находиться в статусе Running.
  5. Проверьте логи сервиса на возможные проблемы:

    sudo kubectl logs -n istio-ingress $(sudo kubectl get pod -n istio-ingress | grep istio-ingress | awk '{print $1}')
    
    Искать необходимо по названию модуля Tourniquet. Пример проблем в логах:

    2024-11-21T13:52:28.946719Z error   envoy golang external/envoy/contrib/golang/common/log/cgo.cc:24 failed to parse golang plugin config: dlp_resp_blocked_code: expect float64 while got string    thread=14
    2024-11-21T13:52:28.946961Z warning envoy config external/envoy/source/extensions/config_subscription/grpc/delta_subscription_state.cc:269  delta config for type.googleapis.com/envoy.config.listener.v3.Listener rejected: Error adding/updating listener(s) 0.0.0.0_80: golang filter failed to parse plugin config: tourniquet /var/lib/im/modules/tourniquet.so
    
    Подобная запись в логах говорит о проблемах в конфигурации — необходимо перепроверить конфигурацию или вернуть конфиг к значению по умолчанию.

Шаг 6. Активируйте сервис Watchman

  1. В конфигурационном файле /usr/local/etc/k8s/helmwave/store/dlp.yml установите в поле watchmanEnabled значение true.

  2. Примените изменения командой:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t istio-ingress
    
  3. Проверьте, что сервис запустился:

    kubectl -n istio-ingress get po | grep istio-ingress
    
    В выводе консоли pod должен находиться в статусе Running.
  4. Проверьте логи сервиса на возможные проблемы:

    sudo kubectl logs -n istio-ingress $(sudo kubectl get pod -n istio-ingress | grep istio-ingress | awk '{print $1}')
    
    Искать необходимо по названию модуля Watchman. Пример проблем в логах:

    2024-11-21T13:52:28.946719Z error   envoy golang external/envoy/contrib/golang/common/log/cgo.cc:24 failed to parse golang plugin config: ...
    2024-11-21T13:52:28.946961Z warning envoy config external/envoy/source/extensions/config_subscription/grpc/delta_subscription_state.cc:269  delta config for type.googleapis.com/envoy.config.listener.v3.Listener rejected: Error adding/updating listener(s) 0.0.0.0_80: golang filter failed to parse plugin config: watchman /var/lib/im/modules/watchman.so
    
    Подобная запись в логах говорит о проблемах в конфигурации — необходимо перепроверить конфигурацию или вернуть конфиг к значению по умолчанию.

Шаг 7. Настройте правила доступа к файлам

Модуль Watchman рассматривает запросы на получение доступа к содержимому файла (просмотр и скачивание ) и проставляет к пользовательскому запросу уровень доступа на основе конфигурируемых правил. На данный момент есть два уровня доступа: External или Internal.

Уровень доступа для пользователя определяется по IP-адресу и устройству, с которого был отправлен запрос на доступ к файлу.

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

Правила настраиваются в конфигурационном файле /usr/local/etc/k8s/helmwave/store/dlp.yml в секции watchmanAccessLevels. Пример конфигурации с правилами:

tourniquetEnabled: true
watchmanEnabled: true
watchmanAccessLevels:
  - access_level: internal
    subnets:
      - 192.168.0.1/24
    Device: []
    OS:
      - IOS
    Browser: []
  - access_level: internal
    subnets: []
    Device: []
    OS: []
    Browser:
      - Opera

Каждое правило (access_level) состоит из секций селекторов:

  • subnets.
  • Device.
  • OS.
  • Browser.

Если секция отсутствует или пуста, проверка на соответствующий признак не будет осуществляться в рамках правила (пример: пустая секция subnets в правиле означает, что под правило попадает любой IP-адрес).

Данные пользователя проверяются на соответствие перечисленным правилам последовательно сверху вниз до первого подошедшего правила. Когда данные пользователя совпадают с данными из селекторов, запросу пользователя присваивается уровень доступа к файлу - External или Internal.

Чтобы настроить правила для определения уровня доступа к файлам:

  1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/store/dlp.yml и укажите правила в секции watchmanAccessLevels.

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

    Значения в секциях селекторов не чувствительны к регистру. Возможные значения селекторов:

    Device:

    • mobilе.
    • desktop.
    • web.

    Browser (настраивается для веб-приложений):

    • chrome.
    • firefox.
    • opera.
    • ie.
    • safari.
    • edge.

    OS (настраивается для веб-приложений):

    • android.
    • windows.
    • macos.
    • ios.
    • linux.

    Для декстоп-устройств не поддерживается определение операционных систем.

    Для мобильных устройств поддерживается определение iOS и Android.

  2. Примените изменения командой:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t istio-ingress -t apigw
    

Примечание

Если вы используете правила Watchman для определения уровня доступа, вы можете изменить HTTP-заголовок, который используется для получения IP-адреса клиентского приложения, сделавшего запрос в DLP-систему:

  1. Перейдите в конфигурационный файл /usr/local/etc/k8s/helmwave/projects/istio/values/istio-ingress.yml и в секции watchman добавьте следующие поля:

    dlp_ip_source_header: "x-forwarded-for" # заголовок, который будет использоваться для извлечения IP-адреса клиента, сделавшего запрос
    default_access_level: "external"  # уровень доступа к файлу, который устанавливается по умолчанию (если ни одно из правил не подошло)    
    
    Пример конфигурационного файла:
    plugins:
      # ...
      watchman:
          defined: {{.Release.Store.watchmanEnabled}}
          plugin_config: &watchman_plugin_config
              dlp_access_levels_enable: true          # deprecated
              dlp_access_levels_path_suffixes: []     # deprecated
              dlp_ip_source_header: "x-forwarded-for" 
              default_access_level: "external"        
              access_levels:
      {{.Release.Store.watchmanAccessLevels | toYaml | indent 8}}
            routes:
              watchman:
                  plugin_config: *watchman_plugin_config
    

    Все значения кроме default_access_level являются техническими, изменять их не рекомендуется.

  2. Примените изменения командой:

HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t istio-ingress -t apigw

Шаг 8. Настройте сервис Go-files

Перейдите в конфигурационный файл сервиса Go-files /usr/local/go.files.icq.com/files.icq.com.config.yaml и укажите настройки отправки файлов в DLP-систему:

  1. В секции DLPv2 укажите настройки для проверки файлов:

    DLPv2:
        dlp_checks_timeout: 20m
        dlp_access_levels_checks_enable: false 
        dlp_checks_enable: true 
        dlp_status_on_timeout: "Outdated" 
        dlp_access_level_on_timeout: "External" 
    
    где:
    • dlp_checks_timeout — таймаут, при достижении которого статус проверки файла переходит в «Outdated» или «Ok», если DLP-система не вернула результат проверки.

    • dlp_access_levels_checks_enable — если true, будет проверяться уровень доступа к файлу с устройства пользователя.

    • dlp_checks_enable — если false, отключается отправка файла на проверку в сервис Vahter и отключается проверка уровня доступа пользователя к файлу.

    • dlp_status_on_timeout — статус, выставляемый при достижении таймаута dlp_checks_timeout, если DLP-система не вернула результат проверки файла.

      Доступные значения: «Outdated», «Ok».

    • dlp_access_level_on_timeout — уровень доступа, выставляемый при достижении таймаута dlp_checks_timeout, если DLP-система не вернула результат проверки файла. Доступные значения: Internal, External.

  2. В секции multifora укажите конфигурация взаимодействия с модулем Multifora:

    multifora:
        host: "multifora.vkteams.svc.cluster.local:44447"
        http_timeout: 10s 
        max_retry: 3 
        max_timeout: 35s 
    
    где:
    • host — оставьте этот параметр без изменений.
    • http_timeout — таймаут единичных запросов в модуль Multifora.
    • max_retry — число ретраев, выполняемых с экспоненциально нарастающей задержкой.
    • max_timeout — время, выделяемое на всю серию ретраев.

    Внимание

    В конфигурационном файле сервиса Go-files /usr/local/go.files.icq.com/files.icq.com.config.yaml есть секция DLP для интеграции VK Teams с другими DLP-системами. Интеграция с Solar Dozor не конфигурируется через эту секцию. Совместная работа нескольких DLP-систем не поддерживается.

  3. В секции mysql_cluster_optimize включите миграцию статусов проверки файлов:

    mysql_cluster_optimize:
        login_admin_env_key: FILES_ADMIN_LOGIN       
        password_admin_env_key: FILES_ADMIN_PASSWORD 
        migrations_enabled: true 
        migrations_path: file:////usr/local/go.files.icq.com/migrations
    

    где migrations_enabled — если true, миграция статусов проверки файлов включена.

  4. Перезапустите сервис Go-files командой:

    sudo systemctl restart gofiles_httpd
    

Решение проблем

«Грязная» база в сервисе Go-files

Ошибка: Dirty database version 1. Fix and force version

  1. По логам сервиса Go-files определите шард (базу), которая стала «грязной» в результате миграций. Например, такое может происходить в случае, когда неправильно написан запрос в файле миграций.

  2. Укажите верные настройки миграции в конфигурационном файле сервиса Go-files /usr/local/go.files.icq.com/files.icq.com.config.yaml.

  3. Удалите таблицу schema_migrations из шарда.

  4. Перезапустить сервис Go-files командой:

    systemctl restart gofiles_httpd
    

Бесконечные ретраи метода отправки сообщений sendIM

Проблема: Статус-код 500 при ответе на sendIM на устройствах iOS и Android вызывает ретрай. Запрос повторяется до момента, пока сервер не вернет статус-код, отличный от 500. Таким образом сервис Vahter может стать недоступным.

Данная проблема может быть связана с недоступностью DLP-системы.

Чтобы решить эту проблему, в конфигурационном файле /usr/local/etc/k8s/helmwave/store/dlp.yml.

  1. Укажите для параметра strategy_on_fail значение true. Тогда результат проверки будет положительным при недоступности или ошибке запроса в DLP-систему.

  2. Укажите для параметра debug_mode значение true. Результат проверки будет положительным без ожидания ответа на запрос в DLP-системы.

  3. Примените изменения командой:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t vahter
    

Примечание

Установить параметры можно также через etcd при помощи команд:

etcdctl --endpoints=etcd.im-etcd.svc.cluster.local:2379 put /vars/services/vahter/production/private/service/dlp/solar_dozor/ strategy_on_fail true
etcdctl --endpoints=etcd.im-etcd.svc.cluster.local:2379 put /vars/services/vahter/production/private/service/dlp/solar_dozor/debug_mode true

и применить изменения командой:

HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t vahter

Таймауты при проверке текста/файлов

При неправильно конфигурации сервиса Vahter запрос в DLP-систему обрывается по таймауту.

Причины:

  1. Низкие значения параметров в конфигурационном файле /usr/local/etc/k8s/helmwave/store/dlp.yml:

    • check_text_disconnect_timeout.
    • check_file_disconnect_timeout.
    • icap_client_timeout — сервис не успел установить соединение с DLP-системой по ICAP.
  2. Низкие значения параметра max_timeout в конфигурационном файле сервиса Go-files /usr/local/go.files.icq.com/files.icq.com.config.yaml — не успел сформироваться id файла в облаке.

Решение:

  1. Увеличьте таймауты.

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

  2. Примените изменения командой:

    HELMWAVE_USE_LOCAL_REPO_CACHE=true hwup -t vahter
    

Файлы недоступны для проверки/недоступно файловое хранилище

Получение файлов осуществляется через сервис Go-files, используется механизм ретраев.

Если файлы недоступны для проверки или недоступно файловое хранилище, вы можете изменить настройки взаимодействия сервисов Go-files и Multifora в конфигурационном файле /usr/local/etc/k8s/helmwave/projects/vahter/values/vahter.yml:

files:
  host: "{{ .Release.Store.filesComHost }}" #хост Go-files
  timeout: 5m                               #таймаут подключения
  retries:                                  #ретраи при получении файла
    max_retry: 5                            #количество ретраев
    max_timeout: 9m                         #временной промежуток, в который выполняются ретраи

multifora:
  address: multifora.vkteams.svc.cluster.local:44438 #хост Multifora, не изменяйте этот параметр
  timeout: 3s                                        #таймаут подключения