Внешняя аутентификация (eauth)
Тема дорожной карты · SaltStack
Система внешней аутентификации (eauth) позволяет запускать команды Salt от именованных пользователей, проверяемых внешним бэкендом, таким как PAM или LDAP, вместо root на мастере. Это решает две задачи: дает доступ к Salt без раздачи root-доступа на мастере и позволяет аудиторно отслеживать, кто запускал команды. Кроме того, eauth обязательен для salt-api, который аутентифицирует запросы через этот механизм. Правила авторизации используют синтаксис «таргет → функции», аналогичный publisher_acl, что облегчает переход от локальных ACL к eauth.
Как это работает
В конфигурации мастера описывается блок external_auth, который содержит бэкенд, пользователей или группы и их права:
external_auth:
pam:
ops%:
- 'web*':
- test.ping
- service.restart
- '@runner':
- jobs.list_jobs
Специальные ключи @runner, @wheel и @jobs предоставляют доступ к runner'ам, wheel-модулям и истории заданий. Запуск с аутентификацией выполняется командой salt -a pam 'web*' test.ping, где клиент запрашивает логин и пароль, а мастер проверяет их через PAM и сверяет с правилами. Для избежания постоянного ввода пароля можно выпустить токен: salt -T -a pam .... Токен сохраняется и используется до истечения срока. Бэкенд pam проверяет локальных пользователей системы и поддерживает интеграцию с sssd и доменами через PAM-стек. Бэкенд ldap работает напрямую с каталогом и поддерживает авторизацию по группам LDAP. salt-api принимает логин, пароль и бэкенд в запросе /login и возвращает токен для последующих вызовов.
Когда применять
Включайте eauth, если с мастером работает более одного человека: именованные пользователи обеспечивают аудит (в логах и job cache видно инициатора), а группы позволяют управлять доступом через существующий каталог. PAM — простой старт, так как работает с локальными пользователями и доменной интеграцией через sssd. LDAP выбирают, когда права должны следовать за членством в группах каталога без создания локальных учёток. Для автоматизации (CI, ChatOps, порталы самообслуживания) eauth безальтернативен, так как salt-api без него не аутентифицирует никого. Если весь доступ сводится к паре локальных пользователей на самом мастере и API не нужен, достаточно более простого publisher_acl.
Типичные ошибки
Первая ошибка — широкие права «на посмотреть»: правило '*': [.*] для группы ops превращает каждого её участника в root всего парка; выдавайте конкретные функции и таргеты. Вторая ошибка — незашифрованный канал до salt-api: логины и пароли уходят открытым текстом, TLS обязателен. Третья ошибка — забытые токены: выпущенный токен живёт до истечения срока независимо от смены пароля пользователя, это нужно учитывать при офбординге. Четвёртая ошибка — PAM-бэкенд и сервис без прав: демон мастера должен иметь возможность читать PAM-стек, при запуске от непривилегированного пользователя аутентификация тихо ломается. Пятая ошибка — путаница между аутентификацией и авторизацией: успешный вход через LDAP не даёт прав сам по себе, права определяет только блок правил в external_auth.
Связанные понятия
Полезные ресурсы
🔤 Английские термины в этой теме
Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.
- issue /ˈɪʃuː/ «ишью», не «иссью» разбор: Где встречается: код, доки, тикеты, созвоны
- mandatory /ˈmændətəri/ обязательный разбор: Читаем man pages: SYNOPSIS, OPTIONS, скобки
- credentials /krəˈdɛnʃəlz/ «кридЕншелз» разбор: Безопасность: vulnerability, exploit, hardening, least privilege
- domain /dəˈmeɪn/ ударение на второй слог разбор: Пути, URL, расширения: dot env, slash, at
- interface /ˈɪntərfeɪs/ ударение на первый слог разбор: Немые буквы и ударение: cache, queue, suite, height
- command /kəˈmɑːnd/ ударение на второй слог разбор: Английский Linux и терминала