Ansible 用 Vault 管理敏感資料

2018-07-25 11:14 更新

導(dǎo)入 Ansible 組態(tài)工具,多少會(huì)使用明文 (Plain text) 在 Playbooks 里存放敏感資料 (sensitive data) 1,更別說我們還會(huì)搭配 Git 版本系統(tǒng)使用,這很可能會(huì)造成潛在的資安風(fēng)險(xiǎn)!接下來凍仁將通過 Vault 這個(gè)保險(xiǎn)庫系統(tǒng)強(qiáng)化資料安全。

automate_with_ansible_practice-33.jpg

圖片來源:http://kingofwallpapers.com/vault.html

Vault 是什么?

Vault 就字面上的意義有地窖、保險(xiǎn)庫的意思。在 Ansible 里是指加密、解密檔案的技術(shù)。

Ansible 從 v1.5 開始支持此功能,預(yù)設(shè)使用 AES 加密技術(shù),其詳細(xì)說明可參考 Vault | Ansible Documentation 官方文件。

2016-12-30-ansible-vault-1.png

怎么使用 Vault?

在進(jìn)入實(shí)作之前,先來看看 Vault 的使用方法。

  1. 建立加密 (Encrypted) 檔案。

    $ ansible-vault create foo.yml
    
  2. 編輯加密檔案內(nèi)容。

    $ ansible-vault edit foo.yml
    
  3. 更換加密金鑰 (密碼)。

    $ ansible-vault rekey foo.yml
    
  4. 對(duì)已存在的明文檔案進(jìn)行加密

    $ ansible-vault encrypt foo.yml
    
  5. 解開 (Decrypt) 已加密檔案。

    $ ansible-vault decrypt foo.yml
    
  6. 檢視已加密的檔案內(nèi)容。

    $ ansible-vault view foo.yml
    

怎么在 Playbooks 里使用 Vault?

以下將借由簡單的實(shí)作來展示 Playbook 搭配 Vault 的使用方法。

  1. 建立 Playbook。

    $ vi hello_world.yml
    ---
    - name: say 'hello world'
     hosts: all
     vars_files:
       - defaults/main.yml
     tasks:
       - name: echo 'hello world'
         command: echo 'hello '
         register: result
       - name: print stdout
         debug:
           msg: ""
    
    # vim: ft=ansible :
    
  2. 建立變數(shù)檔案。

    $ vi defaults/main.yml
    world: 'ironman'
    
  3. 將變數(shù)檔案進(jìn)行加密:過程中需輸入兩次密碼。

    $ ansible-vault encrypt defaults/main.yml
    New Vault password:
    Confirm New Vault password:
    Encryption successful
    
  4. 檢視已加密的檔案內(nèi)容:使用剛剛輸入的密碼進(jìn)行檢視。

    $ ansible-vault view defaults/main.yml
    Vault password:
    world: 'ironman'
    

手動(dòng)輸入金鑰 (密碼) 解密

  1. 執(zhí)行 Playbook 并搭配 --ask-vault-pass 參數(shù)手動(dòng)輸入密碼。

    $ ansible-playbook hello_world.yml --ask-vault-pass
    
  2. 或通過 ansible.cfg 啟用 ask_vault_pass,其預(yù)設(shè)值為 false。

    1. 設(shè)定 ansible.cfg。

      $ vi ansible.cfg
      [defaults]
      ask_vault_pass = true
      
    2. 執(zhí)行 Playbook。

      $ ansible-playbook hello_world.yml
      

透過金鑰 (密碼) 檔解密

  1. 建立密碼檔:此例用的密碼為 bGpvxx。

    $ echo 'bGpvxx' > secret.txt
    
  2. 執(zhí)行 Playbook 并搭配 --vault-password-file 參數(shù)指定金鑰路徑。

    $ ansible-playbook hello_world.yml --vault-password-file secret.txt
    
  3. 或于 ansible.cfg 里新增 vault_password_file 參數(shù),并指定金鑰路徑。

    $ vi ansible.cfg
    [defaults]
    vault_password_file = secret.txt
    

最后附上凍仁的實(shí)作畫面。

2016-12-30-ansible-vault-2.gif

  • 當(dāng) include 到 defaults/main.yml 密文 (Cipher text) 檔后,需先用 Vault 解開才可繼續(xù)執(zhí)行。

后話

或許大家覺得在本機(jī)儲(chǔ)存敏感資料很安全,誰又能保證傳輸過程中能不被竊取呢?

越方便的工具往往伴隨著越大的資安風(fēng)險(xiǎn),但至少我們可以先從檔案加密著手。

相關(guān)連結(jié)

1. 資料庫伺服器 (database server) 的連線資訊、第三方服務(wù)的 Access Key 和 Secret 等都算是敏感資料的一種。 ?


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)