使用 Chef-Vault 实现机密信息管理

  • João Miranda
  • 谢丽

2016 年 2 月 2 日

话题:安全DevOps

Chef-vault是一款以加密数据包为基础构建的Chef工具,可以减少解密密钥在所有用户和基础设施节点之间共享的需求。

在 Chef 基础结构中,加密数据包项是一种常用的机密信息(如密码或 API 密钥)存储方式。问题是,由于数据包是对称加密的,所以加密密钥(共享机密信息)需要分发给所有需要使用加密数据包的各方。

Chef-vault 解决了这个问题,它使用每个需要访问加密数据包的用户和节点的公共密钥加密共享机密信息。由 Chef 服务器管理的每个节点及用户账户都有一个 RSA 密钥对。Chef 服务器存储着公共密钥。Chef 节点和用户工作站存储着私有密钥。

Chef-vault 管理保险库。每个保险库有一个管理员(Chef 用户)和客户端(Chef 节点)的列表。只有这些管理员和客户端可以看到保险库的内容。一个保险库是一个数据包,包含两个数据包项。一个存储包含共享机密信息(比如数据库密码)的加密项。另一个存储管理员和客户端列表以及每个管理员和客户端的非对称加密共享机密信息。

每当 chef-vault 创建一个新的加密数据包,它首先会使用SecureRandom.random_bytes生成一个长为 32 个字节的随机字符串作为共享机密信息。然后,它会检索每个管理员和客户端的公共密钥,用它加密共享机密信息。这个过程减少了分发共享机密信息的需求,提供了一种更简单的方法控制对指定加密数据包项的访问。Chef-vault 还提供了一个 rotate_keys 操作,顾名思义,它会新建一份共享机密信息,并使用所有管理员和客户端的公共密钥加密它。

Chef-vault 有一些局限。至少这一次,它还不能很好地处理自动扩展,还需要人为增加或删除客户端(比如节点),或者像 Peter Burkholder 在一篇有关 chef-vault 的文章中所描述的那样,借助于“可以访问国王之钥的特权节点”。另外,无法替换已提供的密钥机制,不过,chef-vault 3.x.x将会使用一个插件架构来解决这个问题。

机密信息管理是分布式可扩展环境的一个难题。Chef-vault 是一款特定于 Chef 的工具,有好处也有不足。还有其他一些机密信息管理方案,有些是开源的,如 Hashicorp 的Vault或 Square 的Keywhiz,有些是商业的,如Amazon KMSConjur

Nordstrom是 Chef-vault 最初的开发者。该项目已于 2015 年 11 月转移到 Chef 项目之下,因此,有足够的资源维继它的开发。

查看英文原文:Secrets Management with Chef-Vault

安全DevOps