saltstack 自動認證

原文連接: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中actpend的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功能



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章