Предварительная версия. Функциональность может измениться, но основные возможности сохранятся. Совместимость с будущими версиями может потребовать ручных действий по миграции.
Конфигурация OmniAuth
Настройка в основном основывается на официальной документации. Однако Deckhouse Code добавляет некоторые расширения, описанные в разделах ниже.
OpenID Connect (OIDC)
Для интеграции с OIDC были добавлены следующие параметры:
allowed_groups
: Массив групп, которым разрешён вход. Пользователи, не входящие в эти группы, будут заблокированы и не смогут войти.По умолчанию:null
(разрешены все группы).admin_groups
: Массив групп, которым разрешён вход с правами администратора. Пользователи из этих групп получат роль администратора.По умолчанию:null
(админские права не выдаются ни одной группе).groups_attribute
: Имя атрибута, используемого для получения групп пользователя. По умолчанию:'groups'
.
Пример конфигурации
Секци находится в разделе spec.appConfig.omniauth.
providers:
- name: 'openid_connect'
allowed_groups:
- 'gitlab'
admin_groups:
- 'admin'
groups_attribute: 'gitlab_group'
SAML
Для интеграции с SAML были добавлены следующие параметры:
allowed_groups
: Массив групп, которым разрешён вход. Пользователи, не входящие в эти группы, будут заблокированы и не смогут войти.По умолчанию:null
(разрешены все группы).admin_groups
: Массив групп, которым разрешён вход с правами администратора. Пользователи из этих групп получат роль администратора.По умолчанию:null
(админские права не выдаются ни одной группе).groups_attribute
: Имя атрибута, используемого для получения групп пользователя. По умолчанию:'Groups'
.
Пример конфигурации
Секци находится в разделе spec.appConfig.omniauth.
providers:
- name: 'saml'
allowed_groups:
- 'gitlab'
admin_groups:
- 'admin'
groups_attribute: 'gitlab_group'
Примечание: для OIDC и SAML — если пользователь принадлежит к admin_groups, но не указан в allowed_groups, он не сможет войти. В этом случае admin_groups игнорируется и административные права не назначаются.
LDAP Synchronization
Выполняет синхронизацию пользователей, групп и прав доступа с LDAP-сервером. По умолчанию запускается раз в час.
Вы можете настроить периодичность синхронизации через параметр cronJobs
в секции spec.appConfig.
:
cronJobs:
ldapSyncWorker:
cron: "0 * * * *"s
Ограничения на стороне LDAP-сервера
Во время синхронизации выполняются запросы ко всем пользователям и группам, указанным в конфигурации. Задача синхронизации автоматически использует пагинацию при необходимости. Однако если на стороне LDAP-сервера установлено ограничение на максимальное количество возвращаемых записей, это может привести к неожиданной блокировке или удалению доступа у пользователей.
Пример конфигурации LDAP-провайдера
Раздел конфигурации находится в spec.appConfig.ldap.
main:
label: ldap
host: 127.0.0.1
port: 3389
bindDn: 'uid=viewer,ou=People,dc=example,dc=com'
base: 'ou=People,dc=example,dc=com'
uid: 'cn'
password: 'viewer123'
syncName: true
groupSync:
createGroups: true
base: 'ou=Groups,dc=example,dc=org'
filter: '(objectClass=groupOfNames)'
prefix:
attribute: 'businessCategory'
default: 'default-program'
topLevelGroup: "LdapGroups"
nameMask: "(?<=-)[A-z0-9А-я]*$"
owner: "root"
roleMapping:
- byName: '.*-project_manager-.*'
gitlabRole: 'Maintainer'
- byName: '.*-developer-.*'
gitlabRole: 'Developer'
- byName: '.*-participant-.*'
gitlabRole: 'Reporter'
Синхронизация групп и прав доступа
Deckhouse Code переиспользует базовую ролевую модель Gitlab.
Создаёт группы GitLab и назначает роли пользователям на основе записей, полученных с LDAP-сервера. Может быть настроена с помощью следующих параметров:
Обязательные параметры:
- groupSync.base — базовый DN, с которого начинается поиск..
Опциональные параметры:
- groupSync.createGroups — если
true
, группы будут создаваться в Deckhouse Code. - groupSync.filter — LDAP фильтр для поиска групп.
- groupSync.scope — Область поиска групп (0 — Base, 1 — SingleLevel, 2 — WholeSubtree).
- groupSync.prefix — Определяет, из какого атрибута брать имя родительской группы. Если атрибут отсутствует — используется значение по умолчанию.
- groupSync.topLevelGroup — Имя верхнеуровневой группы, в которую будут добавлены все синхронизированные группы.
- groupSync.nameMask — регулярное выражение для извлечения имени группы из атрибута CN. Регулярное выражение не должно содержать захватывающих групп. Результатом применения должно быть ровно то значение, которое используется в имени группы. Для строгих ограничений можно использовать конструкции lookbehind и lookahead.
- groupSync.owner — имя пользователя, который будет добавлен как владелец группы (по умолчанию —
root
).
Секция roleMapping
Назначает права пользователям на основе имени группы (cn
):
- roleMapping.byName — регулярное выражение; если имя группы совпадает, пользователю назначается соответствующая роль.
- roleMapping.gitlabRole — название роли в Deckhouse Code (например:
Guest
,Reporter
,Developer
,Maintainer
,Owner
).
Как определяется членство в группе
Участники групп определяются на основе следующих атрибутов группы. Значение каждого атрибута должно быть массивом DN пользователей:
member
uniquemember
memberof
memberuid
submember
Синхронизация пользователей
Блокирует и разблокирует пользователей, а также обновляет их имя и email на основе данных с LDAP-сервера.
Опциональные параметры:
syncName
- если true
, имя пользователя будет обновлено по данным LDAP.
Правило преобразования имён пользователей:
Список раширений |
---|
html , xhtml , text , txt , js , css , markdown , md , diff , patch , vtt , yaml , yml |
png , jpeg , jpg , jpe , pjpeg , gif , bmp , tiff , tif , svg , webp , ico |
mp3 , mp1 , mp2 , ogg , oga , spx , opus , m4a , aac |
mpeg , mpg , mpe , mpg4 , webm , mp4 , m4v , mov , ogv |
otf , ttf , woff , woff2 |
pdf |
zip , gzip , gz |
csv , json , xml , rss , atom , vcf , ics |
multipart_form , url_encoded_form |
Если имя пользователя в LDAP содержит точку (.
), за которой следует расширение файла, совпадающее с записью из предопределённой таблицы расширений, то точка (.
), стоящая непосредственно перед этим расширением, автоматически заменяется на символ подчёркивания (_
).
Такое преобразование обеспечивает совместимость с требованиями GitLab к формату имён пользователей, максимально сохраняя при этом исходный идентификатор.
Примеры:
Ldap username: a.ivanov.ini
Gitlab username:a.ivanov_ini
Ldap username: a.k.ivanov
Gitlab username:a.k.ivanov
Ldap username: a.k.ivanov.ini
Gitlab username:a.k.ivanov_ini
Ldap username: a.ini.ivanov
Gitlab username:a.ini.ivanov
Устранение проблем с синхронизацией
Если предыдущее задание синхронизации не завершилось корректно, Redis может сохранить запись о том, что оно ещё выполняется. Это предотвратит запуск нового задания, поскольку параметр concurrency установлен в 1.
Чтобы исправить ситуацию, выполните следующие шаги:
- Подключитесь к Redis, используя базы, указанные в
config/redis.shared_state.yml
andconfig/redis.queues.yml
. - Удалите следующий ключ:
sidekiq:concurrency_limit:throttled_jobs:{ldap/sync_worker}
с помощью команд:
keys *ldap*
- убеждается в наличии соответствующего ключаdel "sidekiq:concurrency_limit:throttled_jobs:{ldap/sync_worker}"
- удаляет ключ из Redis