encryption उत्तर: एक अलग वॉल्ट फ़ाइल में एक सूची फ़ाइल में कुछ चर कैसे एन्क्रिप्ट करें?




ansible ansible-playbook (5)

आप इस तरह कुछ कर सकते हैं।

  1. एक पासवर्ड फ़ाइल बनाएं (एक पंक्ति पर अपने पासवर्ड के साथ एक सादा पाठ फ़ाइल)
  2. अपने उत्तरदायी परियोजना फ़ोल्डर में एक ansible.cfg बनाएँ

    [defaults]
    vault_password_file = <path/to/your/password/file>
    
  3. एक प्लेबुक फ़ाइल बनाएं (जैसे playbook.yml )

     - name: my ansible playbook
       hosts: 127.0.0.1
       vars_files:
         - 'vars.yml'
       tasks:
         - name: print secure variable
           debug: msg="my secure variable '{{ my_secure_variable }}'"`
    
  4. एक चर फ़ाइल बनाएँ (उदाहरण के लिए vars.yml )

    my_secure_variable: "X_my_secret_X"
    
  5. चर फ़ाइल को एन्क्रिप्ट करें ( ansible.cfg साथ उत्तरदायी प्रोजेक्ट स्थान से)

    ansible-vault encrypt vars.yml
    
  6. अपनी प्लेबुक चलाएं ( ansible.cfg साथ उत्तरदायी परियोजना स्थान से)

    ansible-playbook -i "localhost," playbook.yml
    

आपको आउटपुट प्राप्त करना चाहिए:

$ ansible-playbook playbook.yml -i 'localhost,'

PLAY [my ansible playbook] ****************************************************

GATHERING FACTS ***************************************************************

ok: [127.0.0.1]

TASK: [print secure variable] *************************************************

ok: [127.0.0.1] => {
    "msg": "my secure variable 'X_my_secret_X' "
}

PLAY RECAP ********************************************************************

127.0.0.1                  : ok=2    changed=0    unreachable=0    failed=0

सेटिंग्स

निम्नलिखित उदाहरण के समान एक उत्तरदायी सूची फ़ाइल पर विचार करें:

[san_diego]
host1
host2

[san_francisco]
host3
host4

[west_coast]
san_diego
san_francisco

[west_coast:vars]
db_server=foo.example.com
db_host=5432
db_password=top secret password

समस्या

मैं कुछ db_password (जैसे db_password ) को एक उत्तरदायी वॉल्ट में स्टोर करना चाहता हूं, लेकिन पूरी फाइल नहीं।

एक वॉल्ट-एन्क्रिप्टेड उत्तर फ़ाइल को एक अनएन्क्रिप्टेड इन्वेंट्री फ़ाइल में कैसे आयात किया जा सकता है?

मैंने क्या कोशिश की है

मैंने एक एन्क्रिप्टेड वर्र्स फ़ाइल बनाई है और इसे आयात करने का प्रयास किया है:

include: secrets

किस ansible-playbook साथ जवाब दिया:

ERROR: variables assigned to group must be in key=value form

शायद क्योंकि यह एक चर के रूप में include कथन को पार्स करने की कोशिश की।


आप group_vars का उपयोग कर सकते हैं ( docs.ansible.com/… देखें)।

group_vars नामक अपनी प्लेबुक में एक उपनिर्देशिका बनाएं।
वहां आप west_coast नाम की एक फ़ाइल west_coast और इसमें निम्न प्रविष्टियां डालते हैं:

---
db_server: foo.example.com
db_host: 5432
db_password: top secret password

इस फ़ाइल को तब एक उत्तरदायी वॉल्ट में परिवर्तित किया जा सकता है।


इस समय Ansible 2.3 के साथ एक सादे yaml दोनों एन्क्रिप्टेड और अनएन्क्रिप्टेड चर के लिए संभव है। एन्क्रिप्टेड चर के प्रारूप इस तरह है:

dbServer: PlainDatabaseServer
dbName: PlainDatabaseName
dbUser: PlainUser
dbPasswd: !vault |
      $ANSIBLE_VAULT;1.1;AES256
      63633363616165656538656537323835343634633063386137353637646663333939623464666437
      6263383933656635316436313934366564316337623435350a386362613838373363393534383232
      39663162363066313431623466363763356466376538613532333731613538373431623239626330
      6463373238366630360a623566616535376339326431363465663431623462356238636333306663
      6439

आप कथन के साथ पासवर्ड या पासवर्ड फ़ाइल का उपयोग कर चर को एन्क्रिप्ट कर सकते हैं:

ansible-vault encrypt_string "dummy" --vault-password-file pass-ansible.txt

यह कथन उपरोक्त yaml में dbPasswd चर में दिखाया गया पाठ देता है।

एन्क्रिप्टेड चर का उपयोग करने वाली प्लेबुक चलाने के लिए बस निम्न var जोड़ें:

 ansible-playbook playbooks/myplaybook --vault-password-file pass-ansible.txt

या आप --ask-vault-pass के साथ ऐसा ही कर सकते हैं जो प्लेबुक को निष्पादित करते समय आपको पासवर्ड के लिए पूछता है:

ansible-playbook playbooks/myplaybook --ask-vault-pass

यदि आपकी समस्या है कि प्रति समूह_होस्ट दोनों अनएन्क्रिप्टेड और एन्क्रिप्टेड वर्र्स फ़ाइलें हों।

आप इस उत्तरदायी सुविधा का उपयोग कर सकते हैं: http://docs.ansible.com/ansible/playbooks_best_practices.html#best-practices-for-variables-and-vaults

group_vars/ 
  san_diego/
    vars.yml  # unencrypted yaml file
    vault.yml # encrypted yaml file

Ansible स्वचालित रूप से vault.yml एन्क्रिप्टेड yaml फ़ाइल के रूप में पढ़ा जाएगा।

अद्यतन: below समाधान भी अच्छा समाधान है (उत्तर 2.3 के बाद से)


उत्तर 2.3 के बाद से आप एकल एन्क्रिप्टेड वैरिएबल एन्क्रिप्ट कर सकते हैं। आईएमओ, डॉको की सुंदरता के रूप में एक चलने की जरूरत है।

इसका एक उदाहरण दिया गया: mysql_password: password123 (main.yml के भीतर)

एक आदेश चलाएं जैसे कि:

ansible-vault encrypt_string password123 --ask-vault-pass

यह उत्पादन करेगा:

    !vault |
$ANSIBLE_VAULT;1.1;AES256
66386439653236336462626566653063336164663966303231363934653561363964363833
3136626431626536303530376336343832656537303632313433360a626438346336353331
Encryption successful

इसे अपने main.yml में पेस्ट करें:

mysql_password: !vault |
    $ANSIBLE_VAULT;1.1;AES256
    66386439653236336462626566653063336164663966303231363934653561363964363833
    3136626431626536303530376336343832656537303632313433360a626438346336353331
    Encryption successful

रन प्लेबुक:

ansible-playbook -i hosts main.yml --ask-vault-pass

डीबग के माध्यम से सत्यापित करें:

- debug:
    msg: "mysql Pwd: {{ mysql_password }}"