एक डॉकटर कंटेनर में रहस्यों को पास करना


26

मेरे पास आधार डॉकटर छवि है जिसका उपयोग छवि विश्लेषण सॉफ़्टवेयर को चलाने के लिए किया जाता है। छवि से निर्मित प्रत्येक कंटेनर के लिए, कॉन्फ़िगरेशन सेटिंग्स का एक सेट होता है, जिनमें से कुछ रहस्य (एन्क्रिप्शन कुंजी, ग्राहक जानकारी, आदि) होते हैं जो कि संसाधित छवियों का विश्लेषण और वितरित करने के लिए सॉफ़्टवेयर द्वारा उपयोग किए जाते हैं। मैं इन रहस्यों को कंटेनर में सुरक्षित रूप से कैसे पारित कर सकता हूं?


Hashicorp तिजोरी
030

जवाबों:


23

डॉकटर कन्टेनर के अंदर ऐप में सीक्रेट पाने के लिए आपके पास 3 तरीके हैं। पहले 2 में डोकर कॉन्फ़िगरेशन शामिल है। अंतिम एक गुप्त स्टोर से सीधे आपके ऐप्स को रहस्य प्राप्त करना है।

1 - पर्यावरण चर

के अनुसार "12 फैक्टर एप्लिकेशन" गाइड , रहस्य केवल config हैं, और वे हमेशा वातावरण में सेट किया जाना चाहिए। आप अपने रहस्यों को डॉक चलाने के दौरान पर्यावरण चर के रूप में सेट कर सकते हैं, और आपका ऐप उन्हें वहां से एक्सेस करता है।

2 - माउंटेड वॉल्यूम

आप एक विशेष कॉन्फ़िगरेशन / रहस्य फ़ाइल के भीतर अपने सभी रहस्य रख सकते हैं, फिर माउंटेड वॉल्यूम के रूप में अपने उदाहरण पर माउंट करें ।

3 - गुप्त स्टोर से प्राप्त करें

जैसा कि @ 030 में उल्लेख किया गया है, आप हाशिकॉर्प वॉल्ट (या "अमेज़ॅन सीक्रेट्स मैनेजर", या इस तरह की किसी भी सेवा का उपयोग कर सकते हैं)।
आपका ऐप, या एक साइडकार ऐप, डॉकर कंटेनर पर किसी भी कॉन्फ़िगरेशन से निपटने के बिना, सीधे इसकी ज़रूरत के रहस्यों को प्राप्त कर सकता है। यह विधि आपको डायनामिक रूप से बनाए गए रहस्यों (ऐसी प्रणालियों की एक बहुत आकर्षक विशेषता) का उपयोग करने की अनुमति देगा और बिना इस रहस्य की चिंता किए बिना कि फ़ाइल सिस्टम से दृश्य-सक्षम होने या docker कंटेनर के env चर का निरीक्षण करने से।

निजी राय

मेरा मानना ​​है कि env चर जाने का रास्ता है। इसे प्रबंधित करना आसान है, और आप अभी भी हैशिकॉर्प वॉल्ट जैसे एक गुप्त स्टोर से खींच सकते हैं, अगर आपके पास सीआई बिल्ड सिस्टम है, तो निर्माण के दौरान रहस्यों को खींचें और जब आप तैनात करते हैं तो उन्हें सेट करें। आपको दोनों दुनिया के सर्वश्रेष्ठ मिलते हैं, और आपके डेवलपर्स के अतिरिक्त लाभ को रहस्यों को लाने के लिए एप्लिकेशन कोड लिखने की आवश्यकता नहीं है। देवताओं को अपने कोड की कार्यक्षमता पर ध्यान केंद्रित करना चाहिए, और पासवर्ड लाने जैसे व्यवस्थापक कार्यों से निपटना नहीं चाहिए।

आपके एप्लिकेशन के कोड को स्वयं एप्लिकेशन कार्यक्षमता पर ध्यान केंद्रित करना चाहिए, और पासवर्ड लाने जैसे बैकेंड कार्यों से निपटना नहीं चाहिए। ठीक 12 फैक्टर ऐप की तरह।

संपादित करें: डेवलपर बनाम SysAdmin साइलो-इंग के निहितार्थ को हटाने के लिए अंतिम वाक्य को बदल दिया। कार्यों को स्वयं एक कोड परिप्रेक्ष्य से अलग होना चाहिए, लेकिन DevOps दोनों को ध्यान में रखते हुए और सीमित नहीं होने के लिए समान व्यक्तियों के बारे में है।

