Общие сведения
В статье описывается настройка двухфакторной аутентификации (2FA), многофакторной аутентификации (MFA) и Single-Sign On (SSO) для GitLab посредством OpenID Connect-интерфейса системы Avanpost FAM. Функциональность доступна для веб-интерфейса GitLab.
Для GitLab с целью 2FA/MFA могут использоваться следующие факторы аутентификации:
- Мобильное приложение Avanpost Authenticator (push + TOTP);
- SMS;
- TOTP;
- E-mail;
- Мессенджер Telegram;
- Электронная подпись;
- FIDO WebAuthn/U2F
- Доменная Kerberos-аутентификация;
- ЕСИА (Единая система идентификации и аутентификации) в режиме Federation;
- OpenID Connect-провайдер в режиме Federation;
- SAML-провайдер в режиме Federation.
Можно обеспечить использование как двухфакторной аутентификации, так и многофакторной аутентификации при доступе в GitLab в зависимости членства пользователя в определённой группе.
GitLab поддерживает функциональность SSO (Signle Sign-On), обеспечиваемую протоколом OpenID Connect: если пользователь прошёл аутентификацию в веб-приложение в соответствии с настроенным сценарием, то система не будет запрашивать повторного подтверждения аутентификации при аутентификации в другое веб-приложение. Также обеспечивается реализация функциональности SLO (Single Logout) в рамках протокола OpenID Connect.
Системные требования для интеграции GitLab с Avanpost FAM:
- сервер Avanpost FAM 1.3.0 или выше;
- сервер GitLab.
Для выполнения настройки 2FA/MFA/SSO в соответствии с инструкцией необходимо выполнить следующие предварительные условия:
- Установить в сети сервер GitLab.
- Установить в сети компонент Avanpost FAM Server.
При необходимости аутентификации:
- через мобильное приложение Avanpost Authenticator – установить компонент Avanpost FAM Mobile Authenticator Service;
- через мобильное приложение SafeTech PayControl – установить сервер SafeTech PayControl;
- через SMS – настроить подключение к внешнему SMS-шлюзу, который предоставляет услугу доставки SMS-сообщений;
- через E-mail – настроить подключение к SMTP-шлюзу, который обеспечивает доставку почтовых сообщений;
- через Telegram – настроить подключение к Telegram Bot API;
- посредством электронной подписи – настроить криптопровайдер и установить плагин в браузер;
- посредством FIDO WebAuthn/U2F – настроить сертификат;
- посредством Kerberos – настроить keytab-файл;
- посредством ЕСИА настроить подключение к ЕСИА;
- посредством OpenID Connect-провайдера – настроить подключение к OpenID Connect-провайдеру;
- посредством SAML-провайдера – настроить подключение к SAML-провайдеру.
Настройка
На стороне Avanpost FAM в административной консоли:
- Создать новое приложение с типом OpenID Connect, указав Client Secret;
- В карточке приложения на вкладке «Настройки» для параметра:
Base URL
в качестве значения указывем <Адрес GitLab>;Redirect URIs
– http://<Адрес GitLab>/users/auth/oauth2_generic/callback;Scope (default)–
email.
Зафиксировать значения следующих параметров, которые потребуются при выполнении настройки на стороне GitLab:
- Хост Avanpost FAM - адрес, на котором размещена система аутентификации Avanpost FAM; например, https://avanpost-fam.domain;
- Client ID, который был сгенерирован системой Avanpost FAM;
- Client Secret, который был установлен при создании приложения.
На стороне GitLab:
- В конфигурационном файле
/etc/gitlab/gitlab.rb
в секции OmniAuth Settings поменять значения следующих параметров на указанные:gitlab_rails['omniauth_enabled'] = true
gitlab_rails['omniauth_allow_single_sign_on'] = ['saml','oauth2_generic']
gitlab_rails['omniauth_block_auto_created_users'] = false
- В том же конфигурационном файле
/etc/gitlab/gitlab.rb
найти секциюgitlab_rails['omniauth_providers']
и выполнить внесение изменений в соответствии с примером:Важно что-бы скобки находились в таком же положении как в примере иначе будет ошибка
gitlab_rails['omniauth_providers'] = [ { "name" => "oauth2_generic", "app_id" => "1bceefe8-098e-4455-b758-1ada46940f39", "app_secret" => "b329764074bce370321befd672fd1100f1e0f500dec2f4c7d7d5a61c70334228", "args" => { client_options: { 'site' => 'https://<Хост_Avanpost_FAM>', 'user_info_url' => '/oauth2/userinfo', 'authorize_url' => '/oauth2/authorize', 'token_url' => '/oauth2/token' }, user_response_structure: { root_path: [], id_path: ['sub'], attributes: { nickname: 'sub', name: 'name', first_name: 'given_name', last_name: 'family_name', email: 'email' } } } } ]
В bash на сервере GitLab выполнить команду:
sudo gitlab-ctl reconfigure
Настройка завершена.
Проверка настройки
- Открыть веб-интерфейс аутентификации GitLab и убедиться, что появилась кнопка «Avanpost FAM».
- Убедиться, что по нажатию на кнопку «Avanpost FAM» пользователь должен быть перенаправлен на интерфейс аутентификации Avanpost FAM.
- После успешной аутентификации через Avanpost FAM пользователь должен получить доступ к GitLab.
Сценарии использования
Загрузка пользователей GitLab из домена (LDAP)
Чтобы пользователи из домена смогли проходить 2FA/MFA или пользоваться SSO при аутентификации в GitLab, необходимо использовать встроенную в Avanpost FAM функциональность интеграции с LDAP-каталогами (Microsoft Active Directory, FreeIPA, 389Directory, openldap и т.д.). В рамках этой функции можно настроить LDAP-фильтры, которые позволят обеспечить загрузку в Avanpost FAM только тех пользователей, которые будут использовать 2FA/MFA/SSO в GitLab. Таким образом можно подключить несколько доменов.
Контроль попыток аутентификации пользователей к GitLab через Avanpost FAM
Для контроля попыток аутентификации необходимо использовать журнал событий безопасности, доступный в административном интерфейсе системы и посредством syslog.
Управление доступом пользователей к GitLab через Avanpost FAM
Для предоставления доступа пользователю, его необходимо включить в группу, которая имеет доступ к созданному приложению. Доступна реализация автоматического включения и исключения пользователя из группы в рамках синхронизации с LDAP-каталогом.
Для отзыва доступа у пользователя необходимо исключить его из группы, которая имеет доступ к созданному приложению.
Управление доступом пользователей к GitLab через домен (LDAP)
Avanpost FAM в рамках интеграции с LDAP-каталогом (Microsoft Active Directory, FreeIPA, 389Directory, openldap и т. д.) обеспечивает автоматизацию управления членством пользователей в группах Avanpost FAM, предоставляющих доступ к GitLab, путём синхронизации членства пользователей в группах Avanpost FAM на основе членства пользователей домена в доменных группах.
Управление сценарием аутентификации (2FA/MFA) для GitLab через Avanpost FAM
Для настройки второго фактора, который будет использоваться для приложения GitLab, необходимо перейти в административной консоли в карточку приложения и открыть вкладку MFA. В качестве первого шага – указать метод аутентификации Password. В качестве второго шага можно выбрать один из следующих факторов:
- Мобильное приложение Avanpost Authenticator;
- Мобильное приложение SafeTech PayControl;
- SMS;
- TOTP;
- E-mail;
- Мессенджер Telegram;
- Электронная подпись;
- FIDO WebAuthn/U2F;
- Kerberos;
- Провайдер ЕСИА;
- OpenID Connect-провайдер;
- SAML-провайдер.
Управление сценарием аутентификации (2FA/MFA) для отдельных групп сотрудников, подключающихся к GitLab, через Avanpost FAM
Для управления сценарием аутентификации (2FA/MFA) для отдельных групп сотрудников необходимо в административной консоли Avanpost FAM перейти в карточке группы на вкладке «MFA» и настроить дополнительный сценарий аутентификации. В этом случае пользователи, входящие в указанную группу, будут проходить аутентификацию с использованием второго фактора, заданного на вкладке. Таким образом можно определить специфический сценарий 2FA для администраторов и других привилегированных пользователей, подключающихся к GitLab.
Приложение А. Пример настройки конфигурационного файла gitlab.rb на стороне GitLab
Пример корректной настройки конфигурационного файла /etc/gitlab/gitlab.rb
: