自动化签署salt的minion的key

经验证可用:

在salt-master上的配置如下:

文件一:/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 False

def 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

然后重启master就可以了;

链接:http://ahui.mt0577.com/2019/10/07/salt-key%e7%ae%a1%e7%90%86%e4%b9%8b%e8%87%aa%e5%8a%a8%e9%aa%8c%e8%af%81/

原文如下:

++++++++++++++++++++++++++++

salt key管理之自动验证

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 False

def 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功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值