我对 vagrant 很陌生,对它(和 puppet)了解更多的人是否能够解释 vagrant 如何处理在制作与真实生产机器处理相同节点定义的 vagrant 测试机时所需的 ssl 证书?
我在主/客户端模式下运行 puppet,我希望启动我的 puppet 生产节点的 vagrant 版本,主要是为了测试新的 puppet 代码。
如果我的生产机器是 sql.domain.com,我会启动一个 vagrant 机器,比如 sql.vagrant.domain.com。在 vagrant 文件中,我然后使用 puppet_server provisioner,并给 puppet.puppet_node 条目“sql.domain.com”以获取相同的 puppet 节点定义。
在 puppet 服务器上,我在该节点条目上使用类似 /*.sql.domain.com/ 的正则表达式,以便流浪机器和真实机器都在 puppet 服务器上获得该节点条目。
最后,我在 puppet 的 autosign.conf 中为 *.vagrant.domain.com 启用了自动签名,因此 vagrant 机器得到了签名。
到目前为止,一切都很好...
但是:如果我网络上的一台机器被 root,比如 unimportant.domain.com,如何阻止攻击者将该机器上的主机名更改为 sql.vagrant.domain.com,删除旧的 puppet ssl 证书然后使用给定节点名称 sql.domain.com 重新运行人偶?新的 ssl 证书将由 puppet 自动签名,匹配节点名称正则表达式,然后这个被黑的节点将获得所有用于 sql 机器的有用信息?!
我能想到的一种解决方案是避免自动签名,并将真实生产机器的已知 puppet ssl 证书放入 vagrant 共享目录,然后让 vagrant ssh 作业将其移动到位。这样做的缺点是我最终将每台生产机器的所有 ssl 证书都放在一个 git repo(我的 vagrant repo)中,从而在每个开发人员的机器上——这可能是也可能不是问题,但听起来不像这样做的正确方法。
tl;dr:其他人如何处理用于开发或测试生产机器克隆的 vagrant & puppet ssl 证书?
在这里为可能遇到类似查询的其他人提供答案。我最终在主机上使用后路由伪装 (nat) 在仅主机网络安排中使用 vagrant,以使仅主机网络也能与外界联系。
有一个 vagrant puppetmaster,它使用自动签名 - 假设它在它自己的仅主机(vboxnet0)网络上与我正在为其编写代码的任何 vagrant puppet 客户端,它消除了我遇到的大部分安全问题。
对于生产,真正的(非流浪者)puppetmaster 只有 git 的生产分支,并且不允许任何自动签名。