पाठ 19 / 26

Ansible Vault

Secret variable files encrypt करें और उन्हें playbooks में सुरक्षित रूप से उपयोग करें।

Git में encrypted

Ansible Vault files (या अकेले मानों) को AES-256 से encrypt करता है ताकि database passwords जैसे secrets version control में रह सकें। ansible-vault encrypt, create या encrypt_string से बनाएँ या encrypt करें; playbooks को --ask-vault-pass या --vault-password-file से चलाएँ। Vault password repository के बाहर रखें (password manager, CI secret या secrets service), अलग environments के लिए अलग vaults/passwords रखें, और बड़ी टीमों के लिए बाहरी secrets manager जोड़ने पर विचार करें।

Automation के पास चाबियाँ होती हैं

Playbooks passwords, keys और production servers छूते हैं, इसलिए secrets की रक्षा करें और privilege सीमित रखें।

तीन नियंत्रण: encrypt, सीमित, छिपाना।
चित्र 6.1 — Encrypt, सीमित और छिपाना।

File encrypt करना, चलाकर

मैंने फेंकने योग्य password फ़ाइल से छोटी secret.yml encrypt की। Encrypted फ़ाइल की पहली पंक्ति Vault header है; बाक़ी ciphertext है। Password फ़ाइल कभी commit न करें।

echo "db_password: hunter2" > secret.yml
ansible-vault encrypt secret.yml --vault-password-file vp.txt
head -1 secret.yml

Output:

$ANSIBLE_VAULT;1.1;AES256

Encrypted vars का उपयोग

फ़ाइल को किसी भी vars फ़ाइल की तरह लोड करें और run के समय vault password दें। (उदाहरण।)

# playbook: vars_files: [secret.yml]
ansible-playbook -i inventory.ini site.yml --vault-password-file ~/.vault_pass

Variables के नाम ऐसे रखें कि review में मिलें

आम pattern पठनीय नामों को सादी files में रखता है जो vaulted मानों की ओर इशारा करती हैं, जैसे db_password: "{{ vault_db_password }}"। Reviewers बिना decrypt किए देख सकते हैं कि कौन-से secrets हैं।

त्वरित जाँच: Vault password कहाँ रखना चाहिए?

  • सार्वजनिक chat में
  • Playbook वाले उसी Git repo में
  • Playbook के नाम में
  • Repository के बाहर, password manager या CI secret में
Answer

Repository के बाहर, password manager या CI secret में — चाबी को ताले वाले डेटा के पास रखना encryption का उद्देश्य विफल करता है।