ब्लॉग

मल्टी-टेनेंट Docker आइसोलेशन के लिए चरण-दर-चरण ब्लूप्रिंट

होस्टिंग ओवरहेड को नियंत्रित करते हुए Docker में मल्टी-टेनेंट वर्कलोड को आइसोलेट करें। जानें कि नेमस्पेस, cgroups, नेटवर्क नीतियां और रनटाइम हार्डनिंग कैसे कॉन्फ़िगर करें।

सारांश

एकाधिक क्लाइंट अभियानों या आंतरिक वेब संपत्तियों के लिए साझा इन्फ्रास्ट्रक्चर प्रबंधित करते समय अक्सर होस्टिंग लागत और डेटा सुरक्षा को लेकर वरिष्ठ नेतृत्व के साथ मतभेद पैदा होते हैं। Docker कंटेनर समर्पित वर्चुअल मशीनों का एक हल्का (lightweight) विकल्प प्रदान करते हैं, लेकिन डिफ़ॉल्ट सेटअप में गंभीर आइसोलेशन कमियां रह जाती हैं। वास्तविक मल्टी-टेनेंसी के लिए कर्नेल, प्रोसेस, नेटवर्क और स्टोरेज स्तरों पर सुविचारित सीमाओं की आवश्यकता होती है। यह मार्गदर्शिका नेटिव Linux आइसोलेशन प्रिमिटिव्स का उपयोग करके मल्टी-टेनेंट Docker डिप्लॉयमेंट को सुरक्षित करने के लिए एक व्यावहारिक पांच-चरणीय ढांचा प्रदान करती है। आप सीखेंगे कि संसाधन कोटा कैसे लागू करें, प्रोसेस विशेषाधिकारों को कैसे प्रतिबंधित करें, कंटेनर नेटवर्क को कैसे विभाजित करें और सही आइसोलेशन टियर का चयन कैसे करें। इस ब्लूप्रिंट का पालन करके, आप टेनेंट परिवेशों की सुरक्षा कर सकते हैं और गैर-तकनीकी हितधारकों के सामने इन्फ्रास्ट्रक्चर बजट का बचाव कर सकते हैं।

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

प्रत्येक डिजिटल संपत्ति को उसकी अपनी वर्चुअल मशीन (VM) देने से "शोर मचाने वाले पड़ोसियों" (noisy neighbors) की समस्या समाप्त हो जाती है, लेकिन यह आपके परिचालन बजट को तेज़ी से समाप्त कर देता है। मानक Docker डिप्लॉयमेंट एकल ऑपरेटिंग सिस्टम कर्नेल पर कई साइटें चलाकर लागत की समस्या को हल करते हैं, लेकिन डिफ़ॉल्ट कॉन्फ़िगरेशन खतरनाक आइसोलेशन अंतराल छोड़ देते हैं। यदि एक टेनेंट एप्लिकेशन में कोई अनियंत्रित स्क्रिप्ट या दुर्भावनापूर्ण उल्लंघन होता है, तो उस होस्ट पर मौजूद प्रत्येक सह-होस्ट किया गया एप्लिकेशन जोखिम में आ जाता है।

Docker में कठोर मल्टी-टेनेंट आइसोलेशन को कॉन्फ़िगर करने के लिए इस चरण-दर-चरण तकनीकी ब्लूप्रिंट का उपयोग करें। सिस्टम स्थिरता की रक्षा करने, टेनेंट डेटा को अलग करने और अपने नेतृत्व के लिए तकनीकी इन्फ्रास्ट्रक्चर विकल्पों को स्पष्ट व्यावसायिक मूल्य में बदलने के लिए इन पांच परिचालन चरणों को लागू करें।


1. कंट्रोल ग्रुप्स का उपयोग करके हार्ड रिसोर्स कोटा लागू करें

प्रत्येक कंटेनर पर तुरंत स्पष्ट CPU, मेमोरी और डिस्क I/O सीमाएं निर्धारित करें। जब कई टेनेंट एक अंतर्निहित होस्ट साझा करते हैं, तो अप्रतिबंधित कंटेनर सिस्टम संसाधनों के लिए प्रतिस्पर्धा करते हैं। एक अनियंत्रित डेटाबेस क्वेरी या उच्च-ट्रैफ़िक अभियान होस्ट के संपूर्ण मेमोरी पूल की खपत कर सकता है, जिससे Linux आउट-ऑफ़-मेमोरी (OOM) किलर मनमाने सिस्टम प्रोसेस को समाप्त करने के लिए सक्रिय हो जाता है।

