Puppet 安全和网络拓扑

Puppet 安全和网络拓扑

背景:

我终于抽出一些时间来加入 21 世纪并关注 Puppet。

目前,我们在办公室内部的存储库中对所有服务器配置进行版本控制。当需要进行更新时,更改将重新签入存储库并手动推送到相关机器。这通常意味着使用 SFTP 连接到远程机器,然后从 shell 中将文件移动到位(具有相关权限)。

因此我希望 Puppet 能够成为我们已经拥有的功能的一个简单但令人惊奇的扩展。

现在,我考虑我们目前必须合理安全的流程。假设我们的内部网络始终比数据中心的公共网络相对更安全。

  • 这个过程总是单向的。变化从安全环境转移到不安全环境,而不是反过来。

  • 主存储位于最安全的地方。通过窃取配置或发送恶意修改而导致的入侵风险大大降低。

问题:

据我了解,Puppet 服务器/客户端模型是客户端直接从服务器轮询并获取更新。流量经过 SSL 封装,因此无法被拦截或欺骗。但它与我们目前的做法不同,因为 Puppet 服务器需要托管在公共位置。要么集中托管,要么为我们维护的每个数据中心站点都托管一个。

所以我想知道:

  • 我是否对从推送到拉取的转变过分担心?

  • 我是否不必要地担心将所有这些信息集中存储在公共网络上?

  • 其他人如何维护多个网络——每个站点有单独的服务器?


2009年7月30日更新:

我想我的另一个大的担心的是将如此必须的信任放在一台机器上。操纵者将被防火墙保护等。但即便如此,任何具有监听服务的公共机器都有一定规模的攻击面。

假设主控有权更新任何一个傀儡客户端上的任何文件,那么它的妥协最终将导致其所有客户端的妥协。 可以这么说,“国王对王国”。

  • 这个假设正确吗?

  • 有什么方法可以缓解吗?

答案1

由于我有时会将密码存储在模块中的变量中,以便能够部署应用程序而无需手动完成配置,这意味着我无法将我的 puppet repo 放在公共服务器上。这样做意味着攻击 puppetmaster 将允许获取我们所有服务器上所有不同应用程序的一些应用程序或数据库密码。

因此,我的 puppetmaster 位于我们办公室的私有网络中,并且我不在服务器上运行 puppetd ​​守护程序。当我需要部署时,我使用 ssh 从私有网络连接到服务器,创建隧道并远程调用 puppetd。
诀窍不是设置远程隧道和 puppet 客户端来连接到 puppetmaster,而是设置一个接受的代理http 连接并可以在私有网络上访问 puppetmaster 服务器。否则 puppet 将因主机名与证书冲突而拒绝拉取

# From a machine inside privatenet.net :
ssh -R 3128:httpconnectproxy.privatenet.net:3128 \
    -t remoteclient.publicnetwork.net \
    sudo /usr/sbin/puppetd --server puppetmaster.privatenet.net \
    --http_proxy_host localhost --http_proxy_port 3128 \
    --waitforcert 60 --test –-verbose

它对我有用,希望它能帮助你

答案2

我们有两个站点,分别是我们的办公室和我们的 colo。每个站点都有自己的 puppetmaster。我们设置了一个具有以下结构的 svn 存储库:

root/office
root/office/manifests/site.pp
root/office/modules
root/colo
root/colo/manifests/site.pp
root/colo/modules
root/modules

每个站点下的模块目录都是 svn:externals 目录,返回到顶级模块目录。这意味着它们共享完全相同的模块目录。然后,我们确保我们编写的绝大多数类都在模块目录下,并由两个站点使用。这有一个好处,就是迫使我们进行通用思考,而不是将类与特定站点绑定在一起。

至于安全性,我们将 Puppetmaster(以及我们网络的其余部分)托管在防火墙后面,因此我们并不担心集中存储配置。Puppetmaster 只会将配置发送到它信任的主机。显然,您需要确保该服务器的安全。

答案3

我无法判断你的偏执有多必要,这在很大程度上取决于你的环境。但是,我可以自信地说,你现有配置的两个主要点仍然适用。你可以确保你的更改从安全环境(办公室的存储库)转移到不太安全的环境,无论你的 puppetmaster 位于何处。你将流程从 SFTP 连接到一堆服务器并手动将文件放到位更改为 SFTP 连接到你的 puppetmaster 并让 Puppet 分发文件并将它们放在正确的位置。你的主存储仍然是存储库,并且你的风险得到了缓解。

我不认为推送或拉取本质上比其他模型更安全。Puppet 在保护传输中的配置以及对客户端和服务器进行身份验证以确保双向信任方面做得很好。

至于多个网络 - 我们通过中央“主”操纵者来处理它,每个位置的卫星操纵者都充当中央操纵者的客户端。

答案4

尽管你说的是“外部”,但我真的怀疑任意的人都需要连接到你的傀儡大师。你总是可以将 VPN 加入其中。我的一个朋友曾经问我“如果连接是安全的,你还需要担心协议的安全性吗?”虽然我不同意这种态度,但额外的一层永远不会有害,而且肯定会对我个人的偏执产生奇效。此外,隧道隧道很有趣。

相关内容