祕密就是保持祕密(Secrets are meant to stay secret.)。不管是雲服務的憑證或數據資源的密碼,它們都有有緣由的祕密。若是落入壞人之手,它們可能被用來發現商業機密和私人客戶數據,爲邪惡的、或者更糟糕的目的創造基礎條件。全部這些都會讓你和你的組織花費大量的時間和金錢,讓你頭疼! 本章,咱們會闡述如何安全保護這些祕密。vim
• 加密靜態數據。
• 操做過程當中的祕密保護。安全
做爲一種配置系統或編排引擎,ansible具備很強的能力。爲了掌握這強大的能力,有必要將隱私數據委託(entrust)給ansible。隨時提醒操做員輸入密碼的自動化系統不是很是有效。爲了展現ansible最大化的能力,私密數據被寫入一個ansible能夠讀取和使用其中數據的文件裏邊。bash
可是這會帶來風險!你的隱私在你的文件系統中是以純文本的形式存在的。存在物理上和數字上的風險。 從物理上來說,計算器能夠從你身上拿走,而後偷偷的尋找私密數據。而從數字上來講,任何可能破壞設置在它上面的邊界集合的惡意軟件能夠讀取你用戶帳戶能夠訪問的任意數據。若是你利用一個源控制系統,保存倉庫的基礎設施一樣處於風險之中。架構
值得慶幸的是,ansible提供了一個保護你隱私的設施。那個設施就是Vault,它容許加密文本文件,它容許以加密格式加密靜態存儲的文本文件。沒有key或者大量的計算能力,數據是不可解讀的。ide
處理加密靜態存儲數據的關鍵課程包含:工具
Vault能夠加密ansible使用的任意結構的數據文件。基本上是ansible操做過程當中使用的任意的yaml(或JSON)文件。能夠包含以下:ui
若是文件能夠以yaml格式表達,而且能夠被ansible讀取,這些文件就可使用Vault來加密。由於整個文件靜態時都是不可讀的,因此在選擇那些文件須要加密時,應該注意不要過於狂熱。任何帶有源代碼控制操做的文件都用加密內容來完成,這樣就會讓同行審閱變得很是困難。最佳實踐,最小數量的可能數據應該加密;這甚至意味着須要將一些變量移到它們本身的文件中。this
ansible提供了一個新的程序ansible-vault用來建立新的加密文件。這個程序用於建立Vault加密文件,以及和它的交互。建立加密文件的子程序是create。加密
ansible-vault create --help Usage: ansible-vault create [options] file_name ansible數據文件的加解密工具 Options: --ask-vault-pass 詢問vault祕密 --encrypt-vault-id=ENCRYPT_VAULT_ID 用於加密的vault id(required if more than vault-id is provided) -h, --help show this help message and exit --new-vault-id=NEW_VAULT_ID the new vault identity to use for rekey --new-vault-password-file=NEW_VAULT_PASSWORD_FILE new vault password file for rekey --vault-id=VAULT_IDS the vault identity to use --vault-password-file=VAULT_PASSWORD_FILES vault password file -v, --verbose verbose mode (-vvv for more, -vvvv to enable connection debugging) --version show program's version number and exit See 'ansible-vault <command> --help' for more information on a specific
要建立新文件,你須要提早了解兩個事情:debug
vim password.sh #!/usr/bin/bash echo "password more more" chmod +x password.sh
ansible-vault create --vault-password-file password.sh new_secret.yaml
ansible-vault encrypt --vault-password-file password.sh new_secret.yaml
ansible-vault edit a_encrypt_file.yaml
ansible-vault rekey --vault-password-file password.sh new_secret.yaml
ansible-vault decrypt --vault-password-file password.sh new_secret.yaml
添加no_log。
--- - name: show me an encrypted var hosts: localhost gather_facts: false vars_files: - a_vars_file.yaml tasks: - name: print the variable debug: var: something no_log: true
Ansible can deal with sensitive data. It is important to understand how this data is stored at rest and how this data is treated when utilized. With a little care and attention, Ansible can keep your secrets secret. Encrypting secrets with ansible- vault can protect them while dormant on your filesystem or in a shared source control repository. Preventing Ansible from logging task data can protect against leaking data to remote log files or on-screen displays.
In the next chapter, we will explore the powers of the Jinja2 templating engine used by Ansible.