Linux कंट्रोल ग्रुप्स (cgroups) यह नियंत्रित करते हैं कि कोई भी कंटेनर कितनी कंप्यूट क्षमता का उपभोग कर सकता है। इन सीमाओं को सीधे अपनी डिप्लॉयमेंट परिभाषाओं में लागू करें:

services:
  tenant_app:
    image: nginx:alpine
    deploy:
      resources:
        limits:
          cpus: '0.75'
          memory: 512M
        reservations:
          cpus: '0.25'
          memory: 256M
  • मेमोरी सीमाएं (limits.memory): एक निश्चित सीमा (hard ceiling) स्थापित करता है। यदि कंटेनर 512 मेगाबाइट से अधिक हो जाता है, तो कर्नेल पड़ोसी टेनेंट्स को प्रभावित किए बिना उस कंटेनर के भीतर प्रोसेस को समाप्त कर देता है।
  • मेमोरी आरक्षण (reservations.memory): बेसलाइन मेमोरी आवंटन की गारंटी देता है ताकि कम ट्रैफ़िक वाले एप्लिकेशन उत्तरदायी बने रहें।
  • CPU सीमाएं (limits.cpus): कंटेनर को उपलब्ध CPU कोर के अधिकतम अंश तक सीमित करता है, जिससे एकल-टेनेंट द्वारा CPU के अत्यधिक उपयोग को रोका जा सके।

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


2. नेमस्पेस और नॉन-रूट उपयोगकर्ताओं के साथ टेनेंट प्रोसेस को विभाजित करें

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

उपयोगकर्ता नेमस्पेस और स्पष्ट गैर-रूट निष्पादन के माध्यम से प्रोसेस आइसोलेशन लागू करें:

  1. विशेषाधिकार रहित रनटाइम उपयोगकर्ताओं को परिभाषित करें: अपनी Dockerfiles के भीतर समर्पित, कम-विशेषाधिकार वाले सेवा उपयोगकर्ता बनाएं।
    FROM php:8.2-fpm-alpine
    RUN addgroup -g 10001 tenantgroup && \n       adduser -u 10001 -D -G tenantgroup tenantuser
    USER tenantuser
    
  2. उपयोगकर्ता नेमस्पेस सक्षम करें (userns-remap): Docker डेमॉन (/etc/docker/daemon.json) को कंटेनर उपयोगकर्ता आईडी को होस्ट पर एक विशेषाधिकार रहित श्रेणी में रीमैप करने के लिए कॉन्फ़िगर करें।
    {
      "userns-remap": "default"
    }
    

Linux नेमस्पेस सिस्टम दृश्यता को विभाजित करते हैं। प्रोसेस आईडी (PID) नेमस्पेस यह सुनिश्चित करता है कि टेनेंट A, टेनेंट B से संबंधित प्रोसेस को देख, संकेत (signal) दे या समाप्त नहीं कर सकता है। माउंट (MNT) नेमस्पेस प्रत्येक टेनेंट को फ़ाइल सिस्टम का एक अलग दृश्य देता है, जबकि IPC नेमस्पेस अनधिकृत इंटर-प्रोसेस संचार को अवरुद्ध करते हैं।

उपयोगकर्ता नेमस्पेस को रीमैप करना कंटेनर एस्केप वैक्टर को निष्प्रभावी करता है: एक प्रोसेस जो मानती है कि वह अपने कंटेनर के अंदर root (UID 0) है, होस्ट मशीन पर एक विशेषाधिकार रहित आईडी (जैसे UID 165536) पर मैप की जाती है। यदि कोई एक्सप्लॉइट कंटेनर बैरियर को बायपास कर भी लेता है, तो हमलावर एक गैर-विशेषाधिकार प्राप्त शेल में पहुंचता है जो होस्ट कॉन्फ़िगरेशन को संशोधित करने या पड़ोसी टेनेंट डायरेक्टरी तक पहुंचने में असमर्थ होता है।


3. कर्नेल विशेषाधिकार हटाएं और रीड-ओनली फ़ाइल सिस्टम लागू करें

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

सभी डिफ़ॉल्ट क्षमताओं को हटाकर और केवल आवश्यक परिचालन फ़्लैग वापस जोड़कर रनटाइम कंटेनरों को लॉक करें:

services:
  tenant_web:
    image: custom-nginx:latest
    read_only: true
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
    security_opt:
      - no-new-privileges:true
      - seccomp=default.json
    tmpfs:
      - /tmp:rw,noexec,nosuid,size=64m
      - /var/run:rw,noexec,nosuid,size=16m
  • cap_drop: - ALL: कंटेनर प्रोसेस से प्रत्येक कर्नेल क्षमता को हटा देता है।
  • cap_add: - NET_BIND_SERVICE: विशेषाधिकार प्राप्त पोर्ट (जैसे 80 और 443) से बाइंड करने की स्पष्ट अनुमति देता है, जबकि रॉ नेटवर्क सॉकेट हेरफेर को ब्लॉक करता है।
  • read_only: true: संपूर्ण कंटेनर रूट फ़ाइल सिस्टम को रीड-ओनली के रूप में माउंट करता है। हमलावर दुर्भावनापूर्ण बायनेरी डाउनलोड नहीं कर सकते, PHP स्क्रिप्ट को संशोधित नहीं कर सकते, या वेब सर्वर कॉन्फ़िगरेशन फ़ाइलों को बदल नहीं सकते।
  • tmpfs: आवश्यक स्क्रैच फ़ाइलों (जैसे /tmp) के लिए अस्थिर, इन-मेमोरी डायरेक्टरी आवंटित करता है, जबकि बाइनरी निष्पादन (noexec) और विशेषाधिकार वृद्धि (nosuid) को अवरुद्ध करता है।

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


4. टेनेंट परिवेशों के बीच नेटवर्क विभाजित करें

डिफ़ॉल्ट ब्रिज नेटवर्किंग को अक्षम करें और प्रत्येक टेनेंट स्टैक के लिए कस्टम, पृथक सॉफ़्टवेयर-परिभाषित ब्रिज नेटवर्क स्थापित करें। डिफ़ॉल्ट रूप से, मानक Docker ब्रिज नेटवर्क पर रखे गए कंटेनर आंतरिक IP पतों के माध्यम से एक दूसरे को खोज सकते हैं और संचार कर सकते हैं। एक टेनेंट की मार्केटिंग माइक्रोसर्विस में भेद्यता उस होस्ट पर हर दूसरे आंतरिक डेटाबेस और एप्लिकेशन तक पार्श्व संचलन (lateral movement) की अनुमति देती है।

प्रति टेनेंट स्वतंत्र नेटवर्क ब्रिज घोषित करके टेनेंट ट्रैफ़िक को पूरी तरह से अलग करें:

networks:
  tenant_alpha_net:
    driver: bridge
    internal: true
  tenant_beta_net:
    driver: bridge
    internal: true
  public_gateway_net:
    driver: bridge

services:
  alpha_app:
    image: tenant_a_app:latest
    networks:
      - tenant_alpha_net
      - public_gateway_net

  alpha_db:
    image: mariadb:10.11
    networks:
      - tenant_alpha_net

  beta_app:
    image: tenant_b_app:latest
    networks:
      - tenant_beta_net
      - public_gateway_net

  beta_db:
    image: mariadb:10.11
    networks:
      - tenant_beta_net
  • टेनेंट आइसोलेशन: alpha_app और alpha_db विशेष रूप से tenant_alpha_net पर संचार करते हैं। beta_app alpha_db तक नहीं पहुंच सकता, भले ही कोई हमलावर आंतरिक सबनेट को स्कैन करे।
  • इंटरनल फ़्लैग (internal: true): डेटाबेस नेटवर्क को सीधे बाहरी इंटरनेट पर ट्रैफ़िक रूट करने से रोकता है, जिससे इनबाउंड और आउटबाउंड एक्सेस केवल एप्लिकेशन कंटेनरों तक ही सीमित रहता है।
  • रिवर्स प्रॉक्सी गेटवे: आने वाले HTTP/HTTPS अनुरोधों को होस्टनेम द्वारा निर्दिष्ट टेनेंट कंटेनर में रूट करने के लिए केवल इनग्रेस प्रॉक्सी public_gateway_net से जुड़ती है।

उन्नत परिवेशों के लिए, Docker के एन्हांस्ड कंटेनर आइसोलेशन (ECI) मोड या Sysbox जैसे रनटाइम पर विचार करें, जो जटिल मैन्युअल नेटवर्क स्क्रिप्टिंग के बिना स्वचालित रूप से सख्त उपयोगकर्ता नेमस्पेस सीमाओं और वर्चुअलाइज्ड /proc और /sys फ़ाइल सिस्टम को लागू करते हैं।


5. एक निष्पक्ष मल्टी-टेनेंट निर्णय मैट्रिक्स स्थापित करें

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

वर्कलोड आवश्यकताओं का मूल्यांकन करने और निर्णयकर्ताओं के सामने एक तर्कसंगत डिप्लॉयमेंट रणनीति प्रस्तुत करने के लिए निम्नलिखित तुलना मैट्रिक्स का उपयोग करें:

आइसोलेशन टियरअंतर्निहित तकनीकसुरक्षा सीमासंसाधन ओवरहेडसर्वश्रेष्ठ उपयोग का मामला
शेयर्ड स्टैक कंटेनरएकल OS पर नेमस्पेस और Cgroupsलॉजिकल OS-स्तरीय आइसोलेशनबहुत कमउच्च-मात्रा वाले लैंडिंग पेज, आंतरिक स्टेजिंग, अस्थायी अभियान साइटें
हार्डन्ड कंटेनर (ECI / Sysbox)यूज़र नेमस्पेस, AppArmor, रीड-ओनली रूटउन्नत OS-स्तरीय और वर्चुअलाइजेशनकममल्टी-क्लाइंट एजेंसी होस्टिंग, प्रमाणित पोर्टल, संवेदनशील मार्केटिंग फॉर्म
समर्पित वर्चुअल मशीनें (VMs)हाइपरवाइज़र हार्डवेयर वर्चुअलाइजेशनसख्त हार्डवेयर/कर्नेल पृथक्करणउच्चभुगतान प्रसंस्करण, विनियमित HIPAA/PCI डेटा, अविश्वसनीय कस्टम कोड निष्पादन
हाइब्रिड (समर्पित VMs में कंटेनर)टेनेंट-विशिष्ट VMs के अंदर हार्डन्ड कंटेनरबहुस्तरीय हार्डवेयर और OS सीमाएंमध्यम से उच्चउच्च-स्तरीय उद्यम क्लाइंट जो समर्पित अनुबंध अनुपालन की मांग करते हैं

इन्फ्रास्ट्रक्चर बजट आवंटित करने से पहले सख्त मानदंडों के आधार पर प्रत्येक परियोजना का मूल्यांकन करें:

  1. डेटा संवेदनशीलता: क्या परियोजना नियामक डेटा (जैसे, क्रेडिट कार्ड रिकॉर्ड या चिकित्सा स्वास्थ्य जानकारी) संग्रहीत करती है? यदि हाँ, तो इसे समर्पित VM में डिप्लॉय करें।
  2. कोड का स्रोत: क्या आप मानकीकृत, टीम-ऑडिट किए गए कोड को डिप्लॉय कर रहे हैं या असत्यापित तीसरे पक्ष के प्लगइन्स की अनुमति दे रहे हैं? मानक कोड हार्डन्ड कंटेनरों में होना चाहिए; गैर-परीक्षित तीसरे पक्ष के कोड के लिए हाइपरवाइज़र आइसोलेशन की आवश्यकता होती है।
  3. बजट और जीवनकाल: मौसमी लैंडिंग पेजों और मुख्य कंपनी वेबसाइटों के लिए, हार्डन्ड कंटेनर मल्टी-टेनेंसी प्रति डॉलर अधिकतम प्रदर्शन प्रदान करती है।

प्रबंधन के सामने इन्फ्रास्ट्रक्चर योजनाएं प्रस्तुत करते समय, अपनी सिफारिशों को स्पष्ट टियर-आधारित तर्कों के साथ प्रस्तुत करने के लिए यह मूल्यांकन करने कि क्लाइंट्स को कब समर्पित VMs की आवश्यकता होती है, हमारी मार्गदर्शिका से परामर्श लें।


निष्कर्ष: सुरक्षा नियंत्रणों को व्यावसायिक ROI में बदलना

मल्टी-टेनेंट Docker परिवेश को सुरक्षित करने के लिए एंटरप्राइज क्लाउड आर्किटेक्चर बजट की आवश्यकता नहीं होती है। इसके लिए ऑपरेटिंग सिस्टम नियंत्रणों के कठोर, अनुशासित अनुप्रयोग की आवश्यकता होती है।

जब आप गैर-तकनीकी नेतृत्व के साथ इन्फ्रास्ट्रक्चर की समीक्षा करते हैं, तो इन तकनीकी कॉन्फ़िगरेशन को तीन मुख्य कार्यकारी मेट्रिक्स के आधार पर प्रस्तुत करें:

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

इन सुरक्षा उपायों को अपने कंटेनर टेम्प्लेट में व्यवस्थित रूप से लागू करें। आप उच्च-प्रदर्शन, लागत प्रभावी इन्फ्रास्ट्रक्चर प्रदान करेंगे जो इंजीनियरिंग सुरक्षा मानकों और कार्यकारी बजट बाधाओं दोनों को पूरा करता है।

Sources (5)