
Clair और Docker Registry का एकीकरण
Clair और Docker Registry का एकीकरण (Clair API v1 और v3 दोनों का समर्थन करता है)
Klar एक सरल उपकरण है जो Clair (https://github.com/coreos/clair) का उपयोग करके एक निजी या सार्वजनिक Docker रजिस्ट्री में संग्रहीत छवियों की सुरक्षा कमजोरियों का विश्लेषण करता है। Klar को एक एकीकरण उपकरण के रूप में उपयोग करने के लिए डिज़ाइन किया गया है, इसलिए यह पर्यावरण चर पर निर्भर करता है। यह एक एकल बाइनरी है जिसे किसी निर्भरता की आवश्यकता नहीं है।
Klar एक क्लाइंट के रूप में कार्य करता है जो Docker रजिस्ट्री और Clair के बीच छवि जाँचों का समन्वय करता है।
सबसे सरल तरीका https://github.com/optiopay/klar/releases/ से नवीनतम रिलीज़ (OSX और Linux के लिए) डाउनलोड करना है और बाइनरी को अपने PATH में एक फ़ोल्डर में रखना है (सुनिश्चित करें कि इसमें निष्पादन अनुमति है)।
सुनिश्चित करें कि आपके पास Go भाषा कंपाइलर स्थापित और कॉन्फ़िगर है https://golang.org/doc/install
फिर चलाएँ
go get github.com/optiopay/klar
सुनिश्चित करें कि आपका Go बाइनरी फ़ोल्डर आपके PATH में है (जैसे export PATH=$PATH:/usr/local/go/bin)
Klar प्रक्रिया 0 लौटाती है यदि एक छवि में पाई गई उच्च गंभीरता वाली कमजोरियों की संख्या एक सीमा से कम या उसके बराबर है (नीचे देखें) और 1 यदि अधिक थीं। यदि कोई त्रुटि छवि के विश्लेषण को रोकती है तो यह 2 लौटाएगा।
Klar को निम्नलिखित पर्यावरण चर के माध्यम से कॉन्फ़िगर किया जा सकता है:
CLAIR_ADDR - Clair सर्वर का पता। इसका रूप protocol://host:port है - protocol और port क्रमशः http और 6060 पर डिफ़ॉल्ट होते हैं और इन्हें छोड़ा जा सकता है। आप URL में बुनियादी प्रमाणीकरण भी निर्दिष्ट कर सकते हैं: protocol://login:password@host:port।
CLAIR_OUTPUT - गंभीरता स्तर की सीमा, इस सीमा से अधिक या बराबर गंभीरता स्तर वाली कमजोरियाँ आउटपुट होंगी। समर्थित स्तर हैं Unknown, Negligible, Low, Medium, High, Critical, Defcon1। डिफ़ॉल्ट Unknown है।
CLAIR_THRESHOLD - 1 लौटाने से पहले Klar कितनी आउटपुट कमजोरियाँ सहन कर सकता है। डिफ़ॉल्ट 0 है।
CLAIR_TIMEOUT - मिनटों में टाइमआउट जिसके बाद Klar छवि स्कैनिंग रद्द कर देता है। डिफ़ॉल्ट 1 है।
DOCKER_USER - Docker रजिस्ट्री खाता नाम।
DOCKER_PASSWORD - Docker रजिस्ट्री खाता पासवर्ड।
DOCKER_TOKEN - Docker रजिस्ट्री खाता टोकन। (DOCKER_USER और DOCKER_PASSWORD के स्थान पर उपयोग किया जा सकता है)
DOCKER_INSECURE - Klar को खराब SSL प्रमाणपत्रों वाली रजिस्ट्रियों तक पहुँचने की अनुमति दें। डिफ़ॉल्ट false है। इसके काम करने के लिए Clair को -insecure-tls के साथ बूट करना होगा।
DOCKER_TIMEOUT - Docker रजिस्ट्री से लेयर्स प्राप्त करने का प्रयास करते समय मिनटों में टाइमआउट
DOCKER_PLATFORM_OS - Docker छवि का ऑपरेटिंग सिस्टम। डिफ़ॉल्ट linux है। यह केवल तभी सेट करने की आवश्यकता है जब निर्दिष्ट छवि सामान्य मेनिफेस्ट के बजाय Docker ManifestList को संदर्भित करती है।
DOCKER_PLATFORM_ARCH - आर्किटेक्चर जिसके लिए Docker छवि अनुकूलित है। डिफ़ॉल्ट amd64 है। यह केवल तभी सेट करने की आवश्यकता है जब निर्दिष्ट छवि सामान्य मेनिफेस्ट के बजाय Docker ManifestList को संदर्भित करती है।
REGISTRY_INSECURE - Klar को असुरक्षित रजिस्ट्रियों (केवल HTTP) तक पहुँचने की अनुमति दें। डिफ़ॉल्ट false है।
JSON_OUTPUT - JSON आउटपुट करें, सादा पाठ नहीं। डिफ़ॉल्ट false है।
FORMAT_OUTPUT - कमजोरियों का आउटपुट प्रारूप। समर्थित प्रारूप हैं standard, json, table। डिफ़ॉल्ट standard है। यदि JSON_OUTPUT सत्य पर सेट है, तो यह विकल्प अनदेखा किया जाता है।
WHITELIST_FILE - CVE श्वेतसूची के साथ YAML फ़ाइल का पथ। फ़ाइल प्रारूप के लिए whitelist-example.yaml देखें।
IGNORE_UNFIXED - बिना फिक्स वाली कमजोरियों को सीमा की ओर न गिनें
उपयोग:
CLAIR_ADDR=localhost CLAIR_OUTPUT=High CLAIR_THRESHOLD=10 DOCKER_USER=docker DOCKER_PASSWORD=secret klar postgres:9.5.1
आप KLAR_TRACE को true पर सेट करके अधिक विस्तृत आउटपुट सक्षम कर सकते हैं।
export KLAR_TRACE=true चलाएँ।Klar को डॉकरीकृत किया जा सकता है। $GOPATH/src/github.com/optiopay/klar पर जाएँ और प्रोजेक्ट रूट में Klar बनाएँ। यदि आप Linux पर हैं:
CGO_ENABLED=0 go build -a -installsuffix cgo .
यदि आप Mac पर हैं तो इसे Linux के लिए बनाना न भूलें:
GOOS=linux go build .
Docker छवि बनाने के लिए प्रोजेक्ट रूट में चलाएँ (यदि चाहें तो klar को पूरी तरह से योग्य नाम से बदलें):
docker build -t klar .
फिर पर्यावरण चर को अलग-अलग --env तर्कों के रूप में पास करें, या एक env फ़ाइल बनाएँ और इसे --env-file तर्क के रूप में पास करें। उदाहरण के लिए env चर को my-klar.env के रूप में सहेजें:
CLAIR_ADDR=localhost
CLAIR_OUTPUT=High
CLAIR_THRESHOLD=10
DOCKER_USER=docker
DOCKER_PASSWORD=secret
फिर चलाएँ
docker run --env-file=my-klar.env klar postgres:9.5.1
Amazon ECR के लिए कोई स्थायी उपयोगकर्ता नाम/पासवर्ड नहीं है, क्रेडेंशियल aws ecr get-login का उपयोग करके प्राप्त करने होंगे और वे 12 घंटे के लिए वैध होते हैं। यहाँ एक नमूना स्क्रिप्ट है जिसका उपयोग Klar को ECR क्रेडेंशियल प्रदान करने के लिए किया जा सकता है:
DOCKER_LOGIN=`aws ecr get-login --no-include-email`
PASSWORD=`echo $DOCKER_LOGIN | cut -d' ' -f6`
REGISTRY=`echo $DOCKER_LOGIN | cut -d' ' -f7 | sed "s/https:\/\///"`
DOCKER_USER=AWS DOCKER_PASSWORD=${PASSWORD} ./klar ${REGISTRY}/my-image
GCR (Google Cloud Registry) के विरुद्ध प्रमाणीकरण के लिए, सबसे आसान तरीका एप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल का उपयोग करना है। ये केवल GCP से Klar चलाने पर काम करते हैं। एकमात्र आवश्यकता Google Cloud SDK है।
DOCKER_USER=oauth2accesstoken
DOCKER_PASSWORD="$(gcloud auth application-default print-access-token)"
Docker के साथ:
DOCKER_USER=oauth2accesstoken
DOCKER_PASSWORD="$(docker run --rm google/cloud-sdk:alpine gcloud auth application-default print-access-token)"