如何使用 Ansible Vault 保護敏感的 playbook 數據

在本文中,我們將學習什麼是 Ansible Vault?如何使用 Ansible Vault 保護敏感的劇本數據在linux上加密數據

什麼是 Ansible Vault?

Ansible 保險庫是一個 ansible 函數,它允許你將密碼或密鑰等敏感數據保存在加密文件中而不是讓數據在劇本或角色中以純文本形式可見。

身份驗證和授權是控制軟件應用程序訪問部分的兩個重要層。 當您在協作環境中工作時,您將無法看到所有數據。

同樣,當您使用創建項目時可靠的您可能希望保護一些敏感信息的安全,例如您的 API 密鑰、數據庫密碼和訪問令牌。

讓每個人都可以看到此信息不利於安全,尤其是當您將其存儲在公共存儲庫中時。

在本節的下一節中Ansible Vault 教程我們將學習如何使用 ansible Vault 來加密文件或字符串,以便保護你的秘密安全地以及如何在 playbook 中使用 Ansible vault 來保護敏感數據使用示例命令

使用 Ansible Vault 命令

默認情況下,ansible-vault 隨 ansible 安裝一起提供。 啟動您的終端並運行以下命令,這將為您提供可與 ansible vault 命令一起使用的選項列表。

                      $ ansible-vault --help
                    
Ansible 幫助部分

使用 Ansible Vault 進行文件加密

如果要創建一個新文件,向其中寫入一些數據並加密,然後運行以下命令。 這裡的 secretkey 是文件的名稱。

                      $ ansible-vault create secretkey
                    

讓我們了解運行此命令時會發生什麼。

  • 由於此文件不可用,因此將創建並打開一個文件進行寫入。
  • 您將被要求提供此文件的密碼,該文件必須妥善保管。請記住,沒有密碼,您將無法解密該文件再次。
使用 Ansible Vault 加密新文件

文件關閉後,內容將被加密。 如果您嘗試打開使用文本編輯器/查看器應用程序加密的文件,您將看到一些隨機數據,如下圖所示。

Ver archivo cifrado查看加密文件

在第一行中,有一些元數據,ansible 將在內部使用這些元數據進行加密和解密。 如第一行所示,AES256算法用於加密文件。

您還可以加密現有文件。

要加密現有文件,請運行以下命令。 同樣,您將被要求提供保管庫的密碼,然後將使用該密碼來解密文件。

                      $ echo "api_key: 'XUITZ89776XX'" > secretkey2 # Writing random data to file
                    
                      $ ansible-vault encrypt secretkey2
                    
Cifrar un archivo existente加密現有文件

如何更改 Ansible Vault 密碼

您可以通過運行以下命令為任何現有的加密文件設置新的保管庫密碼。 在這裡您需要記住您的舊密碼,系統會首先詢問您的舊密碼,然後是新的保管庫密碼。

                      $ ansible-vault rekey secretkey2
                    
Cambiar la contraseña de la bóveda de Ansible更改 Ansible Vault 密碼

如何解密加密文件

如果您想查看文件的原始內容,有幾種方法可以做到。 第一種方法是運行 decrypt 將文件置於未加密形式的命令。

                      $ ansible-vault decrypt secretkey2
                    
Descifrar el archivo cifrado解密加密文件

您還可以通過運行以下命令來查看未解密的加密文件內容 view 代替 ” decrypt “。

                      $ ansible-vault view secretkey2
                    
Ver el contenido de un archivo cifrado sin descifrarlo無需解密即可查看加密文件的內容

和...之間的不同 decrypt view 是前者會解除加密以查看原始內容,而後者將簡單地解密並打印內容,同時保持原始文件加密。

修改加密文件中的內容

假設您要編輯加密文件的內容。 在這種情況下,您可以解密文件、編輯內容或重新加密文件。 或者,您可以使用 edit 命令編輯內容。

                      $ ansible-vault edit secretkey2
                    
Modificar el contenido en el archivo cifrado修改加密文件中的內容

的優勢與 edit ”命令是不需要解密文件再加密。 它將打開文件進行編輯,一旦關閉文件,它將自動加密。

使用 Ansible Playbook 加密的內容

到目前為止,我們已經了解瞭如何在文件級別加密和解密數據。 您還可以加密字符串。 讓我們舉個例子。

我有一些用於遠程連接的變量,它還包含一個連接密碼。 要加密密碼,請運行以下命令。 在這裡我使用密碼作為“關鍵代碼”.

記住解密字符串所需的保管庫密碼。

                      $ ansible-vault encrypt_string "password"
                    

在下面的劇本中,我創建了一些模擬連接細節的變量, connect_pwd 將存儲加密數據。 我正在打印“ connection_pwd ”變量在任務中使用調試模塊。

                      - name: "Test playbook for ansible vault"
  gather_facts: False
  hosts: local

  vars:
    remote_user: produser
    default_role: prodrole
    connect_pwd: << COPY PASTE THE ENCRYPTED PASSWORD HERE >>

  tasks:

    - name: print the password
      debug:
        msg: "{{ connect_pwd }}"
                    
Use Ansible Vault en un libro de jugadas在劇本中使用 Ansible Vault

運行劇本時,您應該使用任何 --ask-vault-password 任何一個 --ask-vault-pass 複選標記將要求您輸入保管庫的密碼以解密字符串。

                      $ ansible-playbook playbook.yml --ask-vault-pass
                    
Ejecute un libro de estrategias con Ansible Vault使用 Ansible Vault 運行 Playbook

如果您嘗試在沒有 --ask-vault-password 任何一個 --ask-vault-pass 標誌,任務將失敗並出現以下錯誤。

                      fatal: [master.anslab.com]: FAILED! => {"msg": "Attempting to decrypt but no vault secrets found"}
                    

您還可以將保管庫密碼存儲在文件中並將其作為參數傳遞給 --vault-password-file 任何一個 --vault-pass-file 陰謀。

通過將保管庫密碼存儲在文件中,確保設置了正確的權限這樣只有文件的所有者才能讀取文件的內容。

                      $ echo "password" > .secretkey
                    
                      $ chmod 600 .secretkey
                    

我創建了一個名為 .secretkey 並設置權限600. 現在這個文件可以用來解密我的劇本中的字符串。

                      $ ansible-playbook --vault-password-file .secretkey playbook.yml
                    

將保管庫密碼存儲在 Ansible 配置文件中

您還可以將保管庫密碼存儲在 ansible.cfg 程序。 在這種情況下,您可以運行 playbook 命令而無需額外的保險庫標誌。

                      vault_password_file = .secretkey
                    

您還可以設置以下環境變量以用於所有解密。

                      export ANSIBLE_VAULT_PASSWORD_FILE="./.secretkey"
                    

結論

到目前為止,您應該清楚地了解如何使用 Ansible Vault 保護您的秘密。 使用 Ansible Vault 加密內容非常簡單,不需要任何外部工具。

練習本文中提供的所有示例,以幫助您更多地了解 Ansible 保險庫如何幫助保護敏感的 Playbook 數據。

資源:

圖片精選賈里特·帕拉朱利像素灣.

相關文章