- Ansible Vault is a feature of ansible that allows you to keep sensitive data such as passwords or keys in encrypted files, rather than as plaintext in playbooks or roles.
- با استفاده از این قابلیت میتوان اطلاعات مهم و حیاتی مثل کلمات عبور را به صورت رمز شده در پروندههای PlayBook یا roles استفاده نمود.
- برای استفاده از این قابلیت میتوان از دستور ansible-vault استفاده نمود.
- برای مشاهدهی سویچهای این ابزار به صورت زیر عمل کنید :
# ansible-vault --help
- برای مطالعه بیشتر در خصوص این ابزار به صورت زیر عمل کنید :
# man ansible-vault
- فرض کنید پروندهای حاوی اطلاعات حساس در دسترس دارید. برای رمزنگاری این پرونده توسط ابزار ansible-vault به صورت زیر عمل کنید :
# ansible-vault encrypt ./file.txt
- نکته: پروندهی file.txt مثال بوده و باید تعویض شود.
- با اجرای دستور بالا از شما کلمهی عبوری برای رمزنگاری پرونده درخواست میشود.
- حال در صورتی که پرونده را با ابزاری مثل cat مشاهده کنید، خواهید دید که محتویات آن به صورت رمز درآمده است. (توسط الگوریتم AES)
- به عنوان مثال PlayBook زیر را در نظر بگیرید :
--- - hosts: centos-servers tasks: - name: copy file copy: src=/root/file.txt dest=/opt
- نکته: برای اشاره به پروندهی file.txt نیازی نیست مسیر آن را به صورت کامل وارد کرد البته در صورتی که پروندهی مورد نظر (در این مثال پروندهی file.txt) کنار پروندهی PlayBook قرار گرفته باشد.
- نکته: مسیر opt/ مثال بوده و باید تعویض شود.
- PlayBook بالا باعث میشود تا پروندهی file.txt به مسیر opt/ در خادمهای تحت مدیریت گروه centos-servers فرستاده شود.
- جهت اجرای PlayBook گفته شده در بالا به صورت زیر عمل کنید :
# ansible-playbook playbook.yaml
- نکته: پروندهی playbook.yaml مثال بوده و باید تعویض شود.
- با اجرای PlayBook بالا خواهید دید که با خطای زیر روبهرو خواهید شد چرا که پروندهی file.txt رمزنگاری شده است.
PLAY [centos-servers] *********************************************************************************************************************************************** TASK [Gathering Facts] ********************************************************************************************************************************************** ok: [172.16.0.245] TASK [copy file] **************************************************************************************************************************************************** fatal: [172.16.0.245]: FAILED! => {"msg": "A vault password or secret must be specified to decrypt /root/ansible/file.txt"} to retry, use: --limit @/root/ansible/playbook.retry PLAY RECAP ********************************************************************************************************************************************************** 172.16.0.245 : ok=1 changed=0 unreachable=0 failed=1
- به منظور اجرای PlayBook هایی که حاوی پروندههای رمز شده توسط ابزار ansible-vault هستند، باید از سویچ ask-vault-pass– به صورت زیر استفاده نمود :
# ansible-playbook playbook.yaml --ask-vault-pass
- با اجرای دستور بالا، کلمه عبوری که با آن پروندهی file.txt رمزنگاری شده است از شما پرسیده میشود که میبایست آن را وارد کنید.
- در صورتی که دستور بالا به صورت موفقیت آمیز اجرا شده باشد، با خروجیای مشابه زیر روبهرو خواهید شد :
Vault password: PLAY [centos-servers] *********************************************************************************************************************************************** TASK [Gathering Facts] ********************************************************************************************************************************************** ok: [172.16.0.245] TASK [copy file] **************************************************************************************************************************************************** changed: [172.16.0.245] PLAY RECAP ********************************************************************************************************************************************************** 172.16.0.245 : ok=2 changed=1 unreachable=0 failed=0
- نکته: پروندهی file.txt به صورت رمزگشایی شده به خادمهای تحت مدیریتی که در پروندهی PlayBook مشخص شده است، انتقال داده میشود.
- به جای استفاده از سویچ ask-vault-pass– میتوان از سویج vault-password-file– استفاده نمود و کلمه عبور را از داخل یک پرونده فراخوانی کرد. برای این منظور :
# ansible-playbook playbook.yaml --vault-password-file=./password.txt
- به منظور مشاهدهی محتویات اصلی پروندهی رمزنگاری توسط ابزار ansible-vault به صورت زیر عمل کنید :
# ansible-vault view file.txt
- با اجرای دستور بالا از شما کلمهی عبوری که برای رمزنگاری پرونده استفاده شده است، پرسیده میشود.
- در مرحله بعد محتویات اصلی پروندهی file.txt چاپ میشود.
- به منظور تغییر محتویات پروندهی رمزنگاری شده توسط ابزار ansible-vault به صورت زیر عمل کنید :
# ansible-vault edit file.txt
- با اجرای دستور بالا، کلمه عبوری که با آن پروندهی file.txt رمزنگاری شده است، پرسیده میشود.
- در مرحله بعد بعد از وارد کردن کلمه عبور، وارد محیط ویرایشگر میشوید.
- به منظور تغییر کلمهی عبوری که برای رمزنگاری پروندهی file.txt در نظر گرفته شده است، میتوان از سویچ rekey استفاده نمود. برای این منظور :
# ansible-vault rekey file.txt
- با اجرای دستور بالا ابتدا کلمهی عبوری که برای رمزنگاری پروندهی file.txt استفاده شده است، پرسیده میشود.
- در مرحله بعد کلمه عبور جدید باید وارد شود.
- به منظور خروج پروندهی رمزنگاری شده از حالت رمزنگاری از سویچ decrypt به شکل زیر استفاده میشود :
# ansible-vault decrypt file.txt
- با اجرای دستور بالا، کلمهی عبوری که برای رمزنگاری پروندهی file.txt استفاده شده است، پرسیده میشود.
- در مرحله بعد پروندهی file.txt کاملا رمزگشایی شده طوری که محتویات اصلی آن با ابزارهایی نظیر cat قابل رویت خواهد بود.
- در صورتی که دستور بالا به صورت موفقیت آمیز اجرا شود. خروجیای مشابه زیر دریافت خواهید کرد :
Decryption successful
- به منظور مطالعهی بیشتر دو لینک زیر پیشنهاد میشود :
https://docs.ansible.com/ansible/latest/user_guide/vault.html https://docs.ansible.com/ansible/latest/user_guide/playbooks_vault.html
- آزمایش شده بر روی Ansible نسخهی 2.5.1
- آزمایش شده بر روی سیستم عامل Ubuntu 18.04