Защита приложений в Docker-контейнерах

Защита приложений в Docker-контейнерах



Защита приложений в Docker-контейнерах

Лицензирование Sentinel LDK поддерживает несколько вариантов развертывания приложений, работающих в Docker-средах. В зависимости от того, используются ли программные ключи (SL) или аппаратные ключи (HL), среда выполнения (RTE) и хранилище лицензий могут располагаться на хост-машине, в контейнере или и там, и там.

ПРИМЕЧАНИЕ. Установка RTE необходима для поддержки лицензий с параллельным доступом или для устаревших лицензионных ключей (legacy).
Кажущаяся сложность на самом деле является гибким решением, так как позволяет:
  1. Запускать защищенные приложения внутри контейнеров;
  2. Выбрать место размещения менеджера лицензий и защищенного хранилища;
  3. Адаптироваться к операционным потребностям, таким как временные контейнеры, постоянные тома или проброс USB.
  4. Обеспечивать соответствие нормативным требованиям, сохраняя при этом производительность и надежность в контейнеризированных развёртываниях.
Лицензию для защищаемого приложения, работающего в контейнере Docker, можно развернуть, используя либо ключи HL, либо ключи SL. Способы представлены ниже:

ПРИМЕЧАНИЕ:
  1. Этот раздел относится к контейнерам Docker как под Linux, так и под Windows, если по тексту не указано иное.
  2. Этот раздел относится к приложениям, защищенным и лицензированным с использованием Sentinel LDK версии 7.10 или более поздней.
  3. Не используйте схему защиты от клонирования FQDN в Docker-контейнерах, если менеджер лицензий работает внутри контейнера без фиксированного имени хоста. По умолчанию Docker назначает контейнерам случайные имена хостов, что может привести к аннулированию слепка машины.

Использование SL-ключей

Sentinel LDK поддерживает использование программных ключей (далее по тексту - SL) для защиты приложений, работающих в контейнере Docker. Среда выполнения может быть установлена как ​​на хост-машине, так и внутри контейнера Docker.
Среду выполнения и ключ SL для защищаемого приложения, работающего в контейнере Docker, можно настроить с помощью одного из описанных ниже вариантов.

Вариант 1 — Лицензия с параллельным доступом вне контейнера

Тип ключа: Ключ SL AdminMode (включает облачное лицензирование)
Расположение среды выполнения: Главный компьютер или удаленный компьютер
Местонахождение ключа SL: Главный компьютер или удаленный компьютер
Ключи RTE и SL устанавливаются вне контейнера Docker. Этот вариант не имеет никаких ограничений и RTE работает как обычно. Защищаемое приложение, работающее в Docker-контейнере, получает доступ к лицензии по сети.
Эта опция поддерживает Linux-контейнеры на Linux- или Windows-хостах, а также Windows-контейнеры на Windows-хостах.
Этот вариант основан на сетевом подключении, что исключает зависимость от операционной системы хоста. Он отличается от локальной установки ключа SL, для которой Sentinel LDK требует управления локальным защищенным хранилищем. Пока приложение работает под управлением операционной системы, которую Sentinel LDK поддерживает для использования сетевых лицензий, среда хоста (в случае виртуальной машины или виртуализированного контейнера) не имеет значения.
Если хост-машина является физической машиной, вы можете предотвратить установку ключей SL AdminMode в контейнере, отключив поддержку виртуальных машин при создании ключей.
Мы рекомендуем использовать Вариант 1 в следующих случаях:
  1. Сервер в локальной сети (ключ SL с поддержкой параллельного доступа).
  2. Сервер в облаке (ключ CL) с лицензией, настроенной с параметром "Подсчет каждой рабочей станции", определяющим, что следует считать одновременно работающим экземпляром.

Вариант 2 — Внутри контейнера (только для SL-ключей)

