Настройка MFA/SSO для GitLab - Avanpost FAM/MFA+

Общие сведения

В статье описывается настройка двухфакторной аутентификации (2FA), многофакторной аутентификации (MFA) и Single-Sign On (SSO) для GitLab посредством OpenID Connect-интерфейса системы Avanpost FAM. Функциональность доступна для веб-интерфейса GitLab.

Для GitLab с целью 2FA/MFA могут использоваться следующие факторы аутентификации: 

Можно обеспечить использование как двухфакторной аутентификации, так и многофакторной аутентификации при доступе в 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 в соответствии с инструкцией необходимо выполнить следующие предварительные условия:

  1. Установить в сети сервер GitLab.
  2. Установить в сети компонент 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 в административной консоли:

  1. Создать новое приложение с типом OpenID Connect, указав Client Secret;
  2. В карточке приложения на вкладке «Настройки» для параметра:
    1. Base URL в качестве значения указывем <Адрес GitLab>;
    2. Redirect URIs – http://<Адрес GitLab>/users/auth/oauth2_generic/callback;
    3. Scope (default)– email.
  3. Зафиксировать значения следующих параметров, которые потребуются при выполнении настройки на стороне GitLab:
    1. Хост Avanpost FAM - адрес, на котором размещена система аутентификации Avanpost FAM; например, https://avanpost-fam.domain;
    2. Client ID, который был сгенерирован системой Avanpost FAM;
    3. Client Secret, который был установлен при создании приложения.

На стороне GitLab:

  1. В конфигурационном файле /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
  2. В том же конфигурационном файле /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'
                          }
            }
            }
       }
    ]
  3. В bash на сервере GitLab выполнить команду:

    sudo gitlab-ctl reconfigure

Настройка завершена.

Проверка настройки

  1. Открыть веб-интерфейс аутентификации GitLab и убедиться, что появилась кнопка «Avanpost FAM».
  2. Убедиться, что по нажатию на кнопку «Avanpost FAM» пользователь должен быть перенаправлен на интерфейс аутентификации Avanpost FAM.
  3. После успешной аутентификации через 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:


Обсуждение