使用 Chef-server 的“验证密钥”的正确方法是什么?

Soc*_*cio 1 security chef

在我看来,将客户端添加到厨师服务器的推荐方法 - 或者我对它的理解 - 是有缺陷的。

来自文档

当厨师客户端运行时,它会检查是否有客户端密钥。如果客户端密钥不存在,则它会尝试“借用”验证客户端的身份以向服务器注册自己。为此,需要将验证客户端的私钥复制到主机并放置在 /etc/chef/validation.pem 中。

那么“验证密钥”基本上就是超级用户凭证,允许拥有它的任何人完全访问厨师服务器?我读得对吗?

当然,正确的模型是客户端生成自己的密钥对,并将公钥提交给厨师服务器。客户端永远不需要访问此超级用户“验证密钥”。

我怎样才能以这种更安全的方式做到这一点?

Tim*_*ter 5

它并不那么不安全。验证密钥只能用于添加节点所需的几个操作。

例如,如果我尝试使用 Chef 验证器密钥删除节点:

$ knife node delete -y foo \
    -u chef-validator \
    -k ~/.chef/chef-validator.pem \
    -s http://chef-server:4000

ERROR: You authenticated successfully to http://chef-server:4000 as chef-validator but you are not authorized for this action
Response:  You are not the correct node (auth_user name: chef-validator, params[:id]: foo), or are not an API administrator (admin: false).
Run Code Online (Sandbox Code Playgroud)

最佳实践是在节点加入 Chef 服务器后删除validation.pem 文件。

要实际回答这个问题,您可以使用该knife client create命令创建客户端密钥,但是否将这些密钥分发给客户端取决于您。

安全密钥分发是一个难题。