saltstack 模型與認證通訊原理

一、模型

  Salt使用服務器代理通訊模型,服務器組件稱爲 Salt Master, 代理稱爲 Salt Minion。算法

Salt Master負責向Salt Minion發送命令,而後聚合並顯示這些命令的結果。單個Salt Master能夠管理數千個系統。數據庫

  saltstack組件以下:api

    salt master: 中央管理系統,用於將命令和配置發送到在受管系統上運行的Salt minion安全

    salt minion: 管理系統,該系統運行Salt minion,從Salt master接收命令和配置。服務器

    執行模塊   : 從命令行對一個或多個受管系統執行的命令,用途以下1.實時監控,狀態和詳細信息。2.一次性命令和腳本。3.部署、critical、更新。
網絡

    state.sls : 系統配置的聲明性或命令式表達。session

    Grains   : 系統變量,Grains是有關地產受管系統的靜態信息,包括操做系統,內存和許多其餘系統屬性。你還能夠爲任何系統定義自定義grains。ssh

    pillars  : 用戶定義的變量。這些安全變量被定義並存儲在Salt Master中,而後使用Master 分配給一個或多個Minions,pillars存儲的數據例如端口、文件路徑、配置參數和密碼之類的指。異步

    top file  : 將Master state.sls 和 Salt Pillar數據發送給Salt minion。
加密

    Runners  : 在Salt master 上執行的模塊,用於執行支持任務。Salt Runners 報告做業狀態,鏈接狀態,從外部api讀取數據,查詢鏈接的Salt minions等。

    Returners : 將Salt minions 返回的數據發送到另外一個系統,例如數據庫。Salt returners can run on the Salt minion or on the Salt master.

    Reactor  : 在 SaltStack環境中發生事件時出發反應。

    Salt Cloud/Salt Virt :  在雲或虛擬機管理程序上提供系統,並當即對其進行管理。

    Salt SSH  : 在沒有Salt minion的系統上經過ssh運行Salt 命令。    

2.、溝通模式

  Salt 使用服務器代理通訊模型。(還提供經過ssh運行無代理的能力。)

  Salt Master負責向Salt minions 發送命令,而後聚合並顯示這些命令的結果。

  Salt使用發佈-訂閱模式與受管系統進行通訊。鏈接由Salt Minion發起,這意味着受控端不須要監聽端口(從而減小攻擊)。Salt Master使用的端口爲4505 和4506,必須打開它們才能接受傳入鏈接。

  4505:全部Salt Minion創建與發佈者端口的持久鏈接,並監聽消息。命令經過此端口異步發送到全部鏈接,這使命令能夠同時在大量系統上執行。

  4506:Salt Minion根據須要,鏈接到服務器,將結果發送到Salt Master,並安全地請求文件和minion 特定的數據值(salt pillar)。Salt Minion 和Salt Master之間的鏈接時非異步的。

三、Salt Minion 認證

  當minion 第一次啓動時,它會在網絡中搜索一個名爲salt的服務器(該配置在/etc/salt/minion能夠配置爲ip或其餘主機名)找到後,minion啓動握手,而後將其公鑰發送給Salt master。

  在初始鏈接以後,Salt minion的公鑰存儲在服務器上,而且必須使用salt-key命令(或經過修改配置文件進行自動認證)在Salt master上接受它。這多是新用戶混淆的根源,由於在接受Salt minion的公鑰以前,Salt 不會提供解碼消息所需的安全密鑰(意味着Salt minion在接受認證以前不會運行任何命令)。

  接受minion 密鑰後Salt master將返回其公鑰以及用於加密和解密Salt master發送的消息的旋轉AES密鑰。返回的AES密鑰使用最初由Salt minion發送的公鑰加密,所以只能由Salt minion解密。

四、安全通訊

  Salt master和Salt minion以前的全部進一步通訊都使用AES密鑰加密。AES加密密鑰根據最新接受的TLS版本使用顯示初始化向量和CBC塊鏈接算法

五、旋轉安全密鑰

  旋轉AES密鑰用於加密由Salt主服務器發送到Salt minion的做業,並加密與Salt主文件服務器的鏈接。每次Salt 主服務器從新啓動時以及每次使用salt-key命令刪除Salt minion密鑰時,都會生成並使用新密鑰。

  旋轉密鑰後,全部的salt minions 必須從新進行身份驗證才能接收更新的密鑰。這使AES key 能夠在不中斷minion鏈接的狀況下旋轉。

六、加密信息渠道

  Salt master 和 Salt minion之間的發佈通訊使用旋轉AES密鑰進行加密。Salt master和Salt minion之間的直接通訊使用每一個會話的惟一AES密鑰進行加密。

  For example, published jobs are encrypted using the rotating AES key, while secure, minion-specific data sent using Salt pillar is encrypted with a unique AES key for each Salt minion and session.

七、用戶訪問控制

  在向minions發送命令以前,Salt會對發佈者ACL執行一些內部檢查,以確保執行該命令的用戶具備正確的權限。若是用戶被受權對指定目標進行指定命令,這發送該命令。若是不是,則返回錯誤。Salt還返回預期相應命令行界面的minions列表,所以他知道等待返回的時間。

相關文章
相關標籤/搜索