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列表,所以他知道等待返回的时间。

相关文章
相关标签/搜索