You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kitchen测试中无法用未加密数据袋Stub Chef-Vault数据的问题

解决Kitchen-EC2驱动下测试未加密Chef-Vault数据袋的问题

先说说我的环境配置,方便大家参考:

  • Chef Development Kit Version: 2.4.17
  • chef-client version: 13.6.4
  • delivery version: master (73ebb72a6c42b3d2ff5370c476be800fee7e5427)
  • berks version: 6.3.1
  • kitchen version: 1.19.2
  • inspec version: 1.45.13

问题背景

我最近在尝试用kitchen-ec2驱动测试Chef-Vault的功能,目标是创建未加密的数据袋来验证基础逻辑。之前针对vagrant驱动的解决方案完全不管用,现在我搞不清楚到底是Kitchen在自动尝试启用Vault加密,还是它没有正确解析我设置的未加密数据袋配置。

一步步排查解决

我折腾了一阵,总结出几个有效的排查和解决步骤:

1. 强制在Kitchen配置里指定未加密模式

首先要在.kitchen.yml的provisioner块里明确告诉Chef Client不要启用Vault加密,直接明文处理数据袋。添加这些配置:

provisioner:
  name: chef_zero
  client_rb:
    chef_vault:
      default_mode: 'default'  # 强制使用默认的明文模式
      unencrypted_keys: ['*']  # 允许所有数据袋和密钥以明文加载

如果你是通过角色或者环境属性来配置Chef-Vault,一定要检查这些配置里有没有强制加密目标数据袋的规则,要是有的话先注释掉。

2. 确保数据袋是纯明文结构

不要用chef-vault create这类命令生成加密的数据袋项,直接在data_bags目录下手动创建明文JSON文件,结构要像这样:

data_bags/
  my_test_bag/
    plain_item.json  # 这个文件就是普通的JSON,没有Vault加密的嵌套结构

如果之前生成过加密的数据袋或者对应的keys数据袋,记得全部删除,避免Kitchen加载到旧的加密内容。

3. 查看EC2实例上的Chef日志找线索

执行kitchen converge之后,登录到EC2实例,查看/var/log/chef/client.log,重点搜索这些关键字:

  • chef_vault:看看日志里有没有关于加密模式的输出,确认是否是我们设置的default模式
  • data_bag:检查数据袋是被当作明文加载,还是在尝试解密
    如果日志里出现ChefVault::Exceptions::KeysNotFound这类错误,说明Chef还是在尝试解密数据袋,这时候要回头检查client.rb或者角色里的Vault配置有没有覆盖我们的明文设置。

4. 让Cookbook兼容明文/加密两种模式

如果你的Cookbook里依赖了chef-vault,不要直接硬编码调用chef_vault_item,改成判断模式再加载:

# 在Cookbook的配方里这样处理
if node['chef_vault']['default_mode'] == 'default'
  my_item = data_bag_item('my_test_bag', 'plain_item')
else
  my_item = chef_vault_item('my_test_bag', 'encrypted_item')
end

这样不管是测试环境用明文,还是生产环境用加密,都能正常运行。

5. 清理Kitchen缓存后重新测试

有时候之前的缓存会导致配置不生效,先执行这些命令清理:

kitchen destroy
rm -rf .kitchen/
kitchen create
kitchen converge

然后再看是否能正常加载未加密的数据袋。

内容的提问来源于stack exchange,提问作者Said Masoud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:20:37