Security 阻止Chef客户端访问服务器上的所有数据

Security 阻止Chef客户端访问服务器上的所有数据,security,chef-infra,Security,Chef Infra,目前,我正在从事一个项目,我们管理自己的验收和生产系统,但开发和测试系统由外部各方管理。我们必须假设他们在系统上拥有完全的根访问权限,从而可以访问Chef客户端私钥(client.pem) 这使第三方可以访问我们的Chef服务器,我们也可以在那里存储生产凭证 我尝试将dev/tst系统放在不同的Chef环境中,并将凭据存储在环境中,而不是数据包中。但是,我发现Chef客户端可以更改自己的环境,因此将客户端切换到生产环境相对容易,从而可以访问这些凭据 通过使用加密的数据包和一些选择性的密钥分发,我

目前,我正在从事一个项目,我们管理自己的验收和生产系统,但开发和测试系统由外部各方管理。我们必须假设他们在系统上拥有完全的根访问权限,从而可以访问Chef客户端私钥(client.pem)

这使第三方可以访问我们的Chef服务器,我们也可以在那里存储生产凭证

我尝试将dev/tst系统放在不同的Chef环境中,并将凭据存储在环境中,而不是数据包中。但是,我发现Chef客户端可以更改自己的环境,因此将客户端切换到生产环境相对容易,从而可以访问这些凭据

通过使用加密的数据包和一些选择性的密钥分发,我们可以建立一个方案,其中所有的开发设备箱都有用于开发设备数据包的共享密钥,用于测试数据包的测试设备箱等。然而,这是非常麻烦和容易出错的


有没有办法阻止经过身份验证的Chef客户端访问Chef服务器上的所有数据?

不幸的是,只有商业版的Enterprise Chef才能做到这一点。

单独的Chef服务器是最简单的解决方案(如果您使用private Chef,您可以创建多个功能相同的组织)

话虽如此。。。在属性中存储未加密的秘密只是一个坏主意。使用加密数据包有帮助,但我认为最好的解决方案是使用chef vault:

它巧妙地使用chef客户端的公钥来加密数据,并确保只有经过授权的节点才能访问机密(密码、密钥、产品代码等)

一个相关问题:


同意chef vault是一个很好的解决方案。但是,很多东西仍然可以被所有的客户端读取。@StephenKing当然可以,这就是外围防御的作用(用户密码和客户端密钥)。它们防止匿名或随意访问。要正确保护凭据,必须使用加密。一旦你习惯了,chef vault就可以直接使用了。