Featured image of post Подключение Gitlab к LDAP FreeIPA

Подключение Gitlab к LDAP FreeIPA

Пошаговая настройка LDAP в Gitlab Kubernetes

Задача: настроить доменную авторизацию в Gitlab, который живёт в Kubernetes

Требования:

  • Развернутый домен FreeIPA, Active Directory
  • Развернутый GitLab CI

Шаг 1. Подготовка пользователя в домене FreeIPA

Создать пользователя в домене FreeIPA с правами READ ONLY, LDAP_READ в FreeIPA
Я создал пользователя gitlab-ldap

Шаг 2. Добавление пользователя в кубернетес

Создать secret в кубере, чтобы не указывать пароль в открытом виде. Передаём пароль от пользователя gitlab-ldap:

1
kubectl -n gitlab create secret generic gitlab-ldap --from-literal=bind_password='SecretPass123'

Шаг 3. Добавление сертификата в кубернетес

Если у вас есть ROOT-CA внутри gitlab данный шаг не делайте.
Для усиления безопасности мы включим проверку сертификата домена FreeIPA в конфиге, поэтому достанем и поместим сертификат в secret куба, а его уже укажем в gitlab.
Мой сервер LDAP имеет IP: 192.168.10.10

1
2
openssl s_client -connect 192.168.10.10:636 -showcerts </dev/null 2>/dev/null \
  | awk '/BEGIN CERTIFICATE/{i++} {print > ("cert" i ".pem")}'

Смотрим содержимое:

1
2
3
4
for f in cert*.pem; do
  echo "=== $f ==="
  openssl x509 -in "$f" -noout -subject -issuer
done

Выбираем тот серт, который подписан CA. У меня это cert2.pem

После чего помещаем его в secret:

1
kubectl -n gitlab create secret generic freeipa-ldap-ca --from-file=ca.crt=./cert2.pem

Шаг 4. Добавить конфигурацию

В HELM чарт, или файл конфигурации gitlab нужно добавить параметры подключения к серверу LDAP:

1
nano gitlab-values.yaml

Указываем свою UI, домен и пользователя:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
global:
  appConfig:
    ldap:
      servers:
        main:
          label: 'LDAP'
          host: 'freeipa.domain.local'
          port: 636
          uid: 'uid'
          bind_dn: 'uid=gitlab-ldap,cn=users,cn=accounts,dc=freeipa,dc=local'
          password:
            secret: gitlab-ldap
            key: bind_password
          encryption: 'simple_tls'
          verify_certificates: true
          timeout: 10
          active_directory: false
          base: 'dc=freeipa,dc=local'
          user_filter: 'memberof=cn=gitlab-user,cn=groups,cn=accounts,dc=freeipa,dc=local'
          lowercase_usernames: false
          retry_empty_result_with_codes: [80]
          allow_username_or_email_login: false
          block_auto_created_users: false
  certificates:
    customCAs:
      - secret: freeipa-ldap-ca

Применяем конфигурацию с помощью helm upgrade или если есть argo подождать обновленной версии.

1
helm upgrade gitlab oci://harbor.doman.local/helm/gitlab -f gitlab-values.yaml -n gitlab

Шаг 5. Проверить работоспособность:

1
2
kubectl -n gitlab exec -it deploy/gitlab-toolbox -- bash
gitlab-rake gitlab:ldap:check

Авторизуемся и готово

Информацию можно использовать в свободном доступе, с указанием ссылки на сайт
Telegram GitHub YouTube