Настройка авторизации
Обзор методов авторизации
ЗАКРОМА.Хранение поддерживает несколько методов авторизации пользователей:
- file - Базовая авторизация с локальными пользователями.
- ldap - Нативная LDAP авторизация без Keycloak.
- keycloak - Авторизация через Keycloak (с поддержкой LDAP).
- oidc - Авторизация через внешний OIDC-совместимый провайдер (список пользователей из LDAP).
Метод авторизации: file (Базовый)
Используется для простых развертываний или тестирования. Пользователи и их пароли задаются непосредственно в конфигурации.
Настройка в конфигурации установки:
Блок auth находится в переменной zakroma_storage_gateway файла inventories/<тип_инсталляции>/group_vars/zakroma-storage.yml.
1auth: 2 # Провайдер аутентификации. Один из (keycloak, ldap, file, oidc) 3 auth_provider: file 4 # Провайдер пользователей. Один из (keycloak, ldap, file). Пусто — совпадает с auth_provider 5 user_provider: "file" 6 7 # Настройка локальных пользователей (если auth_provider: "file") 8 users: 9 - name: zakromaadmin 10 password: zakromaadmin 11 groups: 12 - clouduser 13 - name: user1 14 password: password1 15 groups: 16 - group1 17 - name: user2 18 password: password2 19 groups: 20 - group2
Особенности:
- Простота настройки и управления
- Подходит для небольших развертываний
- Пароли хранятся в конфигурации (рекомендуется использовать хеширование)
- Пользователи назначаются в группы для управления доступом
Метод авторизации: ldap (Нативный LDAP)
Используется для прямой интеграции с LDAP-каталогом без промежуточного Keycloak. Подходит для организаций, которые хотят использовать существующую LDAP-инфраструктуру напрямую.
Настройка в конфигурации установки:
Блок auth находится в переменной zakroma_storage_gateway файла inventories/<тип_инсталляции>/group_vars/zakroma-storage.yml.
1auth: 2 # Провайдер аутентификации. Один из (keycloak, ldap, file, oidc) 3 auth_provider: ldap 4 # Провайдер пользователей. Один из (keycloak, ldap, file). Пусто — совпадает с auth_provider 5 user_provider: "ldap" 6 7 # Настройки LDAP 8 ldap: 9 # Группа в ldap, которая требуется у пользователя, чтобы он мог входить в систему zakroma 10 permission: 11 group: clouduser 12 # URL для подключения к LDAP серверу 13 url: "ldap://10.10.0.10:389" 14 # DN пользователя для подключения к LDAP серверу 15 bind_dn: "CN=Administrator,CN=Users,DC=zakroma,DC=internal" 16 # Пароль пользователя для подключения к LDAP серверу 17 bind_password: "SuperStrongPass1234!" 18 # Фильтр для поиска пользователей по LDAP классам 19 user_filter: "(objectClass=person)" 20 # Фильтр для поиска пользователей по вхождению в LDAP группы 21 group_filter: "(objectClass=group)" 22 # Атрибут для поиска группы 23 group_name_attribute: "cn" 24 # Путь в LDAP дереве, с которого начинать поиск групп 25 group_search_dn: "ou=groups,dc=zakroma,DC=internal" 26 # Атрибут имени пользователя 27 user_name_attribute: "sAMAccountName" 28 # Путь в LDAP дереве, с которого начинать поиск пользователей 29 user_search_dn: "CN=Users,DC=zakroma,DC=internal" 30 # Атрибут, отвечающий за имя пользователя 31 user_firstname_attribute: "givenName" 32 # Атрибут, отвечающий за фамилию пользователя 33 user_lastname_attribute: "sn" 34 # Атрибут, отвечающий за email пользователя 35 user_email_attribute: "mail" 36 # Атрибут, в котором хранится список членств пользователя 37 membership_attribute_name: "member" 38 # Тип атрибута, определяющего членство пользователя 39 membership_attribute_type: "dn" 40 # Атрибут, показывающий принадлежность пользователя к группе 41 memberof_attribute_name: "" 42 # Тип атрибута, который используется для проверки членства 43 memberof_attribute_type: "" 44 # Размер страницы для листинга пользователей 45 listing_page_size: 100
Особенности:
- Прямая интеграция с LDAP без промежуточных компонентов
- Поддержка Active Directory и OpenLDAP
- Гибкая настройка атрибутов и фильтров
- Подходит для корпоративных развертываний с существующей LDAP-инфраструктурой
Метод авторизации: OIDC
Используется для интеграции с внешним OIDC-провайдером. Список пользователей и групп берётся из LDAP.
Настройка в конфигурации установки:
Блок auth находится в переменной zakroma_storage_gateway файла inventories/<тип_инсталляции>/group_vars/zakroma-storage.yml. Блок ldap (провайдер пользователей) настраивается так же, как в методе ldap.
1auth: 2 # Провайдер аутентификации. Один из (keycloak, ldap, file, oidc) 3 auth_provider: oidc 4 # Провайдер пользователей. Один из (keycloak, ldap, file). Пусто — совпадает с auth_provider 5 user_provider: "ldap" 6 7 # Настройки OIDC 8 oidc: 9 # Название client в oidc 10 client_id: "zakroma" 11 # Значение secret у client в oidc 12 secret: "" 13 # Базовый url oidc провайдера 14 url: "https://" 15 # Адрес административной консоли UI 16 redirect_uri: "https://{{ zakroma_storage_gateway.path }}" 17 # Тип аутентификации: password или oidc_code 18 auth_type: "password"
Особенности:
- Аутентификация выполняется через внешний OIDC-провайдер
- Список пользователей синхронизируется из LDAP
- При
auth_type: oidc_codeпользователь перенаправляется на страницу входа провайдера
Метод авторизации: keycloak
Используется для интеграции с Keycloak, который может работать как с внутренними пользователями, так и с LDAP-каталогами. Keycloak предоставляет дополнительные возможности управления пользователями, ролями и группами.
Поддерживаются версии Keycloak от 19.0 до 26.6.0. С иными версиями могут встречаться проблемы с совместимостью, требующие настроек отличных от данной инструкции.
Настройка в конфигурации установки:
Блок auth находится в переменной zakroma_storage_gateway файла inventories/<тип_инсталляции>/group_vars/zakroma-storage.yml.
1auth: 2 # Провайдер аутентификации. Один из (keycloak, ldap, file, oidc) 3 auth_provider: keycloak 4 # Провайдер пользователей. Один из (keycloak, ldap, file). Пусто — совпадает с auth_provider 5 user_provider: "keycloak" 6 7 # Настройки Keycloak 8 keycloak: 9 # Стратегия синхронизации пользователей из Keycloak (roles, groups) 10 sync_strategy: roles 11 # Настройки permission 12 permission: 13 # Роль keycloak, которая требуется у пользователя, чтобы он мог входить в систему zakroma, если sync_strategy = roles 14 role: clouduser 15 # Группы в keycloak, которые будут использоваться для импорта пользователей в Закрома, если sync_strategy = groups 16 group: zakromausers 17 # URL для подключения к Keycloak 18 connection_url: "https://keycloak.{{ zakroma_storage_base_domain }}:8443" 19 # Название realm в keycloak 20 realm: master 21 # Значение secret у client в keycloak 22 secret: "<clientSecret из Keycloak>" 23 # Название client в keycloak 24 client_id: zakroma 25 # Адрес административной консоли UI 26 redirect_uri: "" 27 # Размер страницы для листинга пользователей 28 listing_page_size: 100
Варианты настройки Keycloak:
- LDAP с ролями - синхронизация групп LDAP с ролями Keycloak
- Внутренние пользователи - управление пользователями внутри Keycloak
- LDAP с группами - прямая синхронизация групп LDAP без создания ролей
Настройка на версии keycloak >= 19.X.X
-
Заходим консоль администрирования keycloak. Выбираем существующий или создаём новый realm.
-
Необходимо создать нового клиента. Переходим в Clients, в открывшимся окне нажимаем create и создаем нового Client ID с именем zakroma В новом окне настройки меняем: -
Client authentication: On-Authorization: On-Direct Access GrantsДля Keycloak 26.1 и выше -
Настраиваем сервисный аккаунт Clients -> Zakroma -> Service Account Roles. Нажать
Assign role-> Выбратьadmin->Assign -
Настраиваем маппинг для пользователей Clients -> Zakroma -> Сlient Scopes -> zakroma-dedicated . Add mapper -> By configuraton -> User Attribute. -
Mapper Type: User Attribute-Name: username-mapper-User Attribute: username-Token Claim Name: username-Claim JSON Type: String-Add to access token: ON -
Realm Settings -> Keysкопируем kid и pyblic_key ключа с алгоритмом RS256 в настройки установки zakroma. -
Clients -> zakroma -> Credentialsкопируем clientSecret в настройки установки zakroma. -
Увеличим время жизни токена. Переходим на вкладки слева
Realm Settings -> Tokens. Проставим следующее значение:Access Token Lifespan: 10 minute
-
Настройка реестра пользователей
Для тестов без LDAPДля тестового использования возможно использовать внутренний реестр пользователей keycloak, без интеграции с ldap.
Используется при хранении пользователей в LDAP-каталоге
На вкладке User Federation -> Add new provider -> ldap
Далее заполняем значения (на примере OpenLdap):
1- `Vendor: other #other если используется OpenLdap и Active Directory если Active Directory` 2- `Connection URL: ldap://openldap.openldap.svc.cluster.internal:389` 3- `Bind Type: simple` 4- `Bind DN: cn=admin,dc=demo,dc=zakroma,dc=ru` 5- `Bind Credential: xxx` 6- `Edit Mode: UNSYNCED` 7- `Users DN: ou=users,dc=demo,dc=zakroma,dc=ru` 8- `Username LDAP attribute: cn` 9- `RDN LDAP attribute: cn` 10- `UUID LDAP attribute: cn` 11- `User Object Classes: person, organizationalPerson`
и нажимаем Save.
Далее создаём маппер из Ldap в Keycloak: Mappers -> Add mapper
Создаем mapper c именем role-mapper c типом role-ldap-mapper.
Общая суть сводится к синхронизации групп AD с ролями пользователей в keycloak. Пример настроек:
- LDAP Roles DN: ou=groups,dc=demo,dc=zakroma,dc=ru
- Role Name LDAP Attribute: cn
- Role Object Classes: groupOfUniqueNames
- Membership LDAP Attribute: uniqueMember
- Membership Attribute Type: DN
- Membership User LDAP Attribute: uid
- Mode: LDAP_ONLY
- User Role Retrieve Strategy: LOAD_ROLES_BY_MEMBER_ATTRIBUTE
- Member-Of LDAP Attribute: memberOf
- ClientID: zakroma
Создаём ещё один mapper c именем username-mapper c типом user-attribute-ldap-mapper:
1- `User Model Attribute: username` 2- `LDAP Attribute: uid`
Синхронизируем пользователей.
Возвращаемся к настройкам на вкладке User Federation -> ldap -> settings и жмем на синхронизацию всех пользователей, тут должны увидеть что пользователи были добавлены.
В настройках Zakroma необходимо выставить значение auth.keycloak.permission.role в то название роли, которая присутствует у всех нужных пользователей. Т.е. только пользователи с данной ролью смогут пользоваться системой Zakroma.
Используется для тестирования, либо нестандартной конфигурации
Создаём роли: Clients -> Zakroma -> Roles
По кнопке Create role добавить роль:
- clouduser
Создаём пользователей в Keycloak: Users -> Add user
1Username: zakromaadmin 2First name: Admin 3Last name: Zakroma
Задаём пароль: Users -> zakromaadmin -> Credentials -> Set password
- Temporary: off
Назначаем роль: User -> zakromaadmin -> Role mapping -> Assign Role
Переключить в режим Filter by Clients -> в поиске написать “zakroma”
- clouduser
Используется при хранении пользователей в LDAP-каталоге с авторизацией через группы
Этот вариант настройки позволяет использовать группы LDAP для авторизации без создания ролей в Keycloak. Пользователи авторизуются на основе принадлежности к определенным группам в LDAP.
На вкладке User Federation -> Add new provider -> ldap
Далее заполняем значения (на примере OpenLdap):
1- `Vendor: other #other если используется OpenLdap и Active Directory если Active Directory` 2- `Connection URL: ldap://openldap.openldap.svc.cluster.internal:389` 3- `Bind Type: simple` 4- `Bind DN: cn=admin,dc=demo,dc=zakroma,dc=ru` 5- `Bind Credential: xxx` 6- `Edit Mode: UNSYNCED` 7- `Users DN: ou=users,dc=demo,dc=zakroma,dc=ru` 8- `Username LDAP attribute: cn` 9- `RDN LDAP attribute: cn` 10- `UUID LDAP attribute: cn` 11- `User Object Classes: person, organizationalPerson`
и нажимаем Save.
Создаём маппер групп из LDAP в Keycloak: Mappers -> Add mapper
Создаем mapper c именем group-mapper c типом group-ldap-mapper.
Этот маппер синхронизирует группы LDAP с группами Keycloak. Пример настроек:
- LDAP Groups DN: ou=groups,dc=demo,dc=zakroma,dc=ru
- Group Name LDAP Attribute: cn
- Group Object Classes: groupOfUniqueNames
- Membership LDAP Attribute: uniqueMember
- Membership Attribute Type: DN
- Membership User LDAP Attribute: uid
- Mode: LDAP_ONLY
- User Groups Retrieve Strategy: LOAD_GROUPS_BY_MEMBER_ATTRIBUTE
- Member-Of LDAP Attribute: memberOf
- Mapped Group Attributes: cn
- Drop non-existing groups during sync: ON
Создаём(если не существует) маппер атрибутов пользователя c именем username-mapper c типом user-attribute-ldap-mapper:
1- `User Model Attribute: username` 2- `LDAP Attribute: uid`
Синхронизируем пользователей и групп
Возвращаемся к настройкам на вкладке User Federation -> ldap -> settings и выполняем синхронизацию:
- Жмем
Sync all users- синхронизируем всех пользователей - Переходим в
Mappers -> group-mapper -> Sync LDAP Groups to Keycloak- синхронизируем группы
Настройка ЗАКРОМА.Хранение для работы с группами
Для изменения стратегии синхронизации пользователей на конфигурацию с группами необходимо поменять переменную sync_strategy и установить корневую группу для синхронизации (блок zakroma_storage_gateway в group_vars):
1- `auth.keycloak.sync_strategy: "groups"` 2- `auth.keycloak.permission.group: "zakroma-users-group"` - название группы в keycloak, и в ldap соответственно. 3- `default_admin: "zakromaadmin"` - Имя пользователя в группе zakroma-users-group , который будет назначен администратором платформы.
Только пользователи, входящие в указанную группу, смогут пользоваться системой ЗАКРОМА.Хранение.
Поддержка вложенных групп
При использовании sync_strategy: "groups" поддерживается рекурсивный обход вложенных групп Keycloak. Это позволяет объединять пользователей из нескольких независимых LDAP-групп в единый список синхронизации.
Для использования вложенных групп:
- Создать корневую группу в Keycloak (например,
zakroma-users-group). - В настройках
group-ldap-mapperуказать в поле Groups Path значение/<zakroma-users-group>/. LDAP-группы при синхронизации будут создаваться как дочерние относительно корневой группы. - В параметре
user_groupуказать имя корневой группы. После синхронизации в системе будут доступны пользователи всех вложенных групп.
ОграничениеПоддерживается не более 100 вложенных групп на корневом уровне иерархии.