व्यक्तिगत राय (अपडेट)

@ डर्क की उत्कृष्ट टिप्पणी ( एक डॉकटर कंटेनर के लिए रहस्य पारित करना ), ईएनवी संस्करण पर एक गुप्त स्टोर को प्राथमिकता देने के लिए एक बहुत मजबूत तर्क है, क्योंकि वे लीक नहीं करना चाहते हैं।


2
यह साइलो को बढ़ावा देता है। DevOps चीजों को दीवार पर फेंकने के बजाय एक साथ कर रहे हैं।
030

2
कोड को बुनियादी ढांचे के घटकों से अलग होना चाहिए । वास्तविक लोग बुनियादी ढांचे के स्वचालन और ऐप कोड आधार दोनों को कोड कर सकते हैं, लेकिन कार्यों को स्वयं अलग होना चाहिए। मैं देख रहा हूं कि मेरे मूल उत्तर का अंतिम वाक्य देवों, लोगों से अलग था। यही कारण है कि है एक गलती। मैं इसे स्पष्ट करने के लिए संपादित करूँगा।
बूमशैडो

7
पर्यावरण चर में रहस्य डालकर उन्हें लीक होने के लिए विभिन्न संभावनाएं प्रदान की जाती हैं। कुछ उदाहरण: कंटेनर चलाने वाले मशीन पर डोकर डेमॉन तक पहुंच के साथ हर कोई उन्हें inspectया execकमांड का उपयोग करके देख सकता है । stdoutकुछ डीबग मोड में चलने पर पर्यावरण चर अक्सर लॉग इन या लॉगफ़ाइल्स में डंप हो जाते हैं । सभी बच्चे पैदा करने की प्रक्रिया पढ़ सकते हैं और उन्हें उजागर कर सकते हैं जो आपके नियंत्रण से बाहर हो सकता है। अधिक जानकारी यहाँ पर: diogomonica.com/2017/03/27/…
डिर्क

1
मैं इस सवाल से भी जूझ रहा हूं। मुझे जो बात समझ में नहीं आती है, भले ही आप अपने रहस्यों को सुरक्षित करने के लिए एक क्रेडेंशियल वॉल्ट का उपयोग करें, आपको अभी भी उस वॉल्ट तक पहुंच प्राप्त करने के लिए प्रमाणित करना होगा, और संभवतः इसके लिए कुछ रहस्य की आवश्यकता होती है। पासवर्ड-संरक्षित KeyStore फ़ाइल का उपयोग करने के लिए भी यही चिंता लागू होती है। क्या हम हमेशा पर्यावरण में कम से कम "मेटा क्रेडेंशियल" पारित करने के साथ फंस गए हैं?
मल्लाहिल

1
@Wheezil एक मेटा-क्रेडेंशियल कई विशिष्ट क्रेडेंशियल्स की तुलना में सुरक्षित करना आसान है। आप अक्सर और स्वचालित रूप से मेटा क्रेडेंशियल को घुमा सकते हैं। मेटा क्रेडेंशियल एक तिजोरी में जा सकता है जो एक सुरक्षित होस्ट पर है और इसमें आईपी व्हाइटनिंग जैसी चीजें हो सकती हैं ताकि यह केवल आपके उत्पादन सबनेट से कनेक्शन स्वीकार करे। आप यह भी सुनिश्चित कर सकते हैं कि तिजोरी उड़ान और आपसी tsl और प्रमाणपत्र पिनिंग और बाकी सभी सर्वोत्तम अभ्यासों में एन्क्रिप्शन का उपयोग करती है जो चीजों को अधिक सुरक्षित बनाती हैं।
simbo1905

1

केवल पाइप का उपयोग करने का एक और विकल्प है:

docker run -d -i --name $n alpine sh -c 'read A; echo "[$A]"; exec some-server'
docker exec -i $n sh -c 'cat > /proc/1/fd/0' <<< _a_secret_

सबसे पहले, docker डेमन के साथ बनाएं -i, कमांड read Aइनपुट से प्रतीक्षा कर रहा है /proc/1/fd/0; फिर दूसरे डॉक कमांड को चलाएं, स्टडिन से रहस्य को पढ़ना और अंतिम हैंगिंग प्रक्रिया में रीडायरेक्ट करें।

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