【发布时间】:2016-06-02 16:25:39
【问题描述】:
我在想,既然我们已经有一个用于访问服务器的秘密文件(ssh 私钥),那么使用这个文件作为保管库的密钥文件会有多大的安全风险?
这样做的好处是我们只需要保护 ssh 私钥,而不必为保管库使用另一个密钥。
【问题讨论】:
我在想,既然我们已经有一个用于访问服务器的秘密文件(ssh 私钥),那么使用这个文件作为保管库的密钥文件会有多大的安全风险?
这样做的好处是我们只需要保护 ssh 私钥,而不必为保管库使用另一个密钥。
【问题讨论】:
我喜欢你减少秘密的想法,但我对使用 ansible 私钥有些担心。
理想情况下,您提到的私钥仅存在于您的管理计算机上,您可以从中运行您的剧本。我的看法是,这个密钥在其他机器/系统中分布得越多,它就越有可能被泄露。 ansible 私钥通常可以访问系统中任何已配置机器上的 root,这使其成为一个非常有价值的秘密。我从不使用 ansible 本身提供 ansible 私钥(无论如何,这将是一种鸡蛋,至少在第一台管理机器上)。
我看到这种方法的一个潜在问题是在本地开发角色时,例如,使用 vagrant。 您需要使用本地管理系统中的私钥来解密秘密并针对您的 vagrant box 运行您的剧本。 此外,从事同一个 ansible 项目的任何其他开发人员都需要在本地使用该私钥进行开发。
我的前提是私钥不离开管理服务器。为了实现这一点,您可以以一种不需要任何秘密解密的方式来开发您的角色,例如本地开发。为每个仅使用非加密假数据的生产组创建一个本地开发dev 对应项。这样你只需要在你的管理机器上解密秘密,而不需要本地的私钥,但这当然会导致你的 ansible 项目的开发工作量更大。
我总是尽可能地尝试使用这种方法,但有时你可能会发现自己仍然需要为你的 vagrant box 解密一些有效的 api 密钥。在某些项目中,您可能不仅希望将您的 ansible playbook 用于生产服务器,还希望在本地为开发人员提供 vagrant box,这通常是您需要解密一定数量的有效机密时。
另外值得一提的是,通过这种方法,生产机密的更改只能使用私钥直接在管理服务器上进行。
总而言之,我认为虽然理论上可以将私钥用作保险库密码,但与额外安全问题带来的开销相比,减少一个秘密的好处太小了。
【讨论】: