從網路伺服器執行 ansible 來管理基礎設施

從網路伺服器執行 ansible 來管理基礎設施

我有 nginx 和 php 應用程式。我還在該伺服器上安裝了 ansible 並複製了劇本。我想做的是透過 webapp 運行 ansible playbooks。我想知道如何以這種安全的方式進行。

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. 安塞布爾運行
  5. php 捕獲 stdout&stderr 並將其作為 json 發送回網頁
  6. ajax 將在網頁上顯示 stdout&stderr。

現在,在 php 腳本中,我打算執行('ansible-playbook site.yml -t ...')。這將以 apache 使用者身分執行。或者我應該在 ansible 的用戶下使用 sudo 啟動它?或者更好的是在無人下啟動 nginx、php-fpm 和 ansible?

不確定什麼是最好的。

謝謝您的意見。

答案1

Ansible 的現有 Web 介麵包括:

如果您想建立自己的,請使用ansible-runner作為運行 Ansible 的腳本/Python 庫/容器。

在編寫自己的東西之前,請了解這是一個特權應用程序,可以對您的基礎設施做很多事情。您不受已安裝 Web 伺服器的預設安全模型的限制。

例如,您可以有一個作業運行程式守護程序,該程式作為自己的專用使用者執行,與 Web 伺服器執行的使用者分開。這樣,受損的使用者 nginx 不會自動獲得 sudo 權限,您還需要通過一些 API。

也要欣賞隔離正在運行的劇本的可能性。 AWX 選擇實施chroot 風格的作業隔離

一般來說,開發一個安全性、可用的 Web 應用程式對於一個答案來說是一個太大的主題,並且有更好的 Stack Exchange 網站來提供開發主題。研究已經存在的東西。

相關內容