Тип ключа: SL AdminMode key, SL UserMode Key
Расположение среды выполнения: Внутри контейнера (версия RTE должна быть 7.100 или более поздняя)
Местонахождение ключа SL: Внутри контейнера
На хосте ничего устанавливать не нужно. Этот вариант предназначен в первую очередь для бессрочных лицензий. Поведение лицензии зависит от способа запуска контейнера. Обратите внимание на следующие нюансы:
  1. Если перезапустить контейнер с помощью команды “docker restart”, защищенное хранилище сохранится, и лицензия продолжит работать должным образом.
  2. Если запустить контейнер с помощью команды “docker run” (которая создает новый контейнер), будет создано новое защищенное хранилище. В этом случае:
    * Ранее установленная лицензия с оплатой по факту использования не применяется и возвращает ошибку 78 (SECURE_STORAGE_ID_MISMATCH). 
    * Бессрочные лицензии (V2C) можно применить повторно, но Feature 0 будет отключена из-за несоответствия идентификаторов хранилища. Не используйте Feature 0 для приложений, защищенных с помощью API или Envelope, если вы планируете запускать их в контейнерах Docker с помощью команды “docker run”.
При выборе этого варианта мы рекомендуем устанавливать лицензию каждый раз при создании контейнера. Это можно сделать, просто поместив файл V2C в соответствующий каталог.
Не следует сохранять образ Docker (image) после создания защищенного хранилища. Если Docker-образ будет сохранён, защищенное хранилище будет рассматриваться как «восстановленное вручную» при запуске контейнера и будет полностью воссоздано автоматически.
Лицензия на основе потребления
Feature считается доступной по принципу потребления, если:
  1. Это пробная лицензия, если только она специально не настроена на пропуск проверки SSID;
  2. Это лицензия с подсчётом количества запусков ПО;
  3. Это лицензия с ограниченным сроком действия или временной лицензией для платформ, отличных от Android.
  4. Это detachable-лицензия.
  5. Это содержится в лицензионном ключе, который уже основан на потреблении (включена функция рехоста или проверка SSID включена для всех).
  6. В ней включена поддержка параллельного доступа для предотвращения злоупотреблений в средах Docker или Kubernetes с идентичными слепками.

Вариант 3 — Хранение лицензии вне контейнера

Тип ключа: SL AdminMode key (включая облачные лицензии), SL UserMode Key
Расположение среды выполнения: Внутри контейнера (версия RTE должна быть 7.100 или более поздняя)
Местонахождение ключа SL: Хост-машина или удаленный компьютер
Подготовка:
а. Установите RTE внутри Docker-контейнера (применимо для ключа SL AdminMode).
ПРИМЕЧАНИЕ. Если вы ранее устанавливали RTE на хост-машине, удалите RTE с хост-машины и установите его внутри контейнера Docker.
б. Для установки и активации ключа SL используйте менеджер лицензий в RTE.
Использование лицензий:
Приложение должно использовать лицензию, полученную с помощью ключа SL, используя менеджер лицензий из RTE, установленного внутри контейнера Docker.
Дополнительные советы относительно смешанного решения:
- Вы устанавливаете RTE внутри контейнера, но настраиваете Docker таким образом, чтобы каталоги хранения лицензий оставались на хосте, что позволяет устанавливать лицензии любого типа.

ПРИМЕЧАНИЕ. Служба управления лицензиями не может работать одновременно внутри контейнера и на хосте. При использовании этого параметра убедитесь, что служба управления лицензиями выполняется только внутри контейнера.
- Хост-машина или удаленная машина (сервис) может предоставлять смонтированный постоянный том в качестве хранилища SL. В облачной среде постоянный том — это ресурс, поддерживаемый постоянным диском или службой томов.
- Вы можете настроить Docker так, чтобы каталоги хранения лицензий оставались на хосте, используя опцию Docker -v. Например: Следующая команда запускает контейнер "ubuntu", сохраняя каталоги /var/hasplm и /etc/hasplm на хосте.
$ sudo docker run -it -v /var/hasplm:/var/hasplm -v /etc/hasplm:/etc/hasplm -p 1947:1947 Ubuntu
Затем вы можете установить RTE внутри контейнера. (Если каталоги хранения лицензий уже существуют и содержат лицензии, вы сможете получить доступ к этим лицензиям изнутри контейнера).

Использование HL-ключей

Sentinel LDK поддерживает использование ключей HL для защищенных приложений, работающих в контейнере Docker.
При установке среды выполнения Sentinel LDK (RTE) для использования с ключами HL, RTE можно установить либо на хост-машине, либо внутри контейнера Docker.

Вариант 1 — Лицензия с параллельным доступом вне контейнера

Расположение среды выполнения: Хост-машина
Доступ по ключу HL: Ключ HL, доступный с хост-машины.
Защищенное приложение, работающее в контейнере Docker, получает доступ к лицензии на ключе HL по сети. Поддерживаются только лицензии с параллельным доступом.
Мы рекомендуем использовать этот вариант, если лицензия поддерживает удаленный доступ. Доступ к ключу HL следует осуществлять через RTE, а не напрямую из Docker-контейнера.

Вариант 2 — доступ к HL через расшаривание USB-порта.

Расположение среды выполнения: Внутри контейнера (версия RTE должна быть 7.100 или более поздняя)
Доступ по ключу HL: Доступ к ключу HL осуществляется изнутри контейнера.
Это включает в себя сценарий, в котором API лицензирования обращается к ключам HL напрямую, без необходимости использования RTE.
После установки RTE внутри контейнера Docker необходимо настроить хост для совместного использования всех USB-устройств с контейнером. Это можно сделать, выполнив следующую команду на хост-машине:
$ sudo docker run -it --device /dev/bus/usb:/dev/bus/usb ubuntu
Также можно поделиться только определенным ключом HL, указав путь к нему, но для этого необходимо реализовать некоторую логику для определения этого пути. Например:
$ sudo docker run -it --device /dev/bus/usb/003/008:/dev/bus/usb/003/008 ubuntu

Дополнительные соображения

  1. Распространение образов и активация лицензий. Распространяйте образы Docker до установки каких-либо лицензий. Активируйте лицензию после того, как пользователь выберет хост для использования. Если вы распространите контейнер на другие хосты, лицензия станет недействительной и будет считаться клоном.
  2. Настройка менеджера лицензий. Когда менеджер лицензий работает внутри контейнера, необходимо настроить INI-файл менеджера лицензий для установления связи с защищаемым приложением и указания правильных путей. Дополнительную информацию см. в разделе «Работа непосредственно с файлами конфигурации менеджера лицензий».

Сравнительный анализ “лицом к лицу”

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

Программная защита:

Вариант 1: Лицензирование с параллельным доступом вне контейнера.

Описание: CL-ключ с возможностью параллельного доступа на удаленной машине или хосте Docker; поддерживает облачное лицензирование, если хост/контейнер находится в облаке.

Вариант 2: Внутри контейнера (только для SL-ключей)

Описание: Ключ SL и RTE находятся внутри контейнера.
Примечания:
  1. После перезапуска контейнера лицензии остаются работоспособными. В новом контейнере лицензии, основанные на потреблении, перестают работать, в то время как бессрочные лицензии применяются, но с отключенной функцией с идентификатором 0.
  2. Лицензии с функциями отсоединения, переноса или параллельного доступа блокируются во время генерации лицензии. Используйте вариант 1 или 3 для лицензий, включающих параллельный доступ.

Вариант 3: Лицензирование хранилища вне контейнера.

Описание: Ключ SL (каталоги хранения лицензий) находится на хост-машине или удаленной машине и предоставляется контейнеру. RTE находится внутри контейнера.
Ключи SL (не поддерживающие облачные технологии) подходят, если хост/контейнер находится в локальной сети.

Аппаратная защита:

Вариант 1: Лицензирование хранилища вне контейнера.

Описание: HL-ключ с параллельным доступом на удаленной машине или хосте Docker.

Вариант 2: Доступ к HL через совместное проброс USB.

Описание: Ключ HL (без параллельного доступа) подключен к хосту и используется совместно с контейнером.