尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
BlackBox 集成 Puppet:使用 GPG 加密密钥管理 SSL 证书与 Hiera 敏感数据实战指南
密码学开发工具应用安全DevOps【免费下载链接】blackboxSafely store secrets in Git/Mercurial/Subversion项目地址https://gitcode.com/gh_mirrors/bl/blackbox点击查看免费下载BlackBox 是一款将敏感文件以 GPG 加密形式安全存储在 Git/Mercurial/Subversion 等版本控制系统中的工具而 Puppet 是业界最流行的配置管理平台之一。本文围绕仓库内 docs/with-puppet.md 官方指南系统讲解如何将 BlackBox 与 Puppet 集成一类场景是整文件加密SSL 证书、私钥等在发布到 Puppet master 时解密另一类场景是小字符串加密密码、API Key通过加密的 hiera YAML 文件按需读取。读完本文你将掌握两种集成模式的完整配置步骤、Puppet 代码写法、以及底层blackbox_postdeploy解密流程与运维要点。为什么需要把 BlackBox 引入 Puppet 环境Puppet 使用声明式的资源描述如file {}来管理被管节点的状态而 Puppet 的模块仓库modules与 hiera 数据仓库通常都放在 VCS 中。一旦这些仓库中包含 SSL 私钥、数据库密码、API Key 等敏感数据任何能够克隆仓库的人都可能读取到明文风险极高。BlackBox 的思路是只把.gpg密文提交进仓库明文只在需要的时刻、在受控的机器上解密。将其与 Puppet 结合后可以实现证书/私钥类整文件仓库中保存加密文件发布新版本到 Puppet master 时统一解密Puppet 通过puppet:///文件服务分发密码/Key 类小字符串仓库中保存加密后的 YAML如blackbox.yaml.gpg解密后接入 hieraPuppet 代码用hiera()函数取值自动化解密利用无口令 GPG 子密钥让 Puppet master 或 CI 无需交互即可解密全部文件对应blackbox_postdeploy命令。关于黑盒加密的底层原理多管理员公钥、多密钥可解密等可参考 docs/encryption.md完整的用户操作流程参见 docs/user-overview.md。方案一整文件加密SSL 证书与私钥对于 SSL 证书、私钥这类整体性文件BlackBox 将其视为普通文件处理在把新版本推送到 Puppet master 的任意时刻对它们进行解密。文件名与存放约定以一个名为secret_file.key的加密文件为例其三态命名规则如下形态路径明文文件modules/${module_name}/files/secret_file.key加密文件modules/${module_name}/files/secret_file.key.gpgPuppet 视角puppet:///modules/${module_name}/secret_file.key关键点Puppet 的source引用的是不含.gpg后缀的路径因为 Puppet 文件服务会自动将puppet:///modules/module/file映射到模块目录的files/file下而解密后的明文恰好放在该位置。Puppet 资源声明示例file { /etc/my_little_secret.key: ensure file, owner root, group puppet, mode 0760, source puppet:///modules/${module_name}/secret_file.key, # No .gpg }这段代码把模块中的secret_file.key分发到被管节点的/etc/my_little_secret.key属主root、属组puppet、权限0760。文件内容来自已解密文件因此证书、私钥等二进制内容也能原样分发——这正是 BlackBox 相对 hiera-eyaml 的优势之一无需 ASCII 化转义。发布流程何时解密按照 docs/encryption.md 中描述的 Stack Exchange 实践CI 系统把代码变更推送到 Puppet master 后master 上执行blackbox_postdeploy或blackbox decrypt --all --overwrite一次性解密所有文件。这样每次发布新版本时仓库中的.gpg文件被解密为明文Puppet master 再通过文件服务提供给 agent 拉取。bin/blackbox_postdeploy 脚本给出了这一流程的底层实现要点change_to_vcs_root prepare_keychain while IFS read 99 -r unencrypted_file; do encrypted_file$(get_encrypted_filename $unencrypted_file) decrypt_file_overwrite $encrypted_file $unencrypted_file cp_permissions $encrypted_file $unencrypted_file ... done 99$BB_FILES即从.blackbox/blackbox-files.txt注册文件清单逐行读取文件名将每个.gpg密文解密覆盖为明文并复制权限。该脚本还支持可选参数[GROUP]用于把解密结果chgrp到指定组例如puppet组并chmod gr方便 Puppet master 进程读取。这正是整文件方案中“每次推送新版本时解密”的标准做法。方案二小字符串接入 hiera密码与 API Key对于密码、API Key 这类短字符串更合适的做法是把它们集中写进一个加密的YAML 文件然后通过 hiera 提供给 Puppet。官方推荐的加密数据文件名为blackbox.yaml。步骤 1修改 hiera 搜索层级编辑 Puppet 的hiera.yaml把blackbox加入:hierarchy:搜索列表:hierarchy: - ... - blackbox - ...这样 hiera 在查找数据时就会依次搜索包括blackbox在内的层级最终落到blackbox.yaml文件。步骤 2在 blackbox.yaml 中写入敏感数据--- module::test_password: my secret password这里的键名采用module::key的层级命名方式值为密码明文。注意仓库中提交的应是blackbox.yaml.gpg通过blackbox file add blackbox.yaml加密注册后明文blackbox.yaml会被删除并加入.gitignore详见 docs/file-ops.md。在 Puppet master 上执行blackbox_postdeploy后明文blackbox.yaml才会出现在 hiera 数据目录如/etc/puppet/hieradata/中。步骤 3在 Puppet 代码中通过 hiera() 取值$the_password hiera(module::test_password, fail) file {/tmp/debug-blackbox.txt: content $the_password, owner root, group root, mode 0600, }hiera(module::test_password, fail)中的第二个参数fail是默认值若层级中找不到该键则返回fail。上例把密码写入/tmp/debug-blackbox.txt权限0600而$the_password变量本身可在任意需要字符串的位置使用。提示Puppet 4 之后的版本推荐使用lookup(module::test_password)替代hiera()但两种写法在语义上等价hiera()仍是官方指南采用的写法。自动化解密的关键无口令 GPG 子密钥与 role account无论是整文件还是 hiera 方案Puppet master 都需要在无人值守的情况下解密而 GPG 私钥默认要求口令。BlackBox 的解决方案是创建无口令的 GPG 子密钥subkey仅存放在需要解密的机器上。完整配置流程记录在 docs/role-accounts.md在安全主机SECUREHOST上为角色账户生成主密钥带口令与无口令加密子密钥gpg --homedir . --edit-key svc_deployacct gpg addkey # 选择 (6) RSA (encrypt only) gpg key 2 # 选中新子密钥 gpg passwd # 为主密钥输入口令后给子密钥设置空口令 gpg save把生成的 keyring 安全导出、传输到 Puppet masterNEWMASTER并导入到角色账户的~/.gnupg在仓库中把该角色密钥登记为 adminblackbox_addadmin $KEYNAME /path/to/dir随后blackbox_update_all_files用新密钥重加密全部文件并提交在 Puppet master 上以角色账户执行gpg --import与blackbox_postdeploy完成解密。bin/blackbox_postdeploy 与blackbox_decrypt_all_files的自动化逻辑正是为此设计——它们默认以批处理方式工作配合无口令子密钥即可实现全程无交互解密。安全警告无口令子密钥意味着任何能访问该 master 的人都能解密全部密钥。因此 Puppet master 本身必须高度加固——正如 docs/encryption.md 所言“如果你能攻破别人的 Puppet master你基本上就掌控了他们的网络”。为什么不直接用 hiera-eyaml官方在 docs/encryption.md 中列出了四条理由也构成了选择 BlackBox 的决策依据通用性BlackBox 适用于任意 Git/Mercurial 仓库即使完全不使用 Puppet 也能工作性能hiera-eyaml 按需解密Puppet master 每次被 agent 联系都要消耗大量 CPU 解密密钥会拖慢 masterBlackBox 是发布时一次性解密全部文件二进制支持hiera-eyaml 需要把内容 ASCII 化后粘贴进 YAML处理长达 10K、且几周就更换的证书非常痛苦BlackBox 对二进制文件原生支持历史原因编写 BlackBox 时 hiera-eyaml 尚不存在。运维要点与常见问题文件权限与属组解密后的明文文件权限默认为密文文件的权限cp_permissions逻辑见 bin/blackbox_postdeploy。若需要让puppet组可读可调用blackbox_postdeploy puppet脚本会额外执行chmod gr与chgrp puppet。角色密钥的命名约定官方建议使用usernameFQDN如svc_deployacctpuppet-master-1.example.com作为密钥标识而非真实邮箱。多台 master 各自持有独立密钥从密钥名即可辨认归属。常见错误排查gpg: decryption failed: No secret key说明忘记用新密钥重加密未执行blackbox_update_all_filesgpg: filename: skipped: No public keyblackbox-admins.txt中存在无效条目或已离职用户未清除Error: cant re-encrypt because a key has expired.某管理员密钥过期需按 docs/expired-keys.md 流程移除并替换。配置存放位置说明BlackBox 配置默认存放在.blackbox目录老仓库可能使用keyrings/live两者皆受支持优先检测$BLACKBOXDATA环境变量其次keyrings/live最后.blackbox。所有文档中的路径均以.blackbox为准。总结将 BlackBox 与 Puppet 集成只需掌握两条主线整文件走puppet:///文件服务 发布时解密小字符串走加密 hiera YAML hiera()函数取值。底层由blackbox_postdeploy在 Puppet master 上批量解密、无口令子密钥保障无人值守两者结合即可在享受 Puppet 配置管理便利的同时把敏感数据的暴露面严格限制在受控的 master 机器上。相关配套文档可进一步参考 docs/enable-repo.md仓库初始化、docs/with-ansible.mdAnsible 集成对照与 docs/advanced.md无仓库场景与 gpg/gpg2 混用。赞分享密码学开发工具应用安全DevOps【免费下载链接】blackboxSafely store secrets in Git/Mercurial/Subversion项目地址https://gitcode.com/gh_mirrors/bl/blackbox点击查看免费下载相关推荐fairseq S2T 完全指南基于 Speech-to-Text 框架的语音识别与语音翻译建模fairseq S2T 完全指南基于 Speech to Text 框架的语音识别与语音翻译建模 fairseq 的 Speech to TextS2T模密码学开发工具应用安全DevOps抖音批量下载实战指南单条视频到整个主页3 步配置 10 分钟跑通抖音批量下载实战指南单条视频到整个主页3 步配置 10 分钟跑通 凌晨一点运营新人小林还在浏览器里一条条保存竞品抖音视频存到第 40 个时已经磨掉半天耐网页爬虫CLIpuppet ssl 命令完全指南管理 Puppet 客户端 SSL 密钥与证书的实操手册puppet ssl 命令完全指南管理 Puppet 客户端 SSL 密钥与证书的实操手册 本指南以 Puppet 仓库中的 puppet ssl 手册页运维DevOpsIaC上一篇Playnite跨设备游戏库管理构建统一游戏生态的技术架构深度解析下一篇OpCore Simplify5分钟打造专属黑苹果系统的终极神器创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

KubeVirt 依赖中的 fxamacker/cbor v2:Go 语言 CBOR 编解码库完整实战指南

KubeVirt 依赖中的 fxamacker/cbor v2:Go 语言 CBOR 编解码库完整实战指南

云原生 【免费下载链接】kubevirt Kubernetes Virtualization API and runtime in order to define and manage virtual machines. 项目地址: https://gitcode.com/gh_mirrors/ku/kubevirt 点击查看 免费下载 本文以 KubeVirt 仓库中 vendored 的 fxamacker/cbor v…

📅 2026/10/7 2:27:03
MAS 激活脚本指南:免费一键激活 Windows 11 与 Office 的 4 种方式

MAS 激活脚本指南:免费一键激活 Windows 11 与 Office 的 4 种方式

MAS 激活脚本指南:免费一键激活 Windows 11 与 Office 的 4 种方式 【免费下载链接】Microsoft-Activation-Scripts Open-source Windows and Office activator featuring HWID, Ohook, TSforge, and Online KMS activation methods, along with advanced troublesh…

📅 2026/10/7 2:27:03
Language Server Protocol 文本文档标识符(TextDocumentIdentifier)全解析:URI 定位与 3.18 协议实现

Language Server Protocol 文本文档标识符(TextDocumentIdentifier)全解析:URI 定位与 3.18 协议实现

开发工具 【免费下载链接】language-server-protocol Defines a common protocol for language servers. 项目地址: https://gitcode.com/gh_mirrors/la/language-server-protocol 点击查看 免费下载 TextDocumentIdentifier 是 LSP(Language Server Pr…

📅 2026/10/7 2:27:03
MORE NEWS

更多资讯

📰

基于编辑距离的VB文本相似行比对工具实现

先交代个背景:上个月帮朋友处理两批业务导出数据,一份是前一天的系统快照,一份是后一天的,总共一万多行,行长几乎一样,区别就躲在某些字段里。拿Beyond Compare直接比,全是红的;拿Di…

📰

LM358运放打造纯硬件呼吸灯:从原理到调试的完整指南

1. 从一个经典需求说起:为什么要用LM358做呼吸灯呼吸灯这个效果,做过电子产品的人都不陌生——手机上的通知灯、路由器上的状态灯、笔记本的电源键,那种一亮一暗、像人在呼吸一样柔和渐变的光效,背后其实就是一个简单的模拟电路在…

📰

LM358呼吸灯电路从入门到精通:三角波振荡器原理与调试指南

1. 为什么LM358是呼吸灯入门的"黄金搭档"呼吸灯这个效果,很多人第一次见是在笔记本电脑的电源指示灯上——一亮一暗,像人在呼吸。看起来简单,但真动手做,你会发现它比"LED闪烁"复杂得多。闪烁只需要高低电平切…

📰

教育站群文件上传下载:分布式存储与负载均衡实战

做教育行业站群,越做到后面越会发现,文件上传下载这件事,远远不是写个MultipartFile接参那么简单。举一个真实场景:一套面向中小学的在线学习平台群,下面挂着主站、学科子站、题库站、作业站、直播回放站,课…

📰

Git实战:理解工作流,搞定提交、分支合并与SSH认证排坑

很多初学者学Git的时候,最容易犯的一个错误就是去背命令清单。git add、git commit、git push背得滚瓜烂熟,可真到项目里遇到提交错文件、分支合并不了、SSH认证失败,整个人就懵了。我当初也是这么过来的:本地写了好几天的代码&am…

📰

TensorFlow+CNN预测股票:从K线特征到滚动回测实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