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