Ansible vs LDAP
klink0v — 30.01.2023Допустим, у нас есть 100500 линуксовых машин. На них на всех требуется как-то управлять пользователями: создавать, удалять, менять участие в группах, заливать ssh-ключи и так далее. Для этого возможны два различных подхода.
- Ansible / Salt / Puppet / Chef и прочие системы управления
конфигурациями. Выделяем где-нибудь сервер, на нем описываем
правила / политики / playbooks, туда же кладем открытые ключи. Пару
раз в день по крону запускается некая "глобальная" playbook,
которая приводит список пользователей и их привилегии в соответстии
с желаемыми.
- LDAP. Вся инфа о пользователях хранится в единым каталоге, на
который настроены остальные машины. Управление
пользователями-правами-ключами осуществляется через этот
каталог.
У каждого подхода есть свои достоинства и недостатки.
Самый главный и самый очевидный недостаток LDAP-а: онлайн-режим работы. То есть, требуется постоянная доступность LDAP-сервера. Если же он "упал", сеть начала "тошнить" или ещё что-нибудь в этом духе, то никто не сможет зайти на целевую машину. Понятно, что можно настроить локальное кеширование, создавать "суперадминов" локально и т.д. и т.п. Но это всё равно не решает прям вот всех проблем, потенциально способных возникнуть при потере связи до LDAP-сервера.
Из достоинств: удобно администрировать, легко вести логи / аудит любых изменений, всё находится в одном месте, пользователь на любой машине будет иметь один и тот же UID (иногда это бывает ценно), можно прикрутить прозрачный вход с GSSAPI и вообще отказаться от раскладывания SSH-ключей.
С Ansible ситуация обратная. Всё работает надёжно, т.к. все пользователи являются локальными. Но плейбуки и роли рано или поздно неизбежно превратятся в большую помойку, в которой невозможно что-нибудь понять, даже если админы супер-аккуратные. А если им присуще хотя бы лёгкое рас3.14здяйство и/или их больше двух, то момент превращения в помойку наступает очень быстро.
Плюс, при таком подходе крайне затруднительно нарисовать сколь-либо сложную систему делегирования (я разрешаю такому-то чуваку самому рулить пользователями на такой-то машине) и/или схемы распределения ролей (есть проектные команды А, Б, В; таким-то командам нужен такой-то уровень доступа на такой-то группе машин).
Вот сейчас сижу и думаю, что же таки лучше применять в своей ситуации. Пока что вопрос больше теоретический, но он может встать в полный рост в любой момент.
Всем удобных систем управления пользователями и их привилегиями.
|
</> |