如今,有许多配置管理软件选项(Chef、Puppet、CFEngine、Ansible……)都提供了一种架构,其存储库位于中央服务器上,客户端使用 TCP/IP 与服务器通信。这种架构要求整个客户端网络能够与服务器通信,并使服务器面临威胁,因为它是任何攻击者都极有可能攻击的目标。
据我了解,上述工具能够使用私钥加密对配置项进行签名。但是签名密钥是服务器的密钥,存储在服务器上。如果配置管理服务器受到攻击,则整个网络都可能受到攻击。
有没有办法可以避免“服务器被攻陷=整个网络被攻陷”的风险?
我想到的是,在将配置上传到服务器之前,使用个人私钥对配置进行签名。每个管理员都会有自己的私钥。
是否有任何常见的配置管理解决方案提供这样的功能,或者是否有不同的方法来减轻上述风险?
答案1
我想到的是,在将配置上传到服务器之前,使用个人私钥对配置进行签名。每个管理员都会有自己的私钥。
这基本上就是机密静止式解决方案所做的(列表在底部),但它们通常在主服务器上运行。Thomas A. Limoncelli 基本上认为,是的,主服务器仍然是机密方面的 SPOF,但如果您首先拥有该盒子的 root 访问权限来获取代码,那么您已经很满足了:无论如何,您都可以使用主服务器做任何您想做的事情。
但是,使用一些工具,您可以修改配置管理代码,以便在每次运行工具时使用无密码的受信任 GPG 或类似程序解密秘密。
Puppet 还具有节点加密,它基于代理证书进行加密。我相信其他工具也有类似的解决方案。
丹尼尔·萨默菲尔德 (Daniel Somerfield) 对此有一个很好的演讲,名为“乌龟一直往下”总结不同的工具,并进行跟进示例代码和不同方法的回顾。
各种静态机密解决方案列表