Ansible 安全最佳實踐
我將把 Ansible 引入我的數據中心,並且我正在尋找一些關於在何處定位控制機器以及如何管理 SSH 密鑰的安全最佳實踐。
問題一:控制機
我們當然需要一台控制機器。控制機器上保存了公共 SSH 密鑰。如果攻擊者可以訪問控制機器,則它可能可以訪問整個數據中心(或 Ansible 管理的伺服器)。那麼是在數據中心配備專用控制機還是遠端控制機(例如我的筆記型電腦遠端連接到數據中心)更好?
如果最佳做法是使用我的筆記型電腦(當然,這可能會被盜,但我可以將我的公鑰安全地線上保存在雲中或離線保存在攜帶式加密設備上),如果我需要使用一些 Web 界面與Ansible,如 Ansible Tower、Semaphore、Rundeck 或 Foreman,需要安裝在數據中心的集中式機器上嗎?如何保護它,避免它成為“單點攻擊”?
問題 2:SSH 密鑰
假設我需要使用 Ansible 來完成一些需要由 root 執行的任務(比如安裝軟體包或類似的東西)。我認為最好的做法不是在受控伺服器上使用 root 使用者,而是為 Ansible 添加一個具有 sudo 權限的普通使用者。但是,如果 Ansible 需要完成幾乎所有任務,則需要通過 sudo 訪問所有命令。那麼,最好的選擇是什麼:
- 讓 Ansible 使用 root 使用者(其公鑰保存在
~/.ssh/authorized_keys
- 使用 sudo 訪問創建專用於 Ansible 的非特權使用者
- 讓 Ansible 使用者通過 sudo 指定密碼來執行每個命令(每個使用 Ansible 控制該伺服器的系統管理員都需要知道該密碼是唯一的)
- 讓 Ansible 使用者通過 sudo 執行每個命令而不指定任何密碼
- 還有其他提示嗎?
堡壘主機(ansible 控制中心)屬於一個單獨的子網。它不應該從外部直接訪問,也不應該從託管伺服器直接訪問!
您的筆記型電腦是最不安全的設備。一封愚蠢的郵件,一個愚蠢的 Flash 漏洞,一個愚蠢的訪客 Wifi,然後它就被加密了。
對於伺服器,根本不允許通過 ssh 進行 root 訪問。許多審計對此嗤之以鼻。
對於 ansible,讓每個管理員在每個目標伺服器上使用自己的個人帳戶,並讓他們使用密碼 sudo。這樣,兩個人之間就不會共享密碼。您可以檢查誰在每台伺服器上做了什麼。個人帳戶是否允許使用密碼登錄、僅允許使用 ssh 密鑰或兩者都需要,這取決於您。
為了澄清ansible 不需要使用單個目標登錄名。每個管理員可以而且應該有個人目標登錄名。
附註:如果帳戶有密碼,請盡量不要創建稱為某個詞的帳戶(例如“ansible”或“admin”或“cluster”或“management”或“operator”)。具有密碼的帳戶唯一好聽的名稱是人名,例如“jkowalski”。只有一個人才能對通過帳戶所做的操作負責,並對不正確地保護他們的密碼負責,“ansible”不能。