उत्पादन में डॉक करने पर विचार करने के लिए सर्वोत्तम और व्यापक अभ्यास क्या हैं?


42

अंत में, आपको डॉकर से इतना प्यार है कि आप अपने ऑनलाइन बिजनेस-क्रिटिकल प्रोडक्शन सिस्टम को संवेदनशील ग्राहक डेटा के साथ डॉकर झुंड में ले जाना चाहते हैं। कुछ पहले से ही ऐसा कर सकते हैं। रूट मोड में चल रही उत्पादन प्रक्रियाओं को मना करने वाली नीति द्वारा अन्य संगठन इसे बर्दाश्त नहीं कर सकते।

डॉकर उत्पादन पर्यावरण के लिए विचार करने के लिए बिल्डिंग ब्लॉक्स की एक चेकलिस्ट क्या हो सकती है? किसी को इन सभी की आवश्यकता नहीं है, लेकिन इन सभी का आकलन किया जाना चाहिए।

अस्वीकरण: मुझे पता है कि "बड़ी अंतहीन सूचियों" से बचने के लिए एक एसई नीति है, लेकिन मुझे लगता है कि यह चेकलिस्ट बहुत बड़ी नहीं हो सकती ... और अंतहीन अब।

तो - ये इमारतें ब्लॉक क्या हैं?

  1. यदि पहले से तैनात नहीं है, तो उन्नत सुरक्षा सेटिंग्स के साथ लिनक्स होस्ट सिस्टम चलाने पर विचार करें - कठोर कर्नेल, SELinux आदि।
  2. अल्पाइन डोकर बेस इमेज का उपयोग करने पर विचार करें, जैसे अल्पाइन, बिजीबॉक्स या स्क्रैच उदा जैसे खाली बेस इमेज से शुरू करें
  3. USER को रूट के अलावा अन्य सेटिंग का उपयोग करें
  4. कंटेनर को दी गई कर्नेल क्षमताओं के पहले से सिकुड़े सेट को और कम करने के लिए सावधानीपूर्वक आकलन करें
  5. आदर्श रूप से लिंक की गई आपकी प्रक्रिया को लॉन्च करने के लिए प्रति कंटेनर केवल एक निष्पादन योग्य बाइनरी होने पर विचार करें
  6. जो लोग शेल एक्सेस प्राप्त करने के लिए आपके सिस्टम को तोड़ना चाहते हैं वे आश्चर्यचकित हो सकते हैं यदि उन्हें पता चला कि आपके कंटेनर में सभी शेल अक्षम हैं
  7. माउंट रीड-ओनली वॉल्यूम जहां केवल संभव हो

प्रश्न: और क्या?


मुझे यह बहुत व्यापक लगता है। लेकिन उसी समय, मुझे सवाल पसंद आया। तो, मैं समुदाय इस :) पर फैसला करते हैं जाएगा
Dawny33

टैग का क्या devsecopsअर्थ है?
०३० 0 '

ठीक है दिलचस्प - devsecops.org/blog/2015/2/15/what-is-devsecops
030

क्या आप बता सकते हैं कि यह Consider using a tiny Docker base image, like alpine, busybox or even scratch e.g. start with an empty base imageसुरक्षा को क्यों बढ़ाता है?
०३० 0

3
@ 030 जितना कम आपने स्थापित किया है, बेहतर होगा कि आप गैर-जरूरी सेवाओं / सॉफ्टवेयर के खिलाफ रक्षा कर सकते हैं जो अंडर-मेंटेनेंस और / या संभावित रूप से शोषक हैं। नंगे न्यूनतम के लिए स्ट्रिपिंग हमेशा बेहतर काम करेगी क्योंकि प्रत्येक कंटेनर को एकल सेवा की सेवा के लिए इस्तेमाल किया जाना चाहिए ।/goal।
लियोन

जवाबों:


23

जिस होस्ट पर कंटेनर चल रहे हैं

प्रत्येक नोड पर डॉक सुरक्षा बेंच चलाएं जो डॉक कंटेनर चलाता है https://github.com/docker/docker-bench-surity

डॉक कंटेनर को चलाने वाले नोड पर निम्न आदेश चलाना:

docker run -it --net host --pid host --cap-add audit_control \
    -e DOCKER_CONTENT_TRUST=$DOCKER_CONTENT_TRUST \
    -v /var/lib:/var/lib \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/lib/systemd:/usr/lib/systemd \
    -v /etc:/etc --label docker_bench_security \
    docker/docker-bench-security

चेक की सूची लौटाता है:

[INFO] 1 - Host Configuration

[WARN] 1.1  - Ensure a separate partition for containers has been created

[NOTE] 4.2  - Ensure that containers use trusted base images

[PASS] 4.6  - Ensure HEALTHCHECK instructions have been added to the container image

रिपॉजिटरी README का उद्धरण:

डॉकर बेंच फॉर सिक्योरिटी एक स्क्रिप्ट है जो उत्पादन में डॉकर कंटेनरों को तैनात करने के आसपास दर्जनों सामान्य सर्वोत्तम प्रथाओं की जांच करती है। परीक्षण सभी स्वचालित हैं, और सीआईएस डॉकर समुदाय संस्करण बेंचमार्क v1.1.0 से प्रेरित हैं ।

सुरक्षा बेंच द्वारा बताए गए कुछ मुद्दों को आधिकारिक डॉकटर सुरक्षा लेख को पढ़कर हल किया जा सकता है और इसकी तुलना गोलियों से की जा सकती है जो इस प्रश्न में परिभाषित हैं कि निम्नलिखित बातें महत्वपूर्ण हैं:

  • ssl लागू करके docker डेमन सॉकेट को सुरक्षित रखें
  • नोटरी और DOCKER_CONTENT_TRUSTवैरिएबल का उपयोग करके कंटेंट ट्रस्ट

