簡體   English   中英

如何將 ansible 保險庫密碼作為額外的 var 傳遞?

[英]How to pass ansible vault password as an extra var?

我有能力使用另一種機制(Azure 管道秘密功能)加密變量,所以我想在那里保存一個 ansible-vault 密碼(在 Azure 管道中)並將其作為額外的 var 傳遞給劇本執行。

我可以知道是否可以這樣做嗎?

我期待什么/如何的一個例子是

ansible-playbook --extra-vars "vault-password=${pipelinevariable}"

Vault 密碼不能作為額外的 var 傳遞。 有幾種方法可以提供它,這些方法都包含在文檔中:

基本上你的選擇是:

  • 通過--ask-vault-pass選項以交互方式提供它
  • 通過以下任一方式從文件(靜態或可執行文件)中讀取它:
    1. 在命令行上提供--vault-password-file /path/to/vault選項
    2. 設置ANSIBLE_VAULT_PASSWORD_FILE環境變量(例如export ANSIBLE_VAULT_PASSWORD_FILE=/path/to/vault )。

上面的文檔中還有很多要學習的內容,尤其是如何使用帶有 id 的多個保險庫密碼,如何使用客戶端腳本從密鑰庫中檢索密碼......

我可以知道是否可以這樣做嗎?

不熟悉Ansible Vault ,但根據Zeitounator共享的文檔,您至少有兩個方向。

1.首先使用CMD 任務創建具有純文本內容的 vault-password-file。 (不確定是否可以通過這種方式創建 Vault-password-file,它可能不起作用。)

( echo $(SecretVariableName)>xxx.txt )

然后你可以使用新創建的 xxx.txt 文件作為ansible-playbook --vault-password-file /path/to/my/xxx.txt xxx.yml

2.在運行管道之前創建一個對應的Vault-password-file,添加到版本控制中。 (您當前管道的相同源代碼庫)

然后,當 vault-password-file 可用時,您可以輕松使用ansible-playbook --vault-password-file Also you can store the password file in private github repo, fetch the repo via git clone https://{userName}:{userPassword}@github.com/xxx/{RepoName}.git , copy the needed password file to the directory您在其中通過Copy Files 任務運行 ansible-playbook 命令。 無論direction 1是否支持,該方向都應該有效。

盡管這不使用額外的變量,但我相信它可以滿足您的要求:

可選/僅一次性:詢問密碼並將其設置為環境變量:

read -s ansible_vault_pass && export ansible_vault_pass

現在在 ansible 命令中使用該變量:

ansible-playbook your-playbook.yml --vault-password-file <(cat <<<"$ansible_vault_pass")

<(cat <<<"")技術的功勞和解釋在另一個 StackOverflow 答案中: Forcing cURL to get a password from the environment

感謝您對此主題的確認和評論。

所有這些建議都類似於我一直在嘗試的,以便根據原始問題完成對我預先生成的保管庫文件的解密。

我還繼續閱讀替代方案,在劇本運行之前設置環境變量。 但這僅在您具有動手訪問權限時才有效,主要是在測試我的 ansible 劇本、部署到遠程主機等時。所有這些都有效,即使在您設置 ansible.cfg 時使用腳本,其中的條目如下:(取決於env 變量是預設的)

[默認值] vault_password_file =./Orchestration/ansible_get_sec.py 或 vault_password_file =./Orchestration/ansible_get_sec.sh

我希望傳入“-e sec-param=${jenkins-secret}”並在上面的腳本中使用“$sec-param”。 同樣,當 env 變量首先 [exported] 時有效,這在直接從 Jenkins-calling-ansible 自動化時不容易完成,是的,我仍然不知道我是否想要那樣。 但我想嘗試驗證行為。 但是,一旦 playbook 命令執行,首先執行的是 [vault_password_file] 的 [defaults] 加載,以解析在 group_vars/all/vault.yml 中定義的 vault 變量。

請注意,不需要在“deploy-repo”文件中預先設置 ansibel_vault_password,因為我們的存儲庫中不允許使用任何類型的明文密碼。 另請注意有關創建文件的建議(使用 $sec-param),但是如何在通過 ansible.cfg 加載 vault_password_file 之前注入/停止劇本進程以將其寫出?

因此,我目前不鼓勵使用 Vault。 或者,我用額外的 jenkins-secret-credentials 參數重載了我的命令

==> ansible-playbook -i /inventory. . . “-e sec1=**** sec2=*** 等等等等。”

我真的很想使用 ansible-vault,因為它打開了更安全的選擇之門。 使用上面 Zeitounator(2020 年 7 月 3 日 7:21)提到的推薦的 [ansible/latest/modules] 可能實際上可以解決這個問題。 仍然需要與我們的 devSecOps 人員一起解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM