Внешняя аутентификация (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.

Связанные понятия

Полезные ресурсы

🔤 Английские термины в этой теме

Слова из этой темы, которые русскоязычные часто произносят неверно. Кнопка 🔊 произносит голосом браузера.

Весь словарь терминов →