Запуск ansible с веб-сервера для управления инфраструктурой

Запуск ansible с веб-сервера для управления инфраструктурой

У меня есть nginx с php app. Я также установил ansible и скопировал playbooks на этот сервер. Я хочу запустить ansible playbooks через webapp. Я хочу знать, как сделать это безопасным способом.

Nginx работает под пользователем nginx, php-fpm работает под apache, а ansible имеет своего пользователя. Приложение PHP находится в /var/www/html/, а плейбуки Ansible находятся в /var/www/html/ansible, но эти каталоги доступны для чтения всем.

Итак, поток должен выглядеть так:

  1. пользователь выбирает действие на веб-странице
  2. ajax отправляет его в php
  3. php подготавливает команду ansible и запускает ansible playbook
  4. ansible работает
  5. php перехватывает stdout&stderr и отправляет их обратно на веб-страницу как json
  6. ajax отобразит stdout&stderr на веб-странице.

Теперь в скрипте php я планирую выполнить exec('ansible-playbook site.yml -t ...'). Это будет выполнено от имени пользователя apache. Или мне следует запустить его от имени пользователя ansible с помощью sudo? Или лучше запустить nginx, php-fpm и ansible от имени nobody?

Не уверен, что лучше всего подойдет для этого.

Спасибо за ваше мнение.

решение1

Существующие веб-интерфейсы для Ansible включают:

Если вы хотите построить свой собственный, используйтеansible-бегункак скрипт/библиотека Python/контейнер для запуска Ansible. ansible-playbook предназначен для интерактивного использования и не имеет стабильного API.

Прежде чем писать что-то свое, поймите, что это привилегированное приложение, которое может сделать много вещей с вашей инфраструктурой. Вы не ограничены моделью безопасности по умолчанию для ваших установленных веб-серверов.

Например, у вас может быть демон запуска заданий, который работает как отдельный выделенный пользователь, отдельный от пользователя, под которым работает веб-сервер. Таким образом, компрометация пользователя nginx не даст автоматически sudo для root, вам также придется пройти через API.

Также оцените возможности изоляции запущенных плейбуков. AWX выбрал для реализацииизоляция заданий в стиле chroot.

Разработка безопасного, удобного веб-приложения в целом — слишком большая тема для одного ответа, и есть лучшие сайты Stack Exchange для тем разработки. Изучите то, что уже существует.

Связанный контент