在我看来,将客户端添加到厨师服务器的推荐方法 - 或者我对它的理解 - 是有缺陷的。
来自文档:
当厨师客户端运行时,它会检查是否有客户端密钥。如果客户端密钥不存在,则它会尝试“借用”验证客户端的身份以向服务器注册自己。为此,需要将验证客户端的私钥复制到主机并放置在 /etc/chef/validation.pem 中。
那么“验证密钥”基本上就是超级用户凭证,允许拥有它的任何人完全访问厨师服务器?我读得对吗?
当然,正确的模型是客户端生成自己的密钥对,并将公钥提交给厨师服务器。客户端永远不需要访问此超级用户“验证密钥”。
我怎样才能以这种更安全的方式做到这一点?
它并不那么不安全。验证密钥只能用于添加节点所需的几个操作。
例如,如果我尝试使用 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命令创建客户端密钥,但是否将这些密钥分发给客户端取决于您。
安全密钥分发是一个难题。