सार्वजनिक CI और स्रोत नियंत्रण रिपॉजिटरी जैसे BitBucket पर Ansible वॉल्ट का उपयोग करने के लिए सर्वोत्तम अभ्यास क्या हैं?


11

परिचय

Gitlab-CE जैसी निजी CI के और सोर्स कंट्रोल रिपोजिटरीज़ पर, सर्वर के लिए एक ~ / .vault_pass.txt की प्रतिलिपि बनाना संभव है और इसे CI द्वारा Ansible का उपयोग करके फ़ाइलों को डिक्रिप्ट करने के लिए उपयोग करने दें।

मुसीबत

सार्वजनिक CI और सोर्स कंट्रोल रिपोजिटरी जैसे Bitbucket पर यह एक ~ / .vault_pass.txt कॉपी करने के लिए संभव नहीं है, यह CI सर्वर को स्व।

विचार-विमर्श

Bitbucket में एन्क्रिप्टेड चर को परिभाषित करना संभव है, लेकिन जब इस फ़ाइल की जाँच की जाती है तो केवल VAULT संबंधित चर हैं:

  • ANSIBLE_ASK_VAULT_PASS
  • ANSIBLE_VAULT_PASSWORD_FILE

ये चर उस समस्या को हल करने का विकल्प नहीं हैं जब ANSIBLE_ASK_VAULT_PASSसेट होने के बाद ansible-vaultभी संकेत मिलता है:

user@host $
Vault password:

जब एक ही पासवर्ड डाला जाता है तो यह एन्क्रिप्ट की गई फ़ाइल को खोल सकता है, लेकिन इसका उद्देश्य किसी फ़ाइल की आवश्यकता के बिना फ़ाइल को खोलना या एक संकेत में एक पासवर्ड दर्ज करना है।

समस्या को हल करने का एक और प्रयास चल रहा था export ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>, लेकिन इंटरैक्टिव मोड बनी रहती है।

एक अन्य विकल्प है export ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txt, लेकिन फिर इस फ़ाइल को रिपॉजिटरी में धकेल दिया जाना चाहिए, लेकिन स्रोत नियंत्रण रिपॉजिटरी में पासवर्ड नहीं होना चाहिए।


2
हाय @ 030, क्या आप स्पष्ट कर सकते हैं कि आपका सीआई से क्या मतलब है? मेरे लिए इसका अर्थ है निरंतर एकीकरण , हालांकि गिटलैब और बिटबकेट दोनों भी स्रोत नियंत्रण रिपोजिटरी हैं - यह प्रश्न स्पष्ट होगा कि क्या सीआई का विस्तार किया गया था।
रिचर्ड स्लेटर

जवाबों:


8

--vault-password-fileइसके बजाय एक निष्पादन योग्य स्क्रिप्ट को इंगित कर सकते हैं जो stdout को लिखता है। इस अल्पज्ञात सुविधा को आपकी समस्या का समाधान करना चाहिए।

सबसे पहले, एक सरल, निष्पादन योग्य स्क्रिप्ट लिखें, जो सिस्टम वातावरण चर प्रिंट करता है, और जाँचें कि आपके स्रोत नियंत्रण में हैं। उसके बाद, उस वातावरण चर को अपने एन्सिबल-वॉल्ट सीक्रेट में सेट करने के लिए Bitbucket के एन्क्रिप्टेड वैरिएबल फीचर का उपयोग करें। अंत में, ऐसा निष्पादित करें:

ansible-playbook site.yml --vault-password-file ./mypass.sh

संदर्भ:

  1. http://docs.ansible.com/ansible/playbooks_vault.html#running-a-playbook-with-vault

  2. https://groups.google.com/forum/#!topic/ansible-devel/1vFc3y6Ogto


और फिर mypass.sh में echo $VARउदाहरण के लिए होगा और यह संस्करण BitBucket UI में सेट किया जाएगा?
०३० 0

हाँ! वैकल्पिक रूप से, यहाँ एक पायथन उदाहरण है: stackoverflow.com/questions/4906977/…
वुडलैंड हंटर

([Errno 8] Exec format error). If this is not a script, remove the executable bit from the file.
०३० 0

1

का उपयोग करते हुए

ansible-playbook site.yml --vault-password-file ./mypass.sh

परिणामस्वरूप:

ERROR! Problem running vault password script / p a t h / t o
/ e c h o _ v a u l t _ p a s s . s h ([Errno 8] Exec format error). If this is 
not a script, remove the executable bit from the file.

इस पोस्ट के आधार पर बिटकबेट-पाइपलाइनों में निम्नलिखित को परिभाषित किया गया था:

image: docker:latest

pipelines:
  default:
    - step:
        script:
          - echo $ANSIBLE_VAULT_PASSWORD > .vault_password.txt
          - ansible-playbook -i ansible/inventory ansible/site.yml --vault-password-file .vault_password.txt

-1

आपके पास एक परीक्षण सेट हो सकता है जो उत्पादन नहीं चलाता है, और उन लोगों के लिए विभिन्न फ़ाइलों को लोड करता है।

एक host_vars / localhost / वॉल्ट बनाएं जो केवल स्थानीय परीक्षण स्थापना के लिए काम करता है।

इस तरह आप एक खुले वॉल्ट पासवर्ड का उपयोग कर सकते हैं जो केवल उस स्थानीय होस्ट वॉल्ट के लिए काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.