原文連接:http://pengyao.org/salt-autosign-01.html
Salt之AutoSign那點事
Salt基於安全考慮, Minion在連接Master時, 需要在Master端先接受Minion的Pub Key, 之後Minion才能解密Master發過來的指令.
如果Minion數目較少, 可以直接使用salt-key來管理Minion的keys. 如果規模較大, 維護Key將變得麻煩起來. 爲此Salt提供瞭如下幾種AutoSign的方案:
open_mode
默認值: False
使用方法: Master配置文件中增加 open_mode: True
, 並重啓Master以使配置生效
推薦指數: -1
說明: 該選項開啓後, Master將關閉Auth功能, 並告訴master接受所有認證. 生產環境中強烈不推薦使用該選項
auth_accept
默認值: False
使用方法: Master配置文件中增加 auth_accept: True
, 並重啓Master以使配置生效
推薦指數: 0
該選項開啓後, Master將自動接受所有minion發過來的Pub Key. 生產環境中不推薦使用該選項
autosign_file
默認值: 無
使用方法: Master配置文件中增加 autosign_file: /etc/salt/autosign.conf
, 並重啓Master以使配置生效. 之後編輯autosign_file, 增加autosign minion_id匹配規則(無需重啓Master)
推薦指數: 5
該選項開啓後, master接收到minion的Pub Key後, 會逐行讀取autosign_file(所以更新autosign_file無需重啓Master), 一旦匹配, 直接Accept. minion_id匹配規則支持字符完全匹配, Glob匹配, 正則匹配.
如想匹配minion-01.example.com
, 則如下條目均可匹配:
minion-01.example.com # 字符完全匹配minion-*.example.com # Glob匹配minion-\d+\.example\.com # 正則匹配
autosign_time
默認值: 120 (單位: 分)
使用方法: 該選項只是指定下autosign_dir目錄下minion_id文件有效期爲多長時間, 可以根據實際情況調整該參數. 想進行autosign時, 只需要在autosign_dir目錄(默認: /etc/salt/pki/master/minions_autosign/)下創建需要自動Accept的minion_id文件即可. 在文件創建後的autosign_time時間內, minion進行auth時會直接Accept並自動刪除本文件. 文件超過有效期, 將自動刪除本文件.
推薦指數: 8
相對於autosign_file參數, 該方法支持有效期功能, 劣勢是隻支持字符完全匹配.
Reactor
適用等級: 高
推薦指數: 10
Salt底層構建了Event BUS, 操作均會產生Event, 如Auth相關, 就會產生tag爲salt/auth的event. 所以可以基於Reactor構建一個autosign方案, 靈活性要強與Salt內置的autosign方案.
直接上Demo:
/srv/reactor/autosign.sls
#!py import logging log = logging.getLogger(__name__) def check_autosign(minion_id): if minion_id.endswith('example.com'): return True return Falsedef run(): ''' Autosign demo by reactor ''' minion_id = data['id'] if data.get('act') == 'pend' and check_autosign(minion_id): log.info('I will accept {0} key by reactor'.format(minion_id)) return { 'minion_add': { 'wheel.key.accept': [{ 'match': minion_id}] } } return {}
Minion在啓動連接Master時, 會將自己的Pub Key發送給Master, Master未Accept時, 會產生一條playload中act爲pend的event. 可以自定義check_autosign函數, 進行判斷該minion是否需要autosign, 如果需要, 則藉助wheel的key模塊進行自動Accept該minion public key.
/etc/salt/master.d/reactor.conf
reactor: - 'salt/auth': - /srv/reactor/autosign.sls
發現tag爲salt/auth的event, 則觸發/srv/reactor/autosign.sls的執行, 從而實現AutoSign功能