理解SaltStack(3) – 通信与安全

本节介绍Salt通信模型以及认证和安全性的基本概述。

架构模型

salt使用server-agent通信模型,(可以作为独立的单台服务器管理工具,也能无代理通过SSH工作)。这个服务器组件称为salt master,代理称为salt minion。

salt master负责发送命令给salt minons,然后聚合显示这些命令的结果。单个salt master能管理数千个系统。

通信模型

Salt使用发布-订阅模式与受管系统通信。连接由salt minion发起,意味着你不需要在那些系统上监听任何端口来接收请求(从而减少攻击的可能性)。salt master使用4505和4506端口,必须向minion开放接收请求。

  • Publisher: (4505端口)所有的salt minions与publisher端口建立持久连接。通过此端口在所有的连接上异步发送命令,这使得能够在大量的系统上同时执行命令。
  • Request Server:(4506端口) salt minions连接request server,当需要时发送结果给salt master和安全地请求文件,minion特定的数据值(称为salt pillar)。salt master和salt minion之间的连接是1:1的,且不是异步。
  • SALT MINION认证

    当minion首次启动时,通过网络搜索名称为salt的系统(不过这很容易更改为一个IP或者其它的主机名)。当发现后,minion发起一个握手然后发送它的公钥给salt master。

    此次连接发起后,salt minion的公钥就存储在了服务器上,然后必须在salt master上执行salt-key命令接受这个minion(或者通过一些自动机制)。当salt minion的公钥被接受时,salt master才会提供解码消息所需的安全密钥(意味着在minion的key还没被接受时,minion不会运行任何命令)。
    minion的key被接受后,salt master给minion返回公钥和AES key,用来加密和解密由master发送的消息。AES key使用minion发送过来的公钥来加密,因为AES key只能由minion解密。

    安全通信

    salt master和salt minion接下来之间的通信都是使用轮换的AES key来加密。AES加密密钥使用TLS的显式初始化向量和CBC块链接算法。

    轮换的安全密钥

    轮换的AES密钥用来加密由salt master发送给salt minion的作业和加密与salt master文件服务器的连接。每次salt master重启和每次salt minion的密钥被删除都会使用salt-key命令来重新生成一个新的密钥。
    当新密码生成后,所有的salt minions必须重新发起认证请求来接收更新的AES密钥。这就使得AES的更新不会中断minion的连接。

    加密通信信道

    Salt master和Salt minion之间的发布通信使用轮换AES密钥加密。Salt master和Salt minion之间的直接通信使用唯一AES密钥来加密每个会话。
    例如,发布作业使用轮换AES密钥来加密,然后minion特定的数据(如salt pillar)使用唯一的AES密钥加密。

    用户访问控制

    在一个命令发送给minions之前,salt对Publiser ACL执行一些内部的检查以确保用户有权限执行当前的命令。如果用户被授权对指定的目标运行指定的命令,则发送命令。否则返回错误。

    标签:SaltStack 发布于:2019-11-20 21:05:37