厨师(Chef)chef-validator.pem安全性。

8

您好,我正在使用Chef在离线位置设置机器集群。如果其中一台机器被盗,攻击者通过拥有chef-validator.pem文件可以对我的chef-server或其他节点造成什么样的损害?除了通过Chef访问什么其他东西?谢谢!

5个回答

15

在最近一期的"Foodfight"节目中,讨论了在Chef中管理“机密信息”的问题。强烈推荐收看:

在初始化新的Chef客户端时,knife bootstrap操作会上传此密钥。拥有此密钥可以使客户端注册到您的chef服务器。实际上,它的唯一功能就是这个,一旦客户端运行起来,验证密钥就不再需要。

但是这可能被滥用...... 正如@cbl所指出的,如果未经授权的第三方获取了此密钥,则可以创建能够查看普通客户端可以查看的Chef服务器中所有内容的新客户端。它可以理论上用于对您的Chef服务器进行拒绝服务攻击,通过向其发送注册请求来淹没它。

"Foodfight"小组建议一个简单的解决方案。在所有节点上启用chef-client cookbook。它包含一个"delete_validation" recipe,将删除验证密钥并降低风险暴露。


5
验证器密钥用于在Chef服务器上创建新的客户端。
一旦攻击者获得它,他可以假装自己是基础架构中的一个节点,并访问任何节点拥有的相同信息。
例如,如果您在未加密的数据包中具有敏感信息,则他将能够访问该信息。
基本上,他将能够运行来自任何菜谱的任何食谱,执行搜索(并访问所有其他节点的属性),读取数据包等等。
在编写菜谱和填充服务器中的其他对象时,请记住这一点。您还可以以某种方式监视chef服务器是否存在任何可疑的客户端创建活动,如果您有任何理由认为验证器密钥已被盗取,请吊销它并发出新密钥。
定期轮换密钥也可能是个好主意。

1
是的!这就是为什么你应该始终在节点上运行chef-client::delete_validator。 - Henry Finucane
1
考虑使用 chef-vault 加密敏感信息。这进一步降低了未经授权访问 chef 服务器时的风险。 - Mark O'Connor
1
+1密钥轮换的想法。如果Chef节点位于网络之外,这将使旧的验证密钥无效。 - Mark O'Connor

5

从Chef 12.2.0版开始,验证密钥不再是必需的:

https://blog.chef.io/2015/04/16/validatorless-bootstraps/

你可以在工作站上删除验证密钥,然后knife将使用你的用户凭据创建节点和客户端。

此外,当创建节点时,你提供的run_list和environment也会应用到该节点,这是一些很好的特性。不再依赖于chef-client读取first-boot.json文件,并且运行必须在引导过程结束时node.save才能创建节点。


2
基本上,chef-client使用两种模式的身份验证连接服务器: 1) 组织验证器(validator.pem) 2) 用户验证器(user.pem)
除非这两个密钥正确组合,否则chef-client无法与chef服务器进行身份验证。

2
他们甚至可以通过以下步骤使用窃取的密钥将任何节点连接到Chef服务器。
  1. Copying and pasting the validator key into /etc/chef folder on any machine

  2. Creating client.rb file with the following details

    log_location     STDOUT
    chef_server_url  "https://api.chef.io/organizations/ORGNAME"    
    validation_client_name 'ORGNAME-validator'                      
    validation_key      '/etc/chef/validater.pem'                   
    

3:运行 chef-client 以连接到 Chef 服务器


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接