डॉकर कंटेनरों के भीतर सुरक्षा अपडेट कैसे संभालें?


117

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

ऑपरेटिंग सिस्टम पर संकुल के अद्यतन संस्करण (उदाहरण के लिए RHEL पर "यम अपडेट") को स्थापित करने के लिए पैकेज मैनेजर कमांड को निष्पादित करके पारंपरिक रूप से सुरक्षा अद्यतन लागू किया गया है। लेकिन कंटेनर तकनीक जैसे डॉकर के आगमन के साथ जहां कंटेनर की छवियां अनिवार्य रूप से एप्लिकेशन और प्लेटफ़ॉर्म दोनों को बंडल करती हैं, कंटेनर को आज तक रखने का विहित तरीका क्या है? मेजबान और कंटेनर दोनों के पास अपने, स्वतंत्र, पैकेज के सेट हैं जिन्हें होस्ट पर अपडेट करने और अपडेट करने की आवश्यकता है, कंटेनरों के अंदर किसी भी पैकेज को अपडेट नहीं करेंगे। आरएचईएल 7 की रिलीज के साथ जहां डॉकटर कंटेनरों को विशेष रूप से चित्रित किया गया है, यह सुनना दिलचस्प होगा कि रेडहैट को कंटेनरों के सुरक्षा अपडेट को संभालने का अनुशंसित तरीका क्या है।

कुछ विकल्पों पर विचार:

  • होस्ट पर पैकेज मैनेजर अपडेट पैकेज देने से कंटेनरों के अंदर पैकेज अपडेट नहीं होंगे।
  • अद्यतनों को लागू करने के लिए सभी कंटेनर छवियों को पुनर्जीवित करने के बाद एप्लिकेशन और प्लेटफ़ॉर्म के बीच अलगाव को तोड़ना प्रतीत होता है (प्लेटफ़ॉर्म को अपडेट करने के लिए एप्लिकेशन बिल्ड प्रक्रिया तक पहुंच की आवश्यकता होती है जो डॉकर छवियों को उत्पन्न करता है)।
  • चल रहे कंटेनरों में से प्रत्येक के अंदर चल रहे मैनुअल कमांड बोझिल लगते हैं और अगली बार कंटेनरों को एप्लिकेशन रिलीज़ कलाकृतियों से अपडेट किए जाने पर जोखिम कम हो जाते हैं।

इसलिए इनमें से कोई भी दृष्टिकोण संतोषजनक नहीं है।


1
इसके लिए सबसे अच्छा विचार मैंने अब तक प्रोजेक्ट एटॉमिक है । मुझे नहीं लगता कि यह प्राइम टाइम के लिए काफी तैयार है।
माइकल हैम्पटन

1
Valko, क्या कार्यप्रवाह आप के साथ खत्म हो गया? मैं लंबी अवधि के कंटेनर चला रहा हूं (उदाहरण के लिए php-cgi की मेजबानी), और जो मैंने अब तक पाया है वह है: docker pull debian/jessieछवि को अपडेट करने के लिए, फिर मेरी मौजूदा छवि को फिर से बनाएं, फिर कंटेनरों को रोकें और उन्हें फिर से चलाएं ( नई छवि के साथ)। मेरे द्वारा बनाई गई छवियां पिछले वाले के समान नाम हैं, इसलिए शुरुआत स्क्रिप्ट के माध्यम से की जाती है। मैं तब "अनाम" चित्र हटाता हूं। मैं निश्चित रूप से एक बेहतर वर्कफ़्लो की सराहना करूंगा।
मीशा

1
miha: कि मैं क्या कर रही है के समान लगता है। मूल रूप से लगातार नई रिलीज़ करने के हिस्से के रूप में सभी छवियों को अपडेट और पुनर्निर्माण करना। और नई छवियों का उपयोग करके कंटेनरों को पुनरारंभ करना।
मार्कस हॉलमैन

1
सर्वश्रेष्ठ उत्तर यहाँ एक बहुत मदद करता है एक स्क्रिप्ट जो वास्तव में क्या जोहानिस Ziemke कहा करने के लिए मुख्य commandlines शामिल न होने के कारण:
हडसन सैंटोस

दिलचस्प सवाल। मुझे खुद पर आश्चर्य होता है। यदि आपके पास एक डॉकटर होस्ट पर 20 एप्लिकेशन चल रहे हैं, तो आपको आधार छवियों को अपग्रेड करना होगा, पुनर्निर्माण और पुनरारंभ करना होगा! 20 एप्लिकेशन और आपको यह भी नहीं पता है कि सुरक्षा अद्यतन ने उन सभी को प्रभावित किया है, या उनमें से सिर्फ एक। आपको अपाचे के लिए छवि को फिर से बनाना होगा जब सुरक्षा अद्यतन ने उदाहरण के लिए केवल libpng को प्रभावित किया। तो आप अनावश्यक रीबिल्ड और रीस्टार्ट के साथ समाप्त होते हैं ...
Dalibor Filus

जवाबों:


47

एक डॉकर छवि बंडलों के अनुप्रयोग और "प्लेटफॉर्म", यह सही है। लेकिन आमतौर पर छवि एक आधार छवि और वास्तविक अनुप्रयोग से बनी होती है।

तो सुरक्षा अद्यतन को संभालने के लिए विहित तरीका आधार छवि को अपडेट करना है, फिर अपनी एप्लिकेशन छवि का पुनर्निर्माण करें।


3
धन्यवाद, यह उचित लगता है। बस अभी भी प्लेटफ़ॉर्म को अपडेट करने की इच्छा है इसलिए बोलने के लिए पूरे एप्लिकेशन को रीपैकेजिंग नहीं करना पड़ेगा (उदाहरण के लिए सिंगल बेस इमेज के अपडेट के कारण 100 अलग-अलग एप्लिकेशन इमेज को फिर से बनाने के लिए)। लेकिन शायद यह एक छवि के अंदर सब कुछ एक साथ बांधने के डॉकर दर्शन के साथ अपरिहार्य है।
मार्कस हॉलमैन

3
@ValkoSipuli आप हमेशा इस प्रक्रिया को स्वचालित करने के लिए एक स्क्रिप्ट लिख सकते हैं।
dsljanus

क्यों नहीं उपयुक्त-अपग्रेड, dnf उन्नयन, pacman -syu, आदि कंटेनर के अंदर बराबर? आप एक शेल स्क्रिप्ट भी बना सकते हैं जो ऐसा करता है और फिर एप्लिकेशन चलाता है, फिर उस कंटेनर के एंट्रीपॉइंट के रूप में उपयोग करें ताकि जब कंटेनर चालू हो जाए / फिर से चालू हो जाए तो इसके सभी पैकेजों को अपग्रेड करें।
आर्थर

8
@ArthurKay दो कारण: 1) आप कंटेनर के आकार को उड़ा देते हैं, क्योंकि अपग्रेड होने वाले सभी पैकेज छवि में पुराने पैकेज को रखते हुए कंटेनर परत में जोड़ दिए जाएंगे। 2) यह (कंटेनर) छवियों का सबसे बड़ा लाभ पराजित करता है: आपके द्वारा चलाई गई छवि वही नहीं है जो आप बनाते हैं / परीक्षण करते हैं क्योंकि आप रनटाइम पर पैकेज बदलते हैं।
जोहान्स की मछली 'जिमीके

7
एक बात जो मुझे समझ में नहीं आती है: यदि आप एक ऐसी कंपनी का सॉफ्टवेयर खरीद रहे हैं जिसे डॉकटर कंटेनर के रूप में भेजा गया है, तो क्या आपको हर बार सुरक्षा पैकेज के लिए सॉफ्टवेयर पैकेज के पुनर्निर्माण के लिए आवेदन पैकेज का पुनर्निर्माण करना पड़ता है ? कौन सी कंपनी उस तरह से अपनी खुली कमजोरियों पर नियंत्रण छोड़ देगी?
सेंटेंज़ा

7

कंटेनरों को हल्के और विनिमेय माना जाता है। यदि आपके कंटेनर में कोई सुरक्षा समस्या है, तो आप उस कंटेनर के एक संस्करण का पुनर्निर्माण करते हैं जो पैच किया गया है और नए कंटेनर को तैनात करता है। (कई कंटेनर एक मानक आधार छवि का उपयोग करते हैं जो अपनी निर्भरता को स्थापित करने के लिए मानक-पैकेज प्रबंधन उपकरण का उपयोग करता है-जैसे कि पुन: निर्माण, रिपॉजिटरी से अपडेट खींचेगा)

जब आप कंटेनरों के अंदर पैच कर सकते हैं, तो यह अच्छा नहीं होगा।



0

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


-1

यह आम तौर पर आपके द्वारा प्रदान किए गए तीन विकल्पों से भी बदतर है। अधिकांश डॉकटर चित्र पैकेज प्रबंधकों के साथ नहीं बनाए जाते हैं इसलिए आप डॉक छवि में केवल शेल नहीं कर सकते हैं और अपडेट जारी कर सकते हैं। आपको या तो पुनर्निर्माण करना होगा या डॉकटर छवि को पुनः प्राप्त करना होगा।

तथ्य यह है कि आपको पुनर्निर्माण करने की आवश्यकता है या सुरक्षा पैच के पुनर्निर्माण के लिए दूसरों को रोक रहे हैं ज्यादातर मामलों में अनुचित लगता है।

मैं डॉकटर कंटेनरों में सोनार और रेडर को तैनात करने पर विचार कर रहा था, लेकिन यह जानते हुए कि मेरे कंटेनर को नियमित सुरक्षा अपडेट नहीं मिल रहा है, डील ब्रेकर है। मेरे कंटेनर के लिए सुरक्षा अद्यतनों को प्रबंधित करना बिना किसी परेशानी के निपटने के लिए पर्याप्त परेशानी है, व्यक्तिगत रूप से प्रत्येक डॉकटर छवि पर व्यक्तिगत रूप से सुरक्षा अद्यतन लागू करने के लिए।


1
आपकी पोस्ट को उत्तर नहीं माना जाएगा, क्योंकि आप प्रश्न का उत्तर नहीं देते हैं। कृपया इसे प्रश्न के टिप्पणी के रूप में जोड़ें और अपने "उत्तर" को हटा दें। StackExchange एक फ़ोरम नहीं है, लेकिन इसे Q & A माना जाना चाहिए जहाँ विशेषज्ञ उन सवालों के जवाब देते हैं जिनसे वे मदद कर सकते हैं।
फिलिप -ज़्यान के ली- स्टॉकमैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.