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