如何使用Ansible Vault保護敏感數據?
譯文【51CTO.com快譯】Ansible是一種出色的自動化和編排工具,因簡單性和易用性而受到許多開發人員的歡迎。Ansible隨帶的最重要功能之一是Ansible Vault。顧名思義,Ansible Vault是一項安全功能,用于加密或保護劇本(playbook)或文件中的敏感信息,而不是任由信息采用純文本格式:若出現泄露,將構成嚴重威脅。這類數據包括密碼、API令牌和SSL證書等。你可以在擁有密碼等敏感信息的劇本中加密字符串組成的整個劇本YAML文件。
本指南介紹了Ansible Vault可以幫助你保護敏感或機密信息,將窺視者拒之門外的各種方法。
使用Ansible Vault創建加密文件
Ansible Vault使用ansible-vault命令行實用工具,借助AES256算法來加密敏感信息。這提供了嵌入到已定義密碼中的對稱加密。用戶可以使用同一個密碼來加密或解密文件,以便訪問內容。
要創建加密文件,使用ansible-vault實用工具,如下所示:
- $ ansible-vault create file.yml
比如要創建一個文件,將其命名為secret_file.yml,運行命令:
- $ ansible-vault create secret_file.yml
圖1
系統會提示你提供新的保管庫密碼。輸入你的首選密碼并確認。確認密碼后,vim編輯器會啟動。
之后,輸入你希望被Ansible Vault加密的文件內容并保存文件。以下是一些示例文本。
- Hello, this is my secret file
你查看文件時,會發現它已使用AES256算法加密,如下所示:
- $ vim secret_file.yml
圖2
使用Ansible Vault編輯加密文件
要對現有的加密文件進行更改,使用以下語法:
- $ ansible-vault edit file.yml
以我們之前創建的示例文件為例,編輯文件的命令將是:
- $ ansible-vault edit secret_file.yml
系統會再次提示你輸入保管庫密碼,提供密碼后,會授予你訪問文件的權限以進行修改。
圖3
查看加密文件
要查看加密文件,使用以下語法:
- $ ansible-vault view file.yml
使用我們的文件,因此命令將是:
- $ ansible-vault view secret_file.yml
圖4
使用Ansible Vault加密現有文件
假設你想要加密現有的未加密文件,比如清單文件,你該怎么做?為此,使用語法:
- $ ansible-vault encrypt file.yml
比如說,要加密文件file1.yml,執行以下命令:
- $ ansible-vault encrypt file1.yml
指定保管庫密碼,確認密碼后即可加密文件。
圖5
使用Ansible Vault解密文件
要解密文件、還原成純文本格式,運行以下命令:
- $ ansible-vault decrypt file1.yml
如果一切順利,你會收到“解密成功”的消息。現在,你可以使用cat命令來查看文件的內容。
圖6
重置Ansible保管庫密碼
另外,你可以重置或更改保管庫密碼。可以使用ansible vault命令中的rekey選項完成該操作,如下所示:
- $ ansible-vault rekey secret_file.yml
先指定當前的保管庫密碼,然后再創建一個新密碼并確認密碼。
圖7
Ansible Playbook中運行時解密內容
Ansible 2.4之前,運行時解密文件需要使用帶–ask-vault-pass參數的ansible或ansible-playbook命令,如下所示:
- $ ansible-playbook playbook_example.yml --ask-vault-pass
然后會提示你輸入保管庫密碼,解密會在運行時開始。
圖8
然而,該方法已被棄用。從Ansible 2.4開始,提示輸入密碼的標準方法是使用–vault-id選項,如下所示:
- $ ansible-playbook playbook_example.yml --vault-id @prompt
@prompt將提示輸入密碼。
圖9
避免每次運行過程中解密文件時提示輸入密碼,一個簡單技巧是將保管庫密碼存儲在文件中。
Ansible 2.4之前,實現此操作的方法是使用–vault-password-file參數,指定含有已存儲密碼的那個文件的路徑。
例如在下面的演示中,密碼文件位于/etc/ansible/vault_pass.txt文件中。
- $ ansible-playbook playbook_example.yml --vault-password-file /etc/ansible/vault_pass.txt
然而,與–ask-vault-pass選項一樣,已停止使用–vault-password-file選項,讓位于–vault-id選項。因此,該命令如下所示:
- $ ansible-playbook playbook_example.yml --vault-id /etc/ansible/vault_pass.txt
在Ansible Playbook中加密變量
除了加密整個劇本外,ansible-vault還使你能夠僅加密變量。在大多數情況下,這些變量帶有高度機密和敏感的信息,比如密碼和API密鑰。
下面的劇本旨在打印輸出變量my_secret的值,該變量含有定義為P@ssword123的密碼。
圖10
通常,以純文本形式存儲密碼是壞主意,因為如果有人擁有了劇本文件,你就岌岌可危。
因此為你提供2個選項:加密整個文件或加密變量的值。
要加密變量,使用如下所示的crypto_string選項。
- $ ansible-vault encrypt_string ‘string’ –name ‘variable_name
要加密劇本示例中變量my_secret的值,命令將是:
- $ ansible-vault encrypt_string 'P@ssword123' --name 'my_secret'
圖11
上面的輸出表明密碼已使用AES 256加密進行了加密。之后,從!vault |拷貝整個加密的代碼。前往劇本文件,刪除明文密碼值,然后粘貼加密后的值,如下所示。
圖12
保存并退出文件。現在運行劇本,證實它是否仍會顯示my_secret變量中存儲的密碼值。
圖13
上面的輸出顯示劇本提供了預期的結果,表明我們已成功加密了變量。
原文標題:How to Use Ansible Vault to Secure Sensitive Data,作者:Pradeep Kumar
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】