使用ansible-Vault加密字串

在撰寫 Playbook 時,難免會用到敏感性的資訊,Ansible 提供了 ansible-vault 這個工具,可以針對檔案或是字串來做加密。

如果變數內容需要加密的話,該怎麼使用呢?

舉個例子,假設 playbook 或 inventory 裏面的 foo 這個變數的內容 “password123” 需要加密,那麼要先使用 ansible-vault 來加密字串。

ansible-vault encrypt_string password123 --ask-vault-pass

執行以後,會詢問 vault 的密碼,這個密碼是在後續執行 playbook 時會用到解密的鑰匙。

詢問完密碼,就會輸出這些內容

!vault |
          $ANSIBLE_VAULT;1.1;AES256
          66333264313637393563336433623136303366613464643938643133643234386664383738336139
          6536653132383166333736386130383264373230643734650a633235643336643536336163663864
          61303063376639643139643331306133313533326463616635323838333733653862613736333430
          6366373436343532340a313137336138383135343336333538656161666134303132653936656331
          3131
Encryption successful

複製起來,把內容貼到 playbook 或 inventory 裡

---
- name: Test vault
  hosts: all

  vars:
    foo: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          66333264313637393563336433623136303366613464643938643133643234386664383738336139
          6536653132383166333736386130383264373230643734650a633235643336643536336163663864
          61303063376639643139643331306133313533326463616635323838333733653862613736333430
          6366373436343532340a313137336138383135343336333538656161666134303132653936656331
          3131

  tasks:
  - debug:
      var: foo

然後在執行時,需要指定 --ask-vault-pass

ansible-playbook -i localhost, -c local --ask-vault-pass test-vault.yml

那這邊還有些變形的用法,後續整理好,再來分享。

參考資料