# Ansible Vault — Ansible: Playbooks से Servers का Automation

Source: https://www.geekswithgeeks.com/hi/ansible/sec-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, सीमित, छिपाना।](assets/figures/ansible/section-6-map.svg) — चित्र 6.1 — Encrypt, सीमित और छिपाना।

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

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

```bash
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 दें। (उदाहरण।)

```bash
# 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 हैं।

**Quiz:** Vault password कहाँ रखना चाहिए?

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

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