7

डॉकटर अभी भी विकास में है।

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

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

डॉकर कोई वर्चुअलाइजेशन नहीं है

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

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

डॉकर कोई सुरक्षा नहीं है

डॉकर कंटेनरों के अंदर जो भी कोड चलाया जाता है वह डॉकर के प्रश्न के बिना चलाया जाता है। कोई भी हमलावर बस कंटेनर के अंदर अपने सॉफ़्टवेयर को स्थापित कर सकता है, और डॉकर किसी अन्य कोड की तरह चलेगा।

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


7

डॉकटर स्वयं चित्र

एक अतिरिक्त विकल्प क्लेयर का उपयोग करना है ।

क्लेयर अनुप्रयोग कंटेनरों में कमजोरियों के स्थैतिक विश्लेषण के लिए एक खुला स्रोत परियोजना है (वर्तमान में एपेक और डॉकटर सहित)।

नियमित अंतराल में, क्लेयर भेद्यता मेटाडेटा को स्रोतों के एक कॉन्फ़िगर सेट से प्राप्त करता है और इसे डेटाबेस में संग्रहीत करता है।

ग्राहक अपने कंटेनर छवियों को अनुक्रमित करने के लिए क्लेयर एपीआई का उपयोग करते हैं; यह छवि में मौजूद सुविधाओं की एक सूची बनाता है और उन्हें डेटाबेस में संग्रहीत करता है।

ग्राहक किसी विशेष छवि की कमजोरियों के लिए डेटाबेस को क्वेरी करने के लिए क्लेयर एपीआई का उपयोग करते हैं; कमजोरियों और सुविधाओं को सहसंबंधित करना प्रत्येक अनुरोध के लिए किया जाता है, जो कि छवियों को बचाने की आवश्यकता से बचता है।

जब भेद्यता मेटाडेटा के अपडेट होते हैं, तो अलर्ट सिस्टम में एक सूचना भेजी जा सकती है जो एक बदलाव हुआ है।

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


5

इस धागे में बिंदुओं के अलावा; निम्नलिखित मेरी सिफारिश होगी:

  • डॉक-पीआईडी ​​1 पर डंब-इनिट के साथ नियंत्रण प्राप्त करें
  • कंटेनर ऑर्केस्ट्रेशन सिस्टम के बिना उत्पादन में डॉकटर न चलाएं
    • कुबेरनेट्स, मेसोस, झुंड आदि से अपनी पिक लें
  • डॉक छवि के अंदर उपयोगकर्ता नियंत्रण के लिए गोसु का उपयोग करें
  • 12 फ़ैक्टर ऐप प्रतिमान का पालन करें, यदि आप कंटेनरों में स्टेटफुल ऐप चला रहे हैं, तो इसे बदल दें।
  • हैशिकॉर्प वॉल्ट / कौंसुल जैसे उपकरणों के साथ मजबूत गुप्त / कॉन्फ़िगर प्रबंधन करें
  • देवों द्वारा निर्मित एक ही कंटेनर को एक सीआई पाइपलाइन के माध्यम से उड़ाने के लिए जहाज करें जो इसे मंचन, एकीकरण-परीक्षणों के माध्यम से अच्छी तरह से लेता है।
  • CVEs और पैच के आसपास सूचनाएं बनाएं, पैच-नोटिफ़िकेशन पर ट्रिगर बनाएं
  • चल रहे कंटेनर में अंतर्दृष्टि प्राप्त करने के लिए व्यापक लॉगिंग करें, आप मेजबान या कंटेनरों में देवताओं को एसएसएच एक्सेस नहीं देना चाहते हैं
    • सिफारिश: धाराप्रवाह
  • कंटेनर और होस्ट मेट्रिक्स दोनों हैं
    • सिफारिश: प्रोमेथियस + नोड-निर्यातक

2

यदि आप sedकमांड के साथ अपने डॉक एंट्री पॉइंट को भर रहे हैं , तो इस अभ्यास पर विचार करें:

  • अपने डॉकर इमेज कॉन्फ़िगरेशन फ़ाइलों को प्रबंधित करने और उन्हें अपडेट रखने के लिए एक टूल का उपयोग करें जैसे कि कॉन्फ़ड

Confd कई समर्थित की-वैल्यू स्टोर्स के डेटा को पढ़ेगा और कॉन्फ़िगरेशन टेम्प्लेट को गतिशील रूप से रेंडर करेगा।


0

खाते में कुछ चीजों को लेते समय एक ऐप को डॉक इमेज में सेंध लगाने के लिए A2D का उपयोग किया जा सकता है , जैसे कि गैर-रूट, अनुमतियां, ऐप का स्थान:

docker run -v $PWD:/projectName utrecht/a2d:1.0.0 \
       -projectName someProjectName -dockerfile /projectName/Dockerfile

रिटर्न:

FROM golang:1.12.4-alpine as builder
COPY . ./someProjectName/
WORKDIR someProjectName
RUN adduser -D -g '' someProjectName && \
    apk add git && \
    CGO_ENABLED=0 go build && \
    cp someProjectName /someProjectName && \
    chmod 100 /someProjectName

FROM scratch
COPY --from=builder /etc/group /etc/group
COPY --from=builder /etc/passwd /etc/passwd
COPY --from=builder --chown=someProjectName:someProjectName /someProjectName /usr/local/someProjectName
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
USER someProjectName
ENTRYPOINT ["/usr/local/someProjectName"]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.