# AD/LDAP/ALD Pro

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

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

<p class="callout warning">При интеграции с AD/ADFS важно иметь единое время на системах, настоятельно рекомендуется настроить NTP  
</p>

<div class="align-center" id="bkmrk-"><iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="allowfullscreen" frameborder="0" height="315" src="https://www.youtube.com/embed/1Rw6qOWF7jc?si=vOId0Aj4wFH-Vr47" title="YouTube video player" width="560"></iframe>

</div><div id="bkmrk--1"></div><div id="bkmrk-%C2%A0"> </div><div id="bkmrk-%D0%90%D1%83%D1%82%D0%B5%D0%BD%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F-%D1%80%D0%B0%D0%B1%D0%BE%D1%82">Аутентификация работает только для одного домена. Поэтому все группы должны быть созданы в корневом домене.</div><div id="bkmrk--2"></div><div id="bkmrk-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%B8%D0%BD%D1%84%D1%80%D0%B0%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80">Пример инфраструктуры AD:</div><div id="bkmrk-%D0%BA%D0%BE%D1%80%D0%BD%D0%B5%D0%B2%D0%BE%D0%B9-%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD-%D0%BB%D0%B5%D1%81%D0%B0-">- корневой домен леса - example.com
- контроллер домена - dc-01.example.com
- дочерний домен - subdomain.example.com

</div>В дочернем домене созданы:

<div id="bkmrk-ou-%C2%ABkuma-subdomain%C2%BB-">- OU «KUMA subdomain»
- Universal группы безопасности: «kuma\_subdomain\_analyst», «kuma\_subdomain\_admin», «kuma\_subdomain\_operators»
- Пользователи: subdom\_admin, subdom\_analyst

</div>[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/bpuimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/bpuimage.png)

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

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/9Dkimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/9Dkimage.png)

### Настройки KUMA   


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

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

Важно:

- Все группы доступа должны быть UNIVERSAL
- У пользователей в AD должно быть заполнен атрибут **email**

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/lLwimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/lLwimage.png)

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

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/eIEimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/eIEimage.png)

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

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

- Предоставление доступа происходит по принципу «**наименьших прав**». Если учетка пользователя одновременно состоит нескольких в группах одного тенанта.
- Например: kuma-analysts и kuma-admins, то пользователь получит права аналитика. Поэтому, при переводе работников из операторов в аналитики или аналитиков в админы, необходимо не только добавить пользователя в соответствующую новую группы, но еще и удалить из старой группы.

### Результат  


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

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

- Залогинившись под доменной учеткой [subdom\_analyst@subdomain.example.com](mailto:subdom_analyst@subdomain.example.com)
- Получаем права роли analyst в тенанте Main

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/N4Kimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/N4Kimage.png)

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

![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/5qZimage.png)

<p class="callout info">Права API можно выдавать только для внутренних пользователей, не из AD</p>

### Порты AD

<div id="bkmrk-%D0%9F%D0%BE%D1%80%D1%82-3268.-%D0%AD%D1%82%D0%BE%D1%82-%D0%BF%D0%BE%D1%80%D1%82">- Порт **3268**. Этот порт используется для запросов, специально предназначенных для глобального каталога. Запросы LDAP, отправленные на порт 3268, можно использовать для поиска объектов во всем лесу. Однако могут быть возвращены только атрибуты, помеченные для репликации в глобальный каталог. Например, отдел пользователя не может быть возвращен через порт 3268, так как этот атрибут не реплицируется в глобальный каталог.
- Порт **389**. Этот порт используется для запроса информации с локального контроллера домена. Запросы LDAP, отправленные на порт 389, можно использовать для поиска объектов только в домашнем домене глобального каталога. Однако запрашивающее приложение может получить все атрибуты этих объектов. Например, запрос на порт 389 может быть использован для получения отдела пользователя.
- При интеграции с SSL необходимо использовать сертификат Active Directory. В KUMA поддерживаются открытые ключи сертификата X.509 в Base64. Стандартный порт LDAPS - **636**.

</div>### Полезные команды

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/scaled-1680-/SH3image.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-09/SH3image.png)

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

<p class="callout danger">Интеграция является не официальной</p>

<p class="callout info">Документация по службе каталогов для Linux Astra ALD Pro: [https://astra.ru/software-services/application-software-astra-group/ald-pro/#docs](https://astra.ru/software-services/application-software-astra-group/ald-pro/#docs) </p>

<p class="callout info">Настройки выполняются по налогии со статьей: [https://kb.kuma-community.ru/books/integracii/page/integraciia-kuma-s-active-directory-ad](https://kb.kuma-community.ru/books/integracii/page/integraciia-kuma-s-active-directory-ad) </p>

<p class="callout warning">При интеграции с ALD Pro важно иметь единое время на системах, настоятельно рекомендуется настроить NTP  
</p>

<div id="bkmrk--1"></div>Выберите тип интеграции FreeIPA и группы для учетных записей заводите в таком виде:

```bash
uid=is.ldap.usr,cn=users,cn=accounts,dc=company,dc=com 
```

<div id="bkmrk-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9-%D0%B8">Пример настроенной интеграции:</div><div id="bkmrk-"></div>![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2025-01/scaled-1680-/sDGimage.png)

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

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

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

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

<p class="callout info">Предварительно нужно выполнить настройку обогащение по этой статье [https://kb.kuma-community.ru/books/integracii/page/ldap-obogashhenie](https://kb.kuma-community.ru/books/integracii/page/ldap-obogashhenie)</p>

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

#### Шаг 1.

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

[![image.png](https://kb.kuma-community.ru/uploads/images/gallery/2023-11/scaled-1680-/PBAimage.png)](https://kb.kuma-community.ru/uploads/images/gallery/2023-11/PBAimage.png)

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

#### Шаг 2.

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

#### Шаг 3.   


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

```bash
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
```

- где **&lt;SIZE&gt;** - число записей в выводе, нужно ставить значение кол-во пользователей\*1.1  
     /opt/kaspersky/kuma/mongodb/bin/mongo localhost/kuma --quiet --eval "db.accounts.find({"archived":false},{"displayName":1, "sAMAccountName":1, "\_id":0}).count()" полученное число умножить на 1.1 Или сразу посчитать с помощью: perl -w -e "use POSIX; print ceil($(/opt/kaspersky/kuma/mongodb/bin/mongo localhost/kuma --quiet --eval "db.accounts.find({"archived":false},{"displayName":1, "sAMAccountName":1, "\_id":0}).count()")\*1.1), qq{\\n}"
- **&lt;KUMA\_IP&gt;** - ip-адрес ядра KUMA
- **&lt;DICTIONARY\_ID&gt;** - id словаря, можно скопировать из строки браузера, если зайти в словарь
- **&lt;TOKEN&gt;** - токен для доступа к API, скопированный на Шаге 2.

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

Более продвинутый заполненный запрос c автоподсчетом **&lt;SIZE&gt;**:

```bash
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

<p class="callout info">Воспользуйтесь скриптом из [https://github.com/KUMA-Community/KUMA-sqlite-to-table](https://github.com/KUMA-Community/KUMA-sqlite-to-table)</p>