第二章: 使用ansible保護你的祕密

使用ansible保護你的祕密

祕密就是保持祕密(Secrets are meant to stay secret.)。不管是雲服務的憑證或數據資源的密碼,它們都有有緣由的祕密。若是落入壞人之手,它們可能被用來發現商業機密和私人客戶數據,爲邪惡的、或者更糟糕的目的創造基礎條件。全部這些都會讓你和你的組織花費大量的時間和金錢,讓你頭疼! 本章,咱們會闡述如何安全保護這些祕密。vim

• 加密靜態數據。
• 操做過程當中的祕密保護。安全

加密靜態數據

做爲一種配置系統或編排引擎,ansible具備很強的能力。爲了掌握這強大的能力,有必要將隱私數據委託(entrust)給ansible。隨時提醒操做員輸入密碼的自動化系統不是很是有效。爲了展現ansible最大化的能力,私密數據被寫入一個ansible能夠讀取和使用其中數據的文件裏邊。bash

可是這會帶來風險!你的隱私在你的文件系統中是以純文本的形式存在的。存在物理上和數字上的風險。 從物理上來說,計算器能夠從你身上拿走,而後偷偷的尋找私密數據。而從數字上來講,任何可能破壞設置在它上面的邊界集合的惡意軟件能夠讀取你用戶帳戶能夠訪問的任意數據。若是你利用一個源控制系統,保存倉庫的基礎設施一樣處於風險之中。架構

值得慶幸的是,ansible提供了一個保護你隱私的設施。那個設施就是Vault,它容許加密文本文件,它容許以加密格式加密靜態存儲的文本文件。沒有key或者大量的計算能力,數據是不可解讀的。ide

處理加密靜態存儲數據的關鍵課程包含:工具

  • 有效的加密目標。
  • 建立新的加密文件。
  • 加密現有的未加密的文件。
  • 編輯加密文件。
  • 修改文件上的加密密碼。
  • 解密加密文件。
  • 運行ansible-playbook命令來引用加密文件。

Vault能夠加密的東西

Vault能夠加密ansible使用的任意結構的數據文件。基本上是ansible操做過程當中使用的任意的yaml(或JSON)文件。能夠包含以下:ui

  • group_vars/ 文件。
  • host_vars/ 文件。
  • include_vars目標。
  • vars_files目標。
  • --extra-vars目標。
  • 角色變量。
  • 角色默認值。
  • 任務文件。
  • 處理器文件。

若是文件能夠以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

  • Vault用於加密文件的密碼。
  • 要加密的文件名。
vim password.sh

#!/usr/bin/bash
echo "password more more"

chmod +x password.sh

ansible-vault建立新加密文件

ansible-vault create --vault-password-file password.sh new_secret.yaml

ansible-vault加密原有文件

ansible-vault encrypt --vault-password-file password.sh new_secret.yaml

ansible-vault編輯加密文件

ansible-vault edit a_encrypt_file.yaml

ansible-vault加密文件密碼修改

ansible-vault rekey --vault-password-file password.sh new_secret.yaml

ansible-vault解密加密文件

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.

目錄

相關文章
相關標籤/搜索