Puppet 自動化部署 – 實作 Policy-based autosigning

2017-01-02 Puppet

前面介紹到了 Policy-based autosigning,在這邊依照官方所述來測試 Policy-based autosigning 的實作環境

 

首先必須先了解一下 Policy-based autosigning 的運作概念是在 csr 證書中加入參數供認證,由於在 Puppet 的認證關係中是由 Agent 發起,所以在 csr 動手腳的動作就落在 Agent 上面,

 

在 Master 中開啟 Policy-based autosigning 支援

可以在 puppet.conf 中加入 autosign 參數來開啟 Policy-based autosigning

To enable policy-based autosigning, set autosign = <policy executable file> in the [master] section of the CA Puppet master’s puppet.conf.

在這邊必須注意的是 autosign 參數帶的是一個 script 檔,他將會替你執行這個 script 去驗證 Agent 的 csr 資訊。

 

而且這個 script 必須是 puppet master 有執行的權限,script 必須 return 0 (成功) 或是 1 (失敗),來判別這是否為合法的 Agent。

The policy executable file must be executable by the same user as the Puppet master. If not, it will be treated as a certname whitelist file.

 

 

 

在 Agent 中的 csr 資訊加入認證資訊

 

可以加入設定檔 csr_attributes.yaml 來替 CSR 添加額外的驗證訊息:

Extra data for the CSR is read from the csr_attributes.yaml file in Puppet’s confdir. (The location of this file can be changed with the csr_attributes setting.)

 

在官方特別提到,csr_attributes.yaml 必須擁有 custom_attributes 或 extension_requests 其中一個類型的參數,其支援的類型可以參考 CSR attributes and certificate extensions

 

 

 

實作 Policy-based autosigning 工作

在這篇小弟有寫了一個 Policy-based autosigning 工作範例在 github,是採用 custom_attributes 類型中的 challengePassword 進行驗證,從下面這張工作流程圖了解一下在這個示範中的作業流程

 

 

在 Master 安裝 autosign script

 

用 setup.sh 的安裝動作會將 autosign script 安裝在/etc/puppetlabs/autosign (預設),並且將 autosign 自動寫入在 puppet.conf

 

用 autosign 產生 challengePassword 驗證檔案

 

會產生一個 example.com 的檔案,裡面的 content 為隨機的 challengePassword 驗證碼,這隻檔案的用意是要給 autosign-verify 進行驗證 agent csr 的

 

在 Agent 加入 challengePassword 的認證

 

然後主動提交測試是否可以驗證成功

驗證成功,也收到 catalog 佈署完成。

 

驗證一下 Master,自動 sign certificate 囉

 

如何證明真的是使用 Policy-based autosigning 而不是只是在白名單內而已?!

我在 autosign-verify 裡面寫了一段,只要驗證成功,就會刪除在 waiting 中的 example.com 驗證檔案,所以在 /opt/autosign/pks 裡面只會存在尚未驗證的 node

 

這邊要特別注意,puppet 在進行驗證的時候完全是使用 puppet 的權限去進行動作,所以不管是 create, remove 等動作都必須要有權限,所以都採用 puppet:puppet 的權限。

The policy executable file must be executable by the same user as the Puppet master. If not, it will be treated as a certname whitelist file.

 

 

 

 

特別標註:

  • 要獲得 agent 的 csr stdin 訊息可以用 $(cat) 來取得,若是在測試階段要抓取字串可以用以下指令去擷取,requests 是存放 agent 等待 sign 的 csr 存放位置。

 

 

 

 

 

 

參考資料:

autosigning certificate requests

CSR attributes and certificate extensions

Config files: csr_attributes.yaml

Upgrade to newer version of commons-exec (or switch to zt-exec) when STDIN bug is fixed

2 comments

  1. Vince 說:

    想請問一下,
    1.autosign部分,我安裝完後,他的預設路徑為/etc/puppetlabs/autosign,如果路徑不是為/opt/autosign是否有關係呢?

    2.我已在master端安裝autosign了,且在安裝時,以下後面參數指令,將autosign資料夾位置為/opt/autosign,但我在agent端,試用了puppet agent –test,無法取得我在master端example.com的驗證,是否有哪些地方需要修改呢? 我是按照您上述步驟進行安裝的!

    謝謝!
    Cheers,
    Vince

發表迴響

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

彙整

分類

open all | close all

License

訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱

%d 位部落客按了讚: