मैं .tf और .tfstate में रहस्यों को कैसे प्रबंधित कर सकता हूं?


46

मैं नए परीक्षण वातावरण बनाने के लिए mysql उपयोगकर्ताओं और अनुदान की सूची रखने के लिए टेराफॉर्म MySQL प्रदाता का उपयोग करना चाहूंगा । .tfऔर .tfstateफ़ाइलें दोनों प्लेन में MySQL पासवर्ड संग्रहीत करना चाहते हैं लगते हैं।

के बारे में .tf:

यह मेरी समझ है कि .tfफाइलें संशोधन नियंत्रण में रहती हैं और एक टीम द्वारा बनाए रखी जाती हैं। जब रहस्य अंदर हैं तो यह अभ्यास कैसे अलग है .tf? इन मूल्यों को एन्क्रिप्ट करना संभव है?

संबंधित .tfstate:

मैं .tfstateTerraform लागू करने के बाद सुरक्षित रूप से कहीं स्टोर कर सकता हूं , लेकिन इस उपयोग के मामले में इसे स्टोर नहीं करना बेहतर होगा?

जवाबों:


22

टेराफॉर्म निमंत्रण के दौरान चर के साथ एक अतिरिक्त फ़ाइल जोड़ने का समर्थन करता है

प्रलेखन: https://www.terraform.io/intro/getting-started/variables.html#from-a-file

हम secrets.tfvarsटेराफॉर्म के प्रत्येक आह्वान पर एक फ़ाइल प्रदान करने के लिए उस सुविधा का उपयोग कर रहे हैं । हम कमांड को लपेटने के लिए एक स्क्रिप्ट का उपयोग भी करते हैं ताकि उसका मंगलाचरण सुसंगत हो और सभी टीम के सदस्य एक ही गलती करने से बचें। आवरण .tfstateएक निष्पादन से पहले S3 के साथ सिंक्रनाइज़ होता है, और .tfstateअंत में S3 पर वापस धकेलता है । मैं दो लोगों को एक ही समय में टेराफॉर्म शुरू करने से रोकने के लिए कौंसुल में संग्रहीत राज्य के साथ एक ही काम करने के बारे में भी सुनता हूं, यहां तक ​​कि कौंसुल में एक प्रकार का सेमाफोर भी जोड़ता है।

जब आप किसी variables.tfफ़ाइल में डिफ़ॉल्ट मान सेट करने से बचते हैं , तो यह उपयोगकर्ता को मूल्य इनपुट करने के लिए मजबूर करता है। यह या तो मैन्युअल रूप से दर्ज किया जा सकता है या -var-fileऊपर वर्णित कमांड विकल्प का उपयोग कर सकता है। अपने रहस्यों पर डिफ़ॉल्ट सेट न करना उन परिवर्तनों को लागू करने का एक अच्छा तरीका है, जिन्हें रहस्यों में बदलाव की आवश्यकता होती है।

secrets.tfvarsफ़ाइल रहस्य जो संस्करण नियंत्रण में संग्रहीत नहीं हैं साथ फ़ाइलों में से एक के लिए एक प्रतीकात्मक कड़ी है। हम तो जैसे, कई, पर्यावरण के प्रति एक है secrets-prod.tfvars, secrets-dev.tfvars, secrets-stg.tfvars, आदि ...

वॉल्ट में डेटा के आधार पर रैपर स्क्रिप्ट के दौरान या इन रहस्यों को साझा करने के लिए किसी अन्य तरीके से इन रहस्यों की फ़ाइलों को उत्पन्न करने के लिए एक बेहतर अभ्यास होगा । चूंकि वर्तमान में जब रहस्यों का प्रारूप बदलता है, या खुद को रहस्य करता है, तो हमें इसे संस्करण नियंत्रण चैनल के बाहर टीम से संवाद करने की आवश्यकता है - और यह हमेशा अच्छी तरह से, ईमानदार होने के लिए काम नहीं करता है। लेकिन रहस्य बार-बार बदलते हैं।



8

हम अपने रहस्यों को संभालने से बचने से बचते हैं। यहां तक ​​कि अगर आप ऊपर बताए गए किसी var फ़ाइल "secrtes.tfvars" द्वारा रहस्यों को इंजेक्ट करने का प्रबंधन करते हैं, तो ये रहस्य आपके टेराफ़ॉर्म (दूरस्थ-) स्थिति में संग्रहीत किए जाएंगे।

आप उदाहरण के लिए S3 प्राधिकरण का उपयोग करके दूरस्थ-राज्य फ़ाइलों की सुरक्षा कर सकते हैं, या आप स्थानीय राज्य फ़ाइलों को gignignore कर सकते हैं, लेकिन हमने इस तरह की सुरक्षा पर भरोसा नहीं करने का फैसला किया।


2
इसके अलावा github.com/hashicorp/terraform/issues/516 की जाँच करें जहाँ वे गुप्त लीक के tfstate के मुद्दे को ट्रैक करते हैं
jottr

6

यदि आप AWS पर हैं, तो AWS ब्लॉग पर Segment.io द्वारा "राइट राईट टू मैनेज सीक्रेट्स" देखें । हम रहस्यों को प्रबंधित करने के लिए अपने सभी ग्राहकों का उपयोग करने की वकालत करते हैं । यह KMS कुंजी के साथ AWS सिस्टम मैनेजर पैरामीटर स्टोर (SSM) का लाभ उठाकर काम करता है। यह सुनिश्चित करता है कि रहस्यों को आराम से (और पारगमन में) एन्क्रिप्ट किया गया है, IAM के साथ सुरक्षित है, CloudTrails के साथ श्रव्य है, और केवल रन-टाइम पर पर्यावरण चर के रूप में उजागर होता है।chamber

बाद चैम्बर को विन्यस्त और केएमएस कुंजी की स्थापना, हम पैरामीटर दुकान में रहस्य लिखें।

chamber write db TF_VAR_DB_USER foobar
chamber write db TF_VAR_DB_PASS secret

जब आप टेराफ़ॉर्म कहते हैं तो उन रहस्यों का उपयोग करें।

chamber exec db -- terraform plan

इसका मतलब यह है कि आप एक चर बुलाया परिभाषित किया है DB_USERऔर DB_PASSअपने एचसीएल कोड में।

उदाहरण के लिए, आप इसे जोड़ सकते हैं variables.tf

variable "DB_USER" { }
variable "DB_PASS" { }

नोट: chamber हमेशा अपरकेस में पर्यावरण चर निर्यात करेगा

हम terraform-aws-kms-keyकेएमएस कुंजी को आसान बनाने के लिए टेराफॉर्म मॉड्यूल कहते हैं । chamberकई नामों के साथ उपयोग करने के तरीके के साथ-साथ रहस्यों को प्रबंधित करने के लिए टेराफॉर्म के साथ चैम्बर का उपयोग कैसे करें के उदाहरणों के साथ हमारे विस्तृत दस्तावेज देखें । चैम्बर निर्भरता के प्रावधान के लिए हमारा पूरा संदर्भ उदाहरण देखें ।

के रूप में .tfstate, आप राज्य फ़ाइल में सादे-पाठ रहस्यों के अस्तित्व के बारे में एक बहुत अच्छा बिंदु लाते हैं। वास्तव में इसके आसपास कोई रास्ता नहीं है। एक योजना बनाने के लिए परिवर्तनों की गणना करने के लिए टेराफॉर्म के लिए, इसे "पहले" और "बाद में" स्थिति को जानना होगा। इस कारण से, हम अनिवार्य संस्करण के साथ एन्क्रिप्टेड S3 बाल्टी का उपयोग करने की सलाह देते हैं। terraform-aws-tfstate-backendसबसे अच्छी प्रथाओं के अनुसार एक बाल्टी और डायनेमोडी लॉकिंग टेबल का प्रावधान करने के लिए मॉड्यूल का उपयोग करें ।


यह AWS सेवाओं से अत्यधिक जुड़ा हुआ है, जिसका प्रश्न उल्लेख नहीं करता है और वास्तव में आधारभूत संरचना या किसी अन्य क्लाउड पर इसका उत्तर नहीं देता है।
तेंसीबाई

@tensibai, आप सही हैं। मूल सवाल सबसे अच्छी सिफारिश करने के लिए ऑपरेटिंग प्लेटफॉर्म का पता लगाने के लिए पर्याप्त जानकारी प्रदान नहीं करता है। प्लेटफॉर्म की क्षमताओं के आधार पर हर प्लेटफॉर्म अलग होगा। समय पर या बेनामी उपयोगकर्ता वॉल्ट और टेराफॉर्म एंटरप्राइज के संयोजन का उपयोग करने पर विचार कर सकते हैं। इसे लागू करने की गुंजाइश बहुत अधिक होगी। :)
एरिक ओस्टरमैन

मैं पहले से ही AWS सीक्रेट्स मैनेजर का उपयोग करता हूं और चैम्बर और पैरामीटर स्टोर का उपयोग नहीं करना चाहता। क्या सीक्रेट मैनेजर के साथ भी ऐसा ही संभव है?
red888

3

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


2

मैंने कुछ अलग तरीकों से देखा लेकिन मुझे विशेष रूप से वॉल्ट जैसी बड़ी चीज़ को लागू करने से पहले एडहॉक चीज़ के लिए गिट-क्रिप्ट पसंद आया।


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