По старой схеме продолжаем проект по миграции на отечественное ПО, а именно на RedOS и сегодня настроим интеграцию Gitea и Concourse c доменом FreeIPA.
Настройки Gitea для авторизации при помощи учетных данных FreeIPA
Аналогично предыдущим интеграциям созданы сервисный пользователь _devops и группы _devops_allow и _devops_admin первая группа члены которой являются пользователи, а члены второй соответственно администраторы.
Переходим в Панель управления -> Аутентификация и создаём новый источник аутентификации типа LDAP (via BindDN).

Задаём параметры подключения к FreeIPA домену и я предоставляю параметры применительно к моему домену, а вы естественно адаптируйте под себя.
- Тип аутентификации — LDAP (via BindDN)
- Имя аутентификации — RAIN_LDAP
- Протокол безопасности — Unencrypted
- Сервер — srv-kvm-prod-rain-01.rain.shiskitech.ru
- Порт — 389
- Bind DN — uid=_devops,cn=users,cn=accounts,dc=rain,dc=shiskitech,dc=ru
- Привязать пароль — пароль пользователя
- База для поиска пользователя — cn=users,cn=accounts,dc=rain,dc=shiskitech,dc=ru
- Фильтр пользователя — (&(objectclass=person)(uid=%s)(memberOf=cn=_devops_allow,cn=groups,cn=accounts,dc=rain,dc=shiskitech,dc=ru)(objectClass=top)(!(nsaccountlock=True)))
- Фильтр администратора — (&(objectclass=person)(uid=*)(memberOf=cn=_devops_admin,cn=groups,cn=accounts,dc=rain,dc=shiskitech,dc=ru))(objectClass=top)(!(nsaccountlock=True)))
- Ограниченный фильтр — Пустое значение
- Атрибут Username — uid
- Атрибут First Name — givenName
- Атрибут Surname — sn
- Атрибут электронной почты — mail
- Атрибут Открытый ключ SSH — ipaSshPubKey
Дополнительно устанавливаем параметр «Извлекать атрибуты в контексте Bind DN». Так же обратите внимание на фильтры администратора и пользователя.
Дополнительные параметры логирования для отладки.
[log]
MODE = console,file
# LEVEL = info
LEVEL = trace
# LEVEL = debug
ROOT_PATH = /opt/gitea/log
[log.file]
FILE_NAME = /opt/gitea/log/gitea.log
Обратите внимание, что поля email и ipaSshPubKey должны быть уникальными для пользователей и если при не уникальности поля email пользователь просто не сможет войти в Gitea, то при не уникальности ipaSshPubKey пользователю не будет добавлен ключ.
Обязательно используйте отладку на этапе настройки интеграции и вы сможете диагностировать все спорные ситуации.
Настройки Concourse для авторизации при помощи учетных данных FreeIPA (Oauth2)
Для Concourse будем использовать Oauth2 через Keycloak цепочка конечно получается интересная, но главное, что рабочая. Про настройку realm в keycloak я уже не один один раз писал и тут повторяться не будем можно посмотреть например в статье «Авторизация в Wiki Outline при помощи Keycloak«.
Путем проб и ошибок пришел к такой конфигурации.
CONCOURSE_OAUTH_DISPLAY_NAME=oauth
CONCOURSE_OAUTH_CLIENT_ID=concourse
CONCOURSE_OAUTH_CLIENT_SECRET=xxxSECRETxxx
CONCOURSE_OAUTH_AUTH_URL=https://kc.interlan.xyz/realms/concourse/protocol/openid-connect/auth
CONCOURSE_OAUTH_TOKEN_URL=https://kc.interlan.xyz/realms/concourse/protocol/openid-connect/token
CONCOURSE_OAUTH_USERINFO_URL=https://kc.interlan.xyz/realms/concourse/protocol/openid-connect/userinfo
CONCOURSE_OAUTH_SCOPES=openid,profile,email
CONCOURSE_OAUTH_USERNAME_KEY=preferred_username
CONCOURSE_OAUTH_DISPLAY_NAME_KEY=name
CONCOURSE_MAIN_TEAM_OAUTH_USER=administrator
CONCOURSE_MAIN_TEAM_OAUTH_GROUP=concourse-admins
Настройки Concourse для авторизации при помощи учетных данных FreeIPA (LDAP)
Вообще Concourse поддерживает много механизмов авторизации и пытаться настроить их все смысла не имеет, но давайте еще для примера рассмотрим пример с классическим LDAP и пока на этом закончим.
CONCOURSE_LDAP_DISPLAY_NAME='FreeIPA Auth'
CONCOURSE_LDAP_HOST=srv-kvm-prod-rain-01.rain.shiskitech.ru
CONCOURSE_LDAP_INSECURE_NO_SSL=true
CONCOURSE_LDAP_USER_SEARCH_FILTER='(&(objectclass=person)(uid=*)(memberOf=cn=_devops_allow,cn=groups,cn=accounts,dc=rain,dc=shiskitech,dc=ru)(objectClass=top)(!(nsaccountlock=True)))'
CONCOURSE_LDAP_BIND_DN='uid=_devops,cn=users,cn=accounts,dc=rain,dc=shiskitech,dc=ru'
CONCOURSE_LDAP_BIND_PW=qAlYFhQk4X
CONCOURSE_LDAP_USER_SEARCH_BASE_DN='cn=users,cn=accounts,dc=rain,dc=shiskitech,dc=ru'
CONCOURSE_LDAP_USER_SEARCH_SCOPE=sub
CONCOURSE_LDAP_USER_SEARCH_ID_ATTR=uid
CONCOURSE_LDAP_USER_SEARCH_EMAIL_ATTR=mail
CONCOURSE_LDAP_USER_SEARCH_USERNAME='uid'




