1、模型
Salt使用服务器代理通信模型,服务器组件称为 Salt Master, 代理称为 Salt Minion。
Salt Master负责向Salt Minion发送命令,然后聚合并显示这些命令的结果。单个Salt Master可以管理数千个系统。
saltstack组件如下:
salt master: 中央管理系统,用于将命令和配置发送到在受管系统上运行的Salt minion
salt minion: 管理系统,该系统运行Salt minion,从Salt master接收命令和配置。
执行模块 : 从命令行对一个或多个受管系统执行的命令,用途如下1.实时监控,状态和详细信息。2.一次性命令和脚本。3.部署、critical、更新。
state.sls : 系统配置的声明性或命令式表达。
Grains : 系统变量,Grains是有关地产受管系统的静态信息,包括操作系统,内存和许多其他系统属性。你还可以为任何系统定义自定义grains。
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之间的连接时非异步的。
3、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解密。
4、安全通信
Salt master和Salt minion之前的所有进一步通信都使用AES密钥加密。AES加密密钥根据最新接受的TLS版本使用显示初始化向量和CBC块连接算法。
5、旋转安全密钥
旋转AES密钥用于加密由Salt主服务器发送到Salt minion的作业,并加密与Salt主文件服务器的连接。每次Salt 主服务器重新启动时以及每次使用salt-key命令删除Salt minion密钥时,都会生成并使用新密钥。
旋转密钥后,所有的salt minions 必须重新进行身份验证才能接收更新的密钥。这使AES key 可以在不中断minion连接的情况下旋转。
6、加密信息渠道
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.
7、用户访问控制
在向minions发送命令之前,Salt会对发布者ACL执行一些内部检查,以确保执行该命令的用户具有正确的权限。如果用户被授权对指定目标进行指定命令,这发送该命令。如果不是,则返回错误。Salt还返回预期相应命令行界面的minions列表,因此他知道等待返回的时间。