Защита приложения в docker контейнере

Добрый день !
Имеется следующая архитектура:
1. выделенный сервер с USB ключом, с отчуждаемыми лицензиями
2. виртуальная машина (linux) с приложением в контейнерах

Пробовали вариант с засовыванием GCC в контейнер - не подошла архитектура ОС в контейнере, софт не запустился, но это и не подходящее решение.

При размещении GCC на хосте, приложение из контейнера не видит хостовый GCC с ошибкой UNABLE_SEND_REQUEST_TO_ADMIN_RUNTIME.

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

На хостовой машине поднят glds. Их документации непонятно, как наладить взаимодействие приложения с сервером лицензирования. В нашем случае лицензия должна указываться, и активироваться из приложения, которое находится в контейнере.
1. куда должно обращаться приложение, к хостовому glds ?
2. Какие компоненты должны интегрироваться в защищаемое приложение, для работы в режиме защиты по сети ?
3. нужно ли как-то отдельно регистрировать лицензию на хосте, в glds ?
4. как настраивается взаимодействие хостового glds с сервером лицензирования ?
5. Если на хосте развернут glds - GCC там нужен или нет ? если да - как они взаимодействуют между собой ?
6. Нужно ли нам использовать protection studio - или достаточно использовать поставляемые библиотеки, как в примерах ? Параметры подключения и лицензий хранятся в приложении

Может, приложите пример для работы с облачным кабинетом - у нас, по сути, та же схема. Приложение на .NET6/7

Re: Защита приложения в docker контейнере

Добрый день, pochtov.a,

Просьба уточнить, каким инструментом для защиты приложений вы пользуетесь, какой версии?
GCC - это многофункциональный сервис, который используется в технологии Guardant SLK.
GLDS - сетевой менеджер из технологии SDK, он не совместим с технологиями из состава Guardant Station

Re: Защита приложения в docker контейнере

мы только переходим на Guardant, поэтому тыкаемся, как котята :) Раньше пользовалиь LicenseSpring, поэтому тут пытаемся по аналогии поступать, но похоже, это работает не так.

Сейчас мы не используем инструмент, типа Protection Studio. Как мы поняли из документации, достаточно библиотек из комплекта поставки, libgrdlic.so и grdlic.dotnet.core.dll. Ранеемы не вносили какие-то специальные изменения в приложение - подключали библиотеку для лицензирования, и она, условно, периодически проверяла статус лицензии. Нам нужен такой же прозрачный алгоритм, но не можем найти в документации ничего, под нашу архитектуру, чтобы все работало в контейнерах, в сетевом режиме. Нужна работа через licensing API.

Сейчас собрали схему, описанную в первом посте - на хосте установлен GCC, в него передана лицензия. На этом же хосте развернут glds - чтобы к нему обращались контейнеры, для получения данных о лицензии. Я так понял схему работы, из того что прочитал. Аппаратный ключ для выпуска лицензий у нас находится на другом сервере - как я понял, к нему должен обращаться GCC с хоста, где развернуты контейнеры.

Если нам нужно именно решение с сетевыми лицензиями - опишите, пожалуйста, какого типа ключи нам нужно создавать (я так понимаю, программные), как их закрепить за хостом с glds - чтобы сервер glds проверял лицензии на сервере с аппаратным ключом. Или, если ключ программный, сервер с аппаратным ключом в этой схеме уже не нужен - он только для выпуска ключей ?
Возможно, есть какие-то практические кейсы по реализации решения в docker окружении ? Уже очень много времени потеряно на реализацию этого решения, но ответы не можем найти, уже почти месяц

Re: Защита приложения в docker контейнере

Добрый день,

Если вы используете Guardant SLK, вам не нужно устанавливать GLDS - эти инструменты не совместимы между собой.
Для сетевых ключей можно использовать несколько вариантов настройки - первый способ, когда установка Guardant Control Center происходит на host-системе, а сетевые лицензии потом пробрасываются в Docker-контейнеры с защищенным ПО. Этот вариант подходит, если нужно использовать аппаратные привязки.
Либо, можно ключ с сетевыми лицензиями активировать внутри контейнера, там же развернуть GCC. Сетевые лицензии из такого контейнера транслируются по сети в другие контейнеры, аналогично первому способу. Этот вариант подходит только, если используются нежёсткие типы привязок (например, IP/FQDN).
Можно использовать, как программные, так и аппаратные ключи

Re: Защита приложения в docker контейнере

Давайте остановимся на варианте, что мы развернули на хосте GCC, установили в него лицензию. Как нам, используя API в приложении внутри контейнера, получить информацию об установленных лицензиях ? когда когда мы выполняем метод GrdGetLicenseInfo, то приложение(в контейнере), которое выполняет эту функцию, просто падает.

Re: Защита приложения в docker контейнере

Добрый день,

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

Re: Защита приложения в docker контейнере

Александра Старчаус, как мы можем передать данные для подключения ? Пришлем ссылку на конференцию

Re: Защита приложения в docker контейнере

pochtov.a пишет:

Александра Старчаус, как мы можем передать данные для подключения ? Пришлем ссылку на конференцию

Можно отправить на нашу почту технической поддержки Hotline@guardant.ru