AD/LDAP/ALD Pro

Интеграции с различными службами каталогов

Интеграция KUMA с Active Directory (AD)

При интеграции с AD/ADFS важно иметь единое время на системах, настоятельно рекомендуется настроить NTP

 
Аутентификация работает только для одного домена. Поэтому  все группы должны быть созданы в корневом домене.
Пример инфраструктуры AD:

В дочернем домене созданы:

image.png

Пользователи являются членами соответствующих групп: 

image.png

Настройки KUMA 

Base DN – корневой домен (не обязательно весь корневой домен, зависит от вашего AD)

URL – контроллеры корневого домена, порт глобального каталога (обязательно)

Важно:

image.png

Далее – для каждого тенанта указываете DistinguishedName групп, соответствующих правам доступа.

image.png

Информация по ролям и их возможностям: https://support.kaspersky.com/help/KUMA/2.1/ru-RU/218031.htm 

Важный момент:

Результат

Для доменной аутентификации, как таковой учетки в KUMA не требуется. Когда все настроено, вводится доменный логин и пароль и в этот момент KUMA биндится к LDAP.

При аутентификации, пользователь вводит в консоль свою доменную учетку в формате UPN (user@example.com) и, на основании членства этой учетки в той или иной группе, пользователю предоставляется доступ к разным тенантам с указанными правами.

image.png

Пример входа в KUMA с доменной учетной записью (kuma-admin@sales.lab):

image.png

Права API можно выдавать только для внутренних пользователей, не из AD

Порты AD

Полезные команды

image.png

Интеграция KUMA с ALD Pro и FreeIPA

Интеграция является не официальной

Документация по службе каталогов для Linux Astra ALD Pro: https://astra.ru/software-services/application-software-astra-group/ald-pro/#docs 

Настройки выполняются по налогии со статьей: https://kb.kuma-community.ru/books/integracii/page/integraciia-kuma-s-active-directory-ad 

При интеграции с ALD Pro важно иметь единое время на системах, настоятельно рекомендуется настроить NTP

Выберите тип интеграции FreeIPA и группы для учетных записей заводите в таком виде:

uid=is.ldap.usr,cn=users,cn=accounts,dc=company,dc=com 
Пример настроенной интеграции:

image.png

В итоге доменная аутентификация работает и пользователи появлялись с заданными правами.

Для успешной аутентификации необходимо соблюдать следующие условия при входе в систему пользователю следует указывать в логине домен заглавными буквами. Пример: user@FREEIPA.COM.

Также проверьте пожалуйста что у пользователя задана почта. Почта является обязательным параметром при создании учетной записи в KUMA.

Выгрузка LDAP информации в словарь KUMA

Предварительно нужно выполнить настройку обогащение по этой статье https://kb.kuma-community.ru/books/integracii/page/ldap-obogashhenie

Инструкция для KUMA до версий 4.0

Шаг 1.

Нам нужно выгрузить сопоставление, например login(sAMAccountName)-mail. Создаете словарь типа таблица (важно), ключ login, колонка mail. Добавляете одну запись любую, чтобы сохранить словарь можно было.

image.png

Если нужно выгрузить другое поле, посмотрите его название по примеру вывода одной записи из обогащения:
/opt/kaspersky/kuma/mongodb/bin/mongo localhost/kuma --quiet --eval "db.accounts.findOne({"archived":false})"

Шаг 2.

Выбираете пользователя в KUMA, даете ему права на запрос POST /dictionaries/update, генерируете токен и записываете себе куда-нибудь (например в блокнот).

Шаг 3. 

На коре выполняете скрипт (нужно поставить утилиту jq):

echo 'login,mail' > /tmp/accounts.csv; /opt/kaspersky/kuma/mongodb/bin/mongo localhost/kuma --eval 'DBQuery.shellBatchSize=<SIZE>; db.accounts.find({"archived":false},{"displayName":1, "sAMAccountName":1, "_id":0})' | grep -E '^{' | jq '.sAMAccountName,.displayName'| sed 'N;s/\n/,/' | sed 's/\"//g' >> /tmp/accounts.csv; curl -k --request POST 'https://<KUMA_IP>:7223/api/v1/dictionaries/update?dictionaryID=<DICTIONARY_ID>' --header 'Content-Type: multipart/form-data' --header 'Authorization: Bearer <TOKEN>' --form 'file=@"/tmp/accounts.csv"'; rm -rf /tmp/accounts.csv

После выполнения скрипта, в словарь запишутся логины и их электронная почта, импортированные из AD.

Более продвинутый заполненный запрос c автоподсчетом <SIZE>:

SIZE=$(perl -w -e "use POSIX; print ceil($(/opt/kaspersky/kuma/mongodb/bin/mongo localhost/kuma --quiet --eval "db.accounts.find({"archived":false},{"sAMAccountName":1, "mail":1, "_id":0}).count()")*1.1), qq{\n}"); echo 'login,mail' > /tmp/accounts.csv; /opt/kaspersky/kuma/mongodb/bin/mongo localhost/kuma --eval 'DBQuery.shellBatchSize='$SIZE'; db.accounts.find({"archived":false},{"sAMAccountName":1, "mail":1, "_id":0})' | grep -E '^{' | jq '.sAMAccountName,.mail'| sed 'N;s/\n/,/' | sed 's/\"//g' >> /tmp/accounts.csv; curl -k --request POST 'https://10.68.85.125:7223/api/v1/dictionaries/update?dictionaryID=72323930-c4fb-43c7-9360-5f8d5d929bbb' --header 'Content-Type: multipart/form-data' --header 'Authorization: Bearer 29ed4e42e25f7877c5ceb435736f860f' --form 'file=@"/tmp/accounts.csv"'; rm -rf /tmp/accounts.csv

Инструкция для KUMA от версии 4.0

Воспользуйтесь скриптом из https://github.com/KUMA-Community/KUMA-sqlite-to-table