
دمج Clair و Docker Registry
دمج Clair مع سجل Docker (يدعم كلاً من Clair API v1 و v3)
كلار هي أداة بسيطة لتحليل الصور المخزنة في سجل Docker خاص أو عام بحثًا عن الثغرات الأمنية باستخدام Clair https://github.com/coreos/clair. صُممت كلار لتكون أداة تكامل، لذا فهي تعتمد على متغيرات البيئة. وهي عبارة عن ملف ثنائي واحد لا يتطلب أي تبعيات.
تعمل كلار كعميل ينسق عمليات فحص الصور بين سجل Docker و Clair.
أسهل طريقة هي تنزيل أحدث إصدار (لنظامي OSX و Linux) من https://github.com/optiopay/klar/releases/ وضع الملف الثنائي في مجلد موجود في متغير PATH لديك (تأكد من أن لديه صلاحية التنفيذ).
تأكد من تثبيت مترجم لغة Go وتكوينه https://golang.org/doc/install
ثم قم بتشغيل
go get github.com/optiopay/klar
تأكد من أن مجلد Go الثنائي موجود في متغير PATH لديك (مثلاً export PATH=$PATH:/usr/local/go/bin)
تُرجع عملية كلار القيمة 0 إذا كان عدد الثغرات الأمنية عالية الخطورة المكتشفة في الصورة أقل من أو يساوي حدًا معينًا (انظر أدناه) والقيمة 1 إذا كان هناك المزيد. وستُرجع القيمة 2 إذا منع خطأ من تحليل الصورة.
يمكن تهيئة كلار عبر متغيرات البيئة التالية:
CLAIR_ADDR - عنوان خادم Clair. يكون على شكل protocol://host:port - protocol و port افتراضيًا إلى http و 6060 على التوالي ويمكن حذفهما. يمكنك أيضًا تحديد المصادقة الأساسية في عنوان URL: protocol://login:password@host:port.
CLAIR_OUTPUT - عتبة مستوى الخطورة، سيتم إخراج الثغرات التي يكون مستوى خطورتها أعلى من أو يساوي هذه العتبة. المستويات المدعومة هي Unknown, Negligible, Low, Medium, High, Critical, . الافتراضي هو .
الاستخدام:
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 للحفاظ على الإعداد بين الجلسات.يمكن تحويسب كلار. انتقل إلى $GOPATH/src/github.com/optiopay/klar وقم ببناء كلار في جذر المشروع. إذا كنت على Linux:
CGO_ENABLED=0 go build -a -installsuffix cgo .
إذا كنت على Mac، لا تنسَ بناءه لنظام Linux:
GOOS=linux go build .
لبناء صورة Docker، قم بتشغيل الأمر في جذر المشروع (استبدل klar بالاسم المؤهل بالكامل إذا أردت):
docker build -t klar .
ثم قم بتمرير متغيرات البيئة كوسائط --env منفصلة، أو قم بإنشاء ملف بيئة وتمريره كوسيط --env-file. على سبيل المثال احفظ متغيرات البيئة كـ 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 ساعة. إليك نموذج برنامج نصي يمكن استخدامه لتوفير بيانات اعتماد 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 السحابي)، أسهل طريقة هي استخدام بيانات الاعتماد الافتراضية للتطبيق. هذه تعمل فقط عند تشغيل كلار من GCP. المتطلب الوحيد هو 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)"
Defcon1UnknownCLAIR_THRESHOLD - عدد الثغرات المُخرجة التي يمكن لكلار تحملها قبل إرجاع 1. الافتراضي هو 0.
CLAIR_TIMEOUT - وقت مهلة بالدقائق قبل أن تلغي كلار فحص الصورة. الافتراضي هو 1
DOCKER_USER - اسم حساب سجل Docker.
DOCKER_PASSWORD - كلمة مرور حساب سجل Docker.
DOCKER_TOKEN - رمز حساب سجل Docker. (يمكن استخدامه بدلاً من DOCKER_USER و DOCKER_PASSWORD)
DOCKER_INSECURE - السماح لكلار بالوصول إلى السجلات بشهادات SSL غير صالحة. الافتراضي هو false. يجب تشغيل Clair مع -insecure-tls حتى يعمل هذا.
DOCKER_TIMEOUT - وقت مهلة بالدقائق عند محاولة جلب الطبقات من سجل Docker
DOCKER_PLATFORM_OS - نظام تشغيل صورة Docker. الافتراضي هو linux. يلزم تعيين هذا فقط إذا كانت الصورة المحددة تشير إلى قائمة ManifestList بدلاً من manifest عادي.
DOCKER_PLATFORM_ARCH - بنية المعالج التي تم تحسين صورة Docker لها. الافتراضي هو amd64. يلزم تعيين هذا فقط إذا كانت الصورة المحددة تشير إلى قائمة ManifestList بدلاً من manifest عادي.
REGISTRY_INSECURE - السماح لكلار بالوصول إلى السجلات غير الآمنة (HTTP فقط). الافتراضي هو false.
JSON_OUTPUT - إخراج بتنسيق JSON، وليس نصًا عاديًا. الافتراضي هو false.
FORMAT_OUTPUT - تنسيق إخراج الثغرات. التنسيقات المدعومة هي standard, json, table. الافتراضي هو standard. إذا تم تعيين JSON_OUTPUT إلى true، يتم تجاهل هذا الخيار.
WHITELIST_FILE - مسار ملف YAML يحتوي على القائمة البيضاء لـ CVE. اطلع على whitelist-example.yaml لمعرفة تنسيق الملف.
IGNORE_UNFIXED - لا تحسب الثغرات التي ليس لها إصلاح تجاه العتبة