Что такое LDAP и как он используется в DevOps?

«Что такое LDAP и как он используется в DevOps?» — вопрос из категории Безопасность, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

LDAP (Lightweight Directory Access Protocol) — это открытый, отраслевой стандартный протокол прикладного уровня для доступа и управления службами каталогов. В контексте DevOps и инфраструктурной безопасности LDAP (чаще в виде его реализации — OpenLDAP или Microsoft Active Directory) используется как централизованная система управления идентификацией и доступом (IAM) для пользователей и сервисов.

Основные концепции:

  • DIT (Directory Information Tree): Иерархия записей, подобная файловой системе (например, dc=mycompany,dc=com).
  • Entry (Запись): Объект в дереве, например, пользователь (uid=jdoe), группа (cn=developers) или сервис.
  • Attribute (Атрибут): Пара "ключ-значение" в записи (mail, uidNumber, sshPublicKey).
  • Bind (Привязка): Операция аутентификации (входа) в каталог.

Практическое применение в DevOps-стеке:

  1. Аутентификация на Linux-серверах: Интеграция через sssd или pam_ldap. Позволяет инженерам входить на все серверы с помощью корпоративных учётных данных, а не отдельных SSH-ключей.
  2. Управление доступом в инструментах:
    • Kubernetes: Плагин dex или gangway могут использовать LDAP для аутентификации пользователей в кластере, связывая группы LDAP с Kubernetes RBAC ClusterRoleBinding.
    • CI/CD (Jenkins, GitLab): Настройка LDAP-авторизации для управления доступом к пайплайнам и репозиториям.
    • Мониторинг (Grafana): Настройка входа для команды.
    • Виртуализация (vCenter): Централизованное управление правами администраторов.
  3. Хранение SSH-ключей: Атрибут sshPublicKey в LDAP может использоваться для централизованного распространения ключей на серверы.

Пример поиска пользователя с помощью ldapsearch:

# Анонимный поиск (если разрешён) для нахождения DN пользователя
ldapsearch -x -H ldaps://ldap.mycompany.com -b "ou=people,dc=mycompany,dc=com" "(uid=jdoe)"
# Аутентифицированный поиск для получения чувствительных данных
ldapsearch -x -H ldaps://ldap.mycompany.com -D "uid=svc_account,ou=services,dc=mycompany,dc=com" -W -b "ou=people,dc=mycompany,dc=com" "(uid=jdoe)" mail displayName

Интеграция с Linux (PAM): В файле /etc/sssd/sssd.conf настраивается домен LDAP, что позволяет использовать команды типа getent passwd jdoe или id jdoe для проверки пользователей и групп из центрального каталога. Это критически важно для соблюдения принципа least privilege и быстрого онбординга/офбординга сотрудников в инфраструктуре.