Puppet Hiera Encrypted YAML
在 Puppet 中一些設定大多都是透過 hiera 來取得。 Hiera 最常見,也是預設的 backend 是 YAML 檔。不過有些機敏資訊諸如 API key 或密碼等等,總是不想直接毫無保護的存進 git repository 中,以往我的作法是使用 Hiera-gpg 來加密 YAML 檔,不過一來 gpg 頗為麻煩,二來他是整個檔案都加密,但有時我們只需要修改一些無傷大雅的設定,比如 cluster number 之類的,為此再抽一個加密的檔案專門放這些重要資訊,又破壞了原本的設計。
這次改用了 Hiera-eyaml 這個 plugin,他有許多特色和功能,最大的特點當然是他支援片段加密,也就是一個 YAML 檔,只有需要加密的地方再加密即可。我們的檔案可能就會長成這樣:
1 2 3 4 5 6 7 8 9 10 |
|
這樣不用特別破壞原本的目錄結構,要改一般設定時也不需要麻煩的加解密,非常方便。使用公鑰即可加密,所以可以把 public key 放在 repo 中,私鑰給相關權限人等即可。
使用上非常容易,基本上只要在需要用到的地方(例如你開發的電腦,以及 puppet master)透過 gem 安裝 hiera-eyaml
即可。
不過實際上我在配合 apt.puppetlabs 提供的 apt 套件時卻發生了問題,追了一下才發現因為 apt.puppetlabs 提供的 puppet 是直接安裝到 /usr/lib/ruby/vendor_ruby/
下面,所以直接用了一點暴力的方式來解決這個問題:
1 2 3 4 5 6 7 8 9 10 |
|
自己手動把 gem 抓下來以後 unpack 也一起塞進 vendor_ruby 中就搞定了。如果你正常使用 gem 安裝 puppet 的話,應該直接安裝 hiera-eyaml 就可以了。