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

使用Puppet写入hiera-eyaml解密内容失败,求解决方案

问题描述

我已经用hiera-eyaml加密了配置内容,在Hiera文件中以如下形式引入:

mymodule::config_file: ENC[PKCS7,...]

接着用这段Puppet代码尝试把解密后的字符串写入文件:

class mymodule (
  String $config_file
) {
  file { '/etc/agent_config.json':
    content => $config_file,
    mode    => '0644',
  }
}

预期输出文件是解密后的内容,但实际写入的还是加密的eYAML字符串。想知道这种操作在Puppet里是不是无法实现?

补充信息

  1. 用eyaml edit查看加密文件内容显示正常,示例:
itglue::fireeye::fireeye_config: DEC(1)::PKCS7[{
  "serverlist": {
    "servers": [
      ...
    ]
  }
}]!
  1. 我的hiera.yaml配置:
---
:backends:
  - yaml
  - eyaml
:yaml:
  :datadir: /etc/puppet/hiera/hieradata
:eyaml:
  :datadir: /etc/puppet/hiera/hieradata
  :pkcs7_private_key: /var/lib/puppet/keys/private_key.pkcs7.pem
  :pkcs7_public_key:  /var/lib/puppet/keys/public_key.pkcs7.pem
:hierarchy:
  - secure
  - "%{::clientcert}"
  - "node_role/%{::node_role}"
  - "env/%{::environment}"
  - "node_types/%{nodetype}"
  - global
:logger: console
解决方案

这种操作完全可以实现,问题出在Hiera配置和调用逻辑上,按以下步骤排查修复:

1. 调整Hiera后端优先级

你的hiera.yaml把yaml放在eyaml前面,如果加密内容存放在yaml格式文件(比如secure.yaml)中,Hiera会直接读取原始加密字符串,不会触发eyaml解密。需把eyaml移到后端列表最前面:

:backends:
  - eyaml
  - yaml

这样Hiera会优先用eyaml后端处理所有文件,即使是yaml后缀的文件,也会自动识别并解密其中的ENC[...]块。

2. 检查变量类型约束

你在类里把$config_file声明为String类型,虽然解密后的JSON本质是字符串,但如果解密过程中出现类型解析异常,可能导致Puppet直接传递原始加密串。可以暂时去掉类型约束测试:

class mymodule (
  $config_file
) {
  file { '/etc/agent_config.json':
    content => $config_file,
    mode    => '0644',
  }
}

3. 验证Hiera lookup解密结果

在Puppet master上执行以下命令,手动测试变量是否能正确解密:

puppet lookup mymodule::config_file --node <你的节点名> --environment <环境名>

如果输出是解密后的JSON内容,说明Hiera配置没问题;如果还是加密字符串,继续检查:

  • 确认目标层级文件(如secure.yaml)的加密格式正确,确实是ENC[PKCS7,...]格式
  • 检查Puppet运行用户(通常是puppet)对私钥文件/var/lib/puppet/keys/private_key.pkcs7.pem的读取权限,确保权限为0600,属主属组为puppet:puppet

4. 确认版本兼容性

确保hiera-eyaml版本与Puppet、Hiera版本兼容,避免因版本不匹配导致解密失败。可通过以下命令查看版本:

gem list hiera-eyaml
puppet --version

内容的提问来源于stack exchange,提问作者Joseph Quinn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:50:31