Puppet 在 hiera 5 用 hiera-eyaml 加密機敏資訊

2017-06-01 Puppet

Puppet 在 Configuration 的設定內一定多多少少會有一些機敏資訊,或是不想透明化在 repository 的資料,而在使用 Puppet 資料通常都是存在 hiera 的 YAML 裡面,如果要加密資料可以使用 hiera-eyaml 來把機敏資訊加密,這個 plugin 也是採用 YAML 來寫,但他的副檔名為 eyaml,可以解釋為 encrypt yaml 的意思。

 

hiera-eyaml 最大的特色就是可以:

  • 加密檔案 (file)
  • 加密字串 (string)
  • 加密密碼 (prompt for it)

 

這邊最常用到的就是加密字串 (string) 的方式,有些時候我只需要某些值加密,而並非整個檔案加密,就非 hiera-eyaml 莫屬,hiera-eyaml 是藉由產生 Public / Private key 的方式來加密,用 Public key 來 encrypt,Private key 來 decrypt。

 

Puppet master 上安裝 hiera-eyaml

Step .1 用 gem 安裝 hiera-eyaml

 

Step 2. 然後還要替 puppet server 安裝 hiera-eyaml

 

 

Step 3. 到 /etc/puppetlabs/puppet 這邊生成 hiera-eyaml 的 keys,實際上你可以任意指定位置。

這個步驟你會生成一個 keys 目錄,並且裡面有 private_key.pkcs7.pem、public_key.pkcs7.pem 兩把 key。

 

Step 4. 處理 pem 權限

 

Step 5. 設定 hiera-eyaml 的 config,這是為了在接下來的步驟使用 eyaml 指令需要用到

如果沒有設定 config 的話,你的 eyaml 預設會去讀你當前目錄的 ./keys/{public,private}_key.pkcs7.pem,為了方便可以在其他目錄操作 eyaml 所以把設定寫在 eyaml 讀的到的地方。

 

預設 eyaml 讀取設定檔的順序是:

  • /etc/eyaml/config.yaml
  • ~/.eyaml/config.yaml
  • $EYAML_CONFIG 變數

 

 

Step 6. 然後在 hiera.yaml 裡面加上 hiera-eyaml 的 plugin support

我這邊用的是 hiera 5,如果是 hiera 3 要看 hiera-eyaml document,重點在於 lookup_key 這邊選擇 eyaml_lookup_key 這個 plugin,由於 eyaml 可以同時並存明文、密文資料,其實你也是可以通通寫在 eyaml 裡面會比較乾淨,但實際上效能會差一點,因為 eyaml 都會透過 Private key 解密後打開。

 

Step 7. 然後試著加密一個 string

你會得到一個 “一行密文” 或是整理過的 “多行密文”,實際上是一樣的,但引入方式可以用 “>” 來寫

 

Step 8. 寫到 common.eyaml

實際上你的 eyaml 裡的值會長這樣:

 

Step 9. 驗證 eyaml encrypt 的值是否正確。

用 decrypt 來看會顯示 DEC,和解密後的數值

 

使用 hiera-eyaml 後的探討與管理

在用了 hiera-eyaml 後同時也必須思考 Public / Private key 存放的問題,基本上 repository 不會存放 key,只提供開發 Puppet 的人員 Public key (有 Public key 就可以 encrypt),讓系統管理者把 Public / Private key 塞到 Puppet master。

 

如果你有用 AWS 還可以參考一位在 hiera-eymal issues 提出的 hiera-eyaml-kms 利用 AWS kms 來管理 key 是一個不錯的選擇。

 

 

 

** 如果你將 hiera-eyaml 跑在 hiera 5 出現「Error: Could not run: Lookup of key ‘lookup_options’ failed: : Unable to find ‘lookup_key’ function named ‘eyaml_lookup_key’」的訊息的話,這是由於你的 Puppet agent 版本 hiera 5 並未內建 eyaml_lookup_key,在 PUP-7293 有提到,然後在 4.9.4 版本 bugfixes 了。

 

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

彙整

分類

open all | close all

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱

%d 位部落客按了讚: