استخدام أداة فحص الثغرات Kubescape

المقدمة

كوبسكيب هو أداة مفتوحة المصدر لكوبرنيتيس تم تطويرها بواسطة أرموسيك تُستخدم لتحليل المخاطر وامتثال الأمان وتصور RBAC وفحص ثغرات الصور. بالإضافة إلى ذلك، يمكن لـ كوبسكيب مسح تصريحات كوبرنيتيس لاكتشاف مشاكل التكوين المحتملة التي تعرض نشراتك لخطر الهجوم. يمكنه أيضًا مسح رسومات Helm واكتشاف انتهاكات RBAC وإجراء حسابات لتقدير المخاطر وعرض اتجاهات المخاطر مع مرور الوقت.

ميزات كوبسكيب:

  • اكتشاف أخطاء تكوين كوبرنيتيس وتقديم مساعدة في الإصلاح عبر بوابة أرموسيك السحابية.
  • تحليل المخاطر والاتجاهات مع مرور الوقت عبر بوابة أرموسيك السحابية.
  • يتضمن العديد من الإطارات لامتثال الأمان، مثل أرموبست، وNSA، وMITRE وممارسات Devops الأفضل.
  • دعم إدارة الاستثناءات، مما يتيح لمسؤولي Kubernetes تحديد مستويات المخاطر المقبولة.
  • التكامل مع أدوات مختلفة مثل Jenkins وتدفقات Github وPrometheus، إلخ.
  • فحص الصور – مسح الصور للثغرات ورؤية وتصنيف وتصفية (أي الثغرة التي يجب إصلاحها أولاً).
  • تبسيط تعقيد RBAC من خلال توفير رسم بياني سهل الفهم يظهر تكوين RBAC في عنقودتك.

يمكن تشغيل Kubescape بطرق مختلفة:

يستخدم Kubescape أطر مختلفة لاكتشاف التكوينات الخاطئة مثل:

هل Kubescape مجاني؟

نعم، الأدوات والإصدار المجتمعي مجاني دائمًا، باستثناء تنفيذ الخلفية لبوابة السحابة وربما بعض الميزات المتقدمة الأخرى. هناك أيضًا قيود على الحد الأقصى لعدد وحدات العمل التي يمكنك مسحها في كل مجموعة (تصل إلى 10). مدة احتفاظ بيانات تقارير المسح محدودة إلى شهر واحد في بوابة السحابة Armo.

راجع خطط التسعير لمزيد من المعلومات.

هل Kubescape مفتوح المصدر؟

نعم، الأدوات بالتأكيد مفتوحة المصدر. يمكنك زيارة صفحة Armo GitHub الرئيسية للعثور على مزيد من التفاصيل حول تنفيذ كل مكون. لكن تنفيذ خلفية بوابة السحابة ليس مفتوح المصدر.

في هذا الدليل، ستستخدم Kubescape لتحليل المخاطر لسلسلة التوريد الخاصة بتطبيقات Kubernetes الخاصة بك (صور الحاويات، تصريحات YAML لـ Kubernetes). بعد ذلك، ستتعلم كيفية اتخاذ الإجراء المناسب لإصلاح الوضع. وأخيرًا، ستتعلم كيفية دمج Kubescape في خط أنابيب CI/CD لمسح الضعف في مراحل التطوير المبكرة.

جدول المحتويات

المتطلبات المسبقة

لإكمال جميع الخطوات من هذا الدليل، ستحتاج إلى:

  1. A working DOKS cluster running Kubernetes version >=1.21 that you have access to. For additional instructions on configuring a DigitalOcean Kubernetes cluster, see: How to Set Up a DigitalOcean Managed Kubernetes Cluster (DOKS).
  2. A DigitalOcean Docker Registry. A free plan is enough to complete this tutorial. Also, make sure it is integrated with your DOKS cluster as explained here.
  3. Kubectl واجهة سطر الأوامر للتفاعل مع Kubernetes. اتبع هذه التعليمات للاتصال بمجموعتك مع kubectl و doctl.
  4. Helm، لتثبيت Kubescape في مجموعة Kubernetes الخاصة بك.
  5. Kubescape CLI للتفاعل مع ماسح الثغرات Kubescape.
  6. A free Armosec Cloud Portal account used to periodically publish scan results for your Kubernetes cluster to a nice dashboard. Also, the Armosec portal web interface helps you with investigations and risk analysis.
  7. A Slack workspace you own, and a dedicated Slack app to get notified of vulnerability scan issues reported by Kubescape.

الخطوة 1 – التعرف على واجهة سطر الأوامر Kubescape

يمكنك فحص الثغرات يدوياً عبر واجهة سطر الأوامر kubescape. تم تصميم واجهة سطر الأوامر kubescape للاستخدام في مختلف السكربتات والتلقائيات. مثال عملي لذلك هو في خط أنابيب CI/CD مُنفذ باستخدام أدوات متنوعة مثل Tekton، Jenkins، GitHub Workflows، إلخ.

تم تصميم Kubescape لفحص مجموعة Kubernetes بأكملها من الأساس (أعباء العمل، الحاويات، إلخ). إذا رغبت، يمكنك تقييد الفحوصات إلى مساحة أسماء محددة أيضاً. تشمل الميزات الأخرى فحص الاستضافة (العقد العاملة)، فحص المستودعات المحلية أو عن بُعد (مثل GitHub)، اكتشاف تكوينات خاطئة في تكوينات Kubernetes YAML أو جداول Helm. يمكن اختيار أطر عمل متنوعة عبر أمر framework، مثل ArmoBest، NSA، MITRE، إلخ.

عند استدعاء واجهة سطر الأوامر kubescape، سيقوم بتنزيل (أو تحديث) قاعدة بيانات الثغرات المعروفة على جهازك المحلي. ثم، سيبدأ عملية الفحص وسيقوم بالإبلاغ عن المشاكل بتنسيق محدد. بشكل افتراضي، سيقوم بطباعة جدول ملخص باستخدام الإخراج القياسي أو الوحدة التحكم. يمكن لـ Kubescape إنشاء تقارير بتنسيقات أخرى أيضاً، مثل JSON، HTML، SARIF، إلخ.

يمكنك اختيار تقديم النتائج إلى بوابة سحابية Armosec عبر العلم --submit لتخزين النتائج وتصورها لاحقاً.

ملحوظة: ليس من الإلزام تقديم نتائج الفحص إلى بوابة السحابة Armosec. الميزة الكبيرة في استخدام البوابة هي الرؤية لأنها تمنحك وصولًا إلى لوحة تحكم جميلة يمكنك من خلالها التحقق من جميع تقارير الفحص والنقاط الحرجة الكلية. كما أنها تساعدك على المدى الطويل في التحقيقات والتلميحات للتصحيح.

بعض الأمثلة لتجربتها مع واجهة سطر الأوامر Kubescape:

  • مسح كامل نادي Kubernetes وإنشاء تقرير ملخص في وحدة التحكم (المخرجات القياسية):

    kubescape scan
    
  • استخدم مساحة أسماء محددة فقط للمسح:

    kubescape scan --include-namespaces microservices
    
  • استبعد مساحات أسماء محددة من عملية المسح:

    kubescape scan --exclude-namespaces kube-system,kube-public
    
  • مسح مساحة أسماء محددة وإرسال النتائج إلى بوابة Armosec السحابية:

    kubescape scan --include-namespaces default --submit
    
  • قم بتنفيذ مسح للعنقود باستخدام إطار عمل محدد (على سبيل المثال NSA):

    kubescape scan framework nsa --exclude-namespaces kube-system,kube-public
    

يمكن لـ Kubescape مسح خوادم عقدة Kubernetes الخاصة بك (أو العقد) لاكتشاف الثغرات في نظام التشغيل أيضًا. لتمكين هذه الميزة ، تحتاج إلى تمرير العلم --enable-host-scan إلى واجهة سطر الأوامر kubescape. عند تمكين هذا العلم ، يقوم kubescape بنشر sensors في عنقودك. يتم إنشاء الأجهزة بواسطة Kubernetes DaemonSets التي تنشئ البودات على كل عقدة في عنقودك لمسح الثغرات المعروفة. بعد اكتمال عملية المسح ، يتم إزالة الأجهزة من عنقودك (بما في ذلك الموارد المرتبطة بـ Kubernetes).

واجهة سطر الأوامر Kubescape توفر صفحات مساعدة لجميع الخيارات المتاحة. يمكن استخدام الأمر أدناه لطباعة صفحة المساعدة الرئيسية:

kubescape --help

المخرج يبدو مشابهًا ل:

Output
Kubescape is a tool for testing Kubernetes security posture. Docs: https://hub.armo.cloud/docs Usage: kubescape [command] Available Commands: completion Generate autocompletion script config Handle cached configurations delete Delete configurations in Kubescape SaaS version download Download controls-inputs,exceptions,control,framework,artifacts help Help about any command list List frameworks/controls will list the supported frameworks and controls scan Scan the current running cluster or yaml files submit Submit an object to the Kubescape SaaS version version Get current version ...

كل أمر (أو فرع) في واجهة سطر الأوامر Kubescape لديه صفحة مساعدة مرتبطة أيضًا يمكن الوصول إليها عبر kubescape [command] --help.

يرجى زيارة صفحة توثيق واجهة سطر الأوامر Kubescape الرسمية للحصول على المزيد من الأمثلة.

الخطوة 2 – التعرف على بوابة Armosec السحابية

توفر Armosec بوابة سحابية جيدة حيث يمكنك رفع نتائج مسح Kubescape وإجراء تحليل للمخاطر. هذا مفيد جدًا لأنك سترغب في تصور وتفحص كل تقرير مسح، واتخاذ الإجراء المناسب لإصلاح الوضع، ثم إعادة تشغيل المسح مرة أخرى للتحقق من النتائج. من خلال وجود تمثيل بصري جيد لكل تقرير والنقاط الأساسية المرتبطة يساعدك على المدى الطويل في التحقيقات والتكرارات اللازمة لإصلاح المشاكل الأمنية المبلغ عنها.

يمكنك إنشاء حساب مجاني محدود إلى 10 وحدات عمل وشهر واحد من الاحتفاظ بالبيانات والتي يجب أن تكون كافية في معظم الحالات (مثل احتياجات الاختبار أو التطوير). يمكنك قراءة المزيد حول كيفية إنشاء حساب سحابي لـ kubescape على صفحة الوثائق الرسمية.

بمجرد إنشاء الحساب، يتم إنشاء معرف مستخدم فريد يمكنك استخدامه لرفع نتائج المسح لذلك الحساب المحدد. على سبيل المثال، قد تكون لديك أتمتة معينة مثل خط أنابيب CI/CD حيث تحتاج إلى رفع نتائج المسح، لذا يتعين استخدام معرف المستخدم المرتبط للتمييز بين عدة مستأجرين.

لكل تقرير مسح تم تحميله إلى حسابك في سحابة Armosec، يتم إضافة سجل تاريخي جديد يحتوي على قائمة المشاكل التي تم العثور عليها والنقاط الخطر المرتبطة. بهذه الطريقة يمكنك الحصول على الاتجاهات والرسوم البيانية المرتبطة توضح تطور نقاط الخطر مع مرور الوقت. أيضًا، يتم إنشاء قائمة بأهم المشاكل الأمنية أيضًا في لوحة القيادة الرئيسية.

الصورة أدناه توضح هذه الميزات:

فهم قيمة نقاط الخطر في Kubescape

في كل مسح، يتحقق Kubescape من مواردك لاحتمال وجود مخاطر أمنية باستخدام ضوابط داخلية. يُعتبر ضابط Kubescape مفهوم يستخدمه أداة kubescape للدلالة على الاختبارات المستخدمة تحت الغطاء لفحص جانب معين من عنقودك (أو الموارد التي يتم فحصها). وعلاوة على ذلك، إطار هو مجموعة من الضوابط أو الاختبارات المستخدمة داخليًا لفحص الموارد الخاصة بك للمشاكل. لذلك، اعتمادًا على الإطار الذي تستخدمه، يتم إجراء مجموعة مختلفة من الفحوصات (ومع ذلك، تشترك بعض الاختبارات في بعض الأشياء المشتركة). وأخيرًا، استنادًا إلى العامل الخطر المرتبط بكل اختبار، يتم حساب النقاط النهائية.

النتيجة النهائية هي عدد إيجابي يتراوح من 0 إلى 100%. قيمة أقل تشير إلى أفضل نتيجة، في حين أن قيمة أعلى تشير إلى أسوأها. لذلك، إذا كنت ترغب في التأكد من سلامتك يجب أن تهدف إلى القيمة الأدنى الممكنة. في الممارسة، ينبغي أن يكون مؤشر المخاطر مساويًا أو أقل من 30% نقطة بداية جيدة.

التصحيح المساعد لمشاكل الأمان المبلغ عنها

ميزة أخرى مفيدة تقدمها بوابة السحابة Armosec هي المساعدة في تصحيح مشاكل الأمان. يعني ذلك أنك تتلقى توصيات حول كيفية إصلاح كل مشكلة أمان تم العثور عليها بواسطة ماسح kubescape. هذا مهم للغاية لأنه يبسط العملية ويغلق الدائرة لكل تكرار تحتاج إلى إجرائه لإصلاح كل مشكلة أمان مبلغ عنها.

الصورة أدناه توضح هذه العملية بشكل أفضل:

بالنسبة لكل مشكلة أمان تم الإبلاغ عنها، يتم عرض أيقونة أداة المفك في شكل مفتاح، يمكنك النقر فوقها للحصول على المساعدة في التصحيح:

بعد ذلك، يتم فتح نافذة جديدة، تعطيك تفاصيل حول كل كائن Kubernetes المتأثر، مميزة باللون الأخضر:

يمكنك النقر فوق كل تحكم مثل C-0018، C-0030، C-0086، إلخ والتحقق من المشكلات المميزة. سيتم تقديم اقتراحات حول كيفية إصلاح كل مشكلة أمان. ما تبقى هو اتباع التلميحات وإصلاح كل مشكلة أمان.

تشغيل فحوص العناقيد من واجهة الويب

يوفر بوابة السحابة Armo إمكانية تشغيل فحوص العناقيد من واجهة الويب أيضًا إذا تم نشر مخطط Helm لمكونات سحابة Armo في عنقود DOKS الخاص بك (المناقشة في الخطوة التالية). يمكن تشغيل كل من تكوين وفحص الصورة عبر النقر على زر واحد في البوابة. من أجل عمل هذه الميزة، يتعين عليك الانتظار حتى تنتهي مكونات سحابة Armo من مسح عنقودك في الخلفية، وتحميل النتائج.

يتم تشغيل فحص التكوين عن طريق الانتقال إلى صفحة فحص التكوين والنقر على زر الفحص. توضح الصورة أدناه كيفية إتمام هذه المهمة:

يمكنك أيضًا تعيين أو تعديل الجدول الزمني الحالي للفحص التلقائي إذا كنت ترغب في ذلك عن طريق النقر على زر الجدول الزمني في النافذة المنبثقة التي تظهر بعد النقر على زر الفحص. باستخدام نفس النافذة، يمكنك تحديد الأطر الأساسية التي تريد استخدامها للفحص. توضح الصورة أدناه كيفية إتمام المهام:

الخطوة 3 – تكوين فحوص Kubescape التلقائية لـ DOKS

يمكن تكوين Kubescape لفحص كامل عقدة Kubernetes الخاصة بك تلقائيًا في فترة زمنية محددة، أو في كل مرة يتم فيها نشر صورة تطبيق جديدة. يجب عليك نشر مكونات مجموعة بيانات Armo في عقدة Kubernetes الخاصة بك باستخدام Helm لتحقيق هذه الوظيفة. يُطلب حساب بوابة سحابة Armosec أيضًا لتحميل وتفقد النتائج.

تثبيت مخطط Helm Armo يقوم بتثبيت مهام cron التي تشغّل فحص الثغرات لكل من عقدة Kubernetes بالكامل وصور الحاوية. يمكن تكوين فاصل زمني لكل مهمة cron في ملف قيم Helm.

توفير مكونات مجموعة بيانات Armo لـ DOKS

الخطوات لنشر kubescape في عقدة Kubernetes الخاصة بك باستخدام Helm:

  1. أضف مستودع Helm وقم بإدراج charts المتوفرة:
helm repo add armo https://armosec.github.io/armo-helm/
helm repo update armo
helm search repo armo

يبدو الإخراج مشابهًا لما يلي:

Output
NAME CHART VERSION APP VERSION DESCRIPTION armo/armo-cluster-components 1.7.15 v1.7.15 ARMO Vulnerability Scanning

ملاحظة: المخطط الذي تهمك هو armo/armo-cluster-components، الذي سيقوم بتثبيت مكونات Armo في عقدة Kubernetes الخاصة بك. يُرجى زيارة صفحة مستودع armo-helm لمزيد من التفاصيل حول هذا المخطط.

  1. احصل على معرّف المستخدم الخاص بحسابك في Armo باستخدام سطر الأوامر CLI لـ kubescape (مطلوب في الخطوة التالية):
kubescape config view

المخرجات تبدو مشابهة ل:

{
"accountID": "c952b81f-77d5-4afb-80cc-59b59ec2sdfr"
}

ملاحظة:
إذا لم تستخدم CLI لـ kubescape لإرسال نتائج المسح إلى بوابة سحابية Armosec من قبل، فلن يعمل الأمر أعلاه. في هذه الحالة، تحتاج إلى تسجيل الدخول إلى البوابة والحصول على معرّف الحساب من هناك كما هو موضح هنا.

  1. قم بتثبيت مكونات عملية الكتلة لـ Armo Kubescape باستخدام Helm – سيتم إنشاء مساحة أسماء armo-system مخصصة أيضًا (تأكد من استبدال عناصر البيانات المتغيرة <> وفقًا لذلك):
ARMO_KUBESCAPE_CHART_VERSION="1.7.15"
helm install armo armo/armo-cluster-components \
--version "$ARMO_KUBESCAPE_CHART_VERSION" \
--namespace armo-system \
--create-namespace \
--set clusterName="$(kubectl config current-context)" \
--set accountGuid=<YOUR_ARMO_ACCOUNT_ID>

–create-namespace \

ملاحظة:
يتم استخدام نسخة محددة لرسم البيانات الرئيسية لـ Helm. في هذه الحالة، تم اختيار 1.7.15، الذي يتوافق مع إصدار 1.7.15 من مكونات عملية الكتلة لـ Armo (انظر إلى الإخراج من الخطوة 1). من الجيد عمومًا تثبيت الإصدار على نسخة محددة. يساعد هذا في الحصول على نتائج متوقعة، ويسمح بالتحكم في الإصدار عبر Git.

kubectl get deployments -n armo-system

الآن تحقق مما إذا كانت جميع عمليات نشر مكونات عملية الكتلة لـ Armo قيد التشغيل:

Output
NAME READY UP-TO-DATE AVAILABLE AGE armo-collector 1/1 1 1 5d6h armo-kubescape 1/1 1 1 5d6h armo-notification-service 1/1 1 1 5d6h armo-vuln-scan 1/1 1 1 5d6h armo-web-socket 1/1 1 1 5d6h

المخرجات تبدو مشابهة ل:

يجب أن تكون جميع عمليات نشر مكونات عملية الكتلة لـ Armo قيد التشغيل.

  • وأخيرًا، بعد بضع دقائق، يجب أن تتمكن من رؤية تقارير مسح الكتلة الخاصة بك المتاحة في بوابة السحابة، مثل:
  • نتائج فحص التكوين:
  • نتائج فحص الصورة:

نتائج مصور RBAC:

لمزيد من المعلومات، يرجى زيارة صفحة فحص ثغرات العنقود من الوثائق الرسمية.

تعديل قيم Helm لمخطط مكونات عنقود Armo

يمكنك تغيير سلوك مخطط مكونات عنقود Armo عن طريق تحرير ملف قيم Helm المقدم في هذا الدليل.

  • يمكن تغيير الإعدادات التالية:
  • فواصل المسح عبر قيم armoScanScheduler و armoKubescapeScanScheduler.

مشغل مسح صورة جديدة عبر قيمة triggerNewImageScan.

القائمة الكاملة للقيم التي يمكن تخصيصها حسب احتياجاتك متوفرة في ملف قيم مخطط Helm الرسمي.

ARMO_KUBESCAPE_CHART_VERSION="1.7.15"
helm upgrade armo armo/armo-cluster-components \
  --version "$ARMO_KUBESCAPE_CHART_VERSION" \
  --namespace armo-system \
  --set clusterName="$(kubectl config current-context)" \
  --set accountGuid=<YOUR_ARMO_ACCOUNT_ID> \
  -f <YOUR_CUSTOM_HELM_VALUES_FILE_HERE>

لتطبيق التغييرات، تحتاج إلى ترقية إصدار مخطط Helm الحالي عبر (تأكد من استبدال عناصر الـ <> بشكل مناسب):

الخطوة 4 – استخدام Kubescape لفحص الثغرات في تكوين Kubernetes في خط أنابيب CI/CD

كيف يمكنك الاستفادة من تضمين أداة فحص الامتثال الأمني في خط أنابيب CI/CD الخاص بك وتجنب الحالات غير المريحة في بيئة الإنتاج؟

يبدأ كل شيء على مستوى الأساس، حيث يبدأ تطوير البرمجيات. بشكل عام، سترغب في استخدام بيئة مخصصة لكل مرحلة. لذا، في المراحل المبكرة من التطوير عندما تتغير رموز التطبيق بشكل متكرر جدًا، يجب عليك استخدام بيئة تطوير مخصصة (تسمى بشكل عام بالبيئة السفلية). ثم، يتم تحسين التطبيق أكثر وأكثر في بيئة ضمان الجودة، حيث يقوم فرق ضمان الجودة بإجراء الاختبارات اليدوية و/أو الآلية. بعد ذلك، إذا حصل التطبيق على موافقة فريق ضمان الجودة، يتم الترقية إلى البيئات العليا، مثل المرحلة النهائية، وأخيرًا إلى الإنتاج. في هذه العملية، حيث يتم ترقية التطبيق من بيئة إلى أخرى، يتم تشغيل خط أنابيب مخصص، الذي يفحص بشكل مستمر معلمات التطبيق ويحسب درجة المخاطر الأمنية. إذا لم تلبي الدرجة معيارًا محددًا، فإن الخط أنابيب يفشل على الفور ويتم إيقاف ترقية معلمات التطبيق إلى الإنتاج في المراحل الأولى.

لذلك، يعمل أداة فحص الأمان (مثل kubescape) كحارس، ممنعًا المعلمات غير المرغوب فيها في بيئة الإنتاج الخاصة بك من المراحل الأولى للتطوير. بنفس الطريقة، تستخدم خطوط الأنابيب في البيئات العليا أداة kubescape للسماح أو منع معلمات التطبيق من دخول المرحلة النهائية للإنتاج.

تنفيذ سير العمل CI/CD في GitHub Actions

في هذه الخطوة، ستتعلم كيفية إنشاء واختبار أنبوب CI/CD عيني مع فحص الضعف المتكامل عبر سير عمل GitHub. لتعلم أساسيات استخدام إجراءات Github مع Kubernetes DigitalOcean، راجع هذا ال دليل.

يقوم الأنبوب المقدم في القسم التالي ببناء ونشر التطبيق game-2048-example من مستودع DigitalOcean kubernetes-sample-apps.

  1. على مستوى عالٍ، يتكون سير العمل CI/CD المثالي المقدم في مستودع Kubernetes-sample-apps من مراحل الاتيه:
  2. مرحلة بناء واختبار التطبيق – تبني فنيات التطبيق الرئيسية وتشغل الاختبارات التلقائية.
  3. مرحلة فحص Kubescape – تقوم بفحص الضعف المعروفة في ملفات YAML لـ Kubernetes المرتبطة بالتطبيق. يعمل كبوابة، والحالة النهائية للأنبوب (نجاح/فشل) تعتمد على هذه الخطوة. في حالة الفشل، يتم إرسال إشعار عبر Slack أيضًا.
  4. مرحلة بناء ودفع صورة التطبيق – تبني وتسمي صورة التطبيق باستخدام أحدث معرف git commit SHA. ثم، يتم دفع الصورة إلى DOCR.

مرحلة نشر التطبيق – تنشر التطبيق إلى Kubernetes (DOKS).

الرسم البياني أدناه يوضح كل وظيفة من الأنبوب والخطوات المرتبطة بها بالإجراءات (تُظهر الإعدادات ذات الصلة فقط):

  • ملاحظة:
  • في حالة المشاريع المعتمدة على kustomize، من الأفضل أن يتم عرض الملف النهائي للتكوين عبر أمر kubectl kustomize </path/to/kustomization_/file> من أجل التقاط وفحص كل شيء (بما في ذلك الموارد البعيدة). من ناحية أخرى، قد يكون من الصعب تحديد أي مورد Kubernetes يجب إصلاحه. يرجع ذلك إلى أن الملف النهائي للتكوين يتألف من جميع الموارد التي يجب تطبيقها. هذه هي طريقة عمل Kustomize – يقوم بجمع جميع شظايا التكوين من كل تراكب وتطبيقها فوق القالب لبناء التركيبة النهائية.

يمكنك أيضًا إخبار Kubescape بفحص المجلد بأكمله حيث تحتفظ بتكويناتك kustomize (الدليل الحالي يعتمد على هذا النهج). بهذه الطريقة، من الأسهل تحديد المورد الذي يجب تصحيحه في مستودعك. الموارد البعيدة المستخدمة بواسطة kustomize يجب تصحيحها في المصدر. أيضًا، لا تتم التقاط الأسرار و ConfigMaps Kubernetes الناتجة عن طريق kustomize.

كيف تفشل خط الأنابيب إذا لم يتم تحقيق مستوى معيار الأمان المعين؟

يوفر Kubescape CLI علمًا يسمى --fail-threshold لهذا الغرض. يتمثل هذا العلم في النقطة التي ترتبط بمجموع درجة المخاطر بعد كل فحص. يمكنك إخفاق أو تمرير خط الأنابيب استنادًا إلى قيمة العتبة وإيقاف نشر التطبيق إذا لم تتم الشروط.

توضح الصورة أدناه السير لسير العمل CI/CD المثالي المستخدم في هذا الدليل:

  1. يرجى اتباع الخطوات التالية لإنشاء واختبار سير عمل CI/CD لـ kubescape المقدم في مستودع GitHub kubernetes-sample-apps:
  2. قم بعمل Fork لمستودع GitHub kubernetes-sample-apps.
  3. SLACK_WEBHOOK_URL – يحمل عنوان URL لـ Webhook الوارد الخاص بـ Slack المستخدم لإشعارات فحص kubescape.
  4. انتقل إلى علامة التبويب الإجراءات للنسخة المتفرعة من مستودعك وحدد سير العمل مثال CI/CD على 2048 لعبة Kubescape:

A new entry should appear in below list after clicking the Run Workflow green button. Select the running workflow to observe pipeline progress:

انقر فوق زر تشغيل سير العمل واترك القيم الافتراضية:

سيفشل الأنبوب ويتوقف عند تشغيل الوظيفة kubescape-nsa-security-check. من المتوقع ذلك لأن القيمة الافتراضية لعتبة النقاط للمخاطر العامة 30 أقل من القيمة المطلوبة. يجب أن تتلقى أيضًا إشعارًا عبر Slack بتفاصيل حول تشغيل سير العمل:

في الخطوة التالية، ستتعلم كيفية التحقيق في تقرير فحص kubescape لإصلاح المشاكل، وتقليل درجة المخاطر، واجتياز الخط الناقل.

الخطوة 5 – التحقيق في نتائج فحص Kubescape وإصلاح المشاكل المبلغ عنها

كلما لم يتم تحقيق الحد الأدنى لقيمة درجة المخاطر، ستفشل سير عمل game-2048 GitHub ويتم إرسال إشعار عبر سلاك مع تفاصيل إضافية.

يقوم سير عمل game-2048 بفحص أمان واحد (فحص صورة محلية غير مدعوم) – فحوصات تكوين Kubernetes المضبوطة. يتم استخدام العملية kubescape-nsa-security-check لهذا الغرض. الأمر المعادل kubescape المستخدم هو – kubescape scan framework nsa /path/to/project/kubernetes/manifests.

- name: Scan Kubernetes YAML files
  run: |
    kubescape scan framework nsa kustomize/ \
      -t ${{ github.event.inputs.kubescape_fail_threshold || env.KUBESCAPE_FAIL_THRESHOLD }} \
      --submit --account=${{ secrets.ARMOSEC_PORTAL_ACCOUNT_ID }}
  working-directory: ${{ env.PROJECT_DIR }}

يظهر المقتطف أدناه الخطط الرئيسية لعملية kubescape-nsa-security-check:

–submit –account=${{ secrets.ARMOSEC_PORTAL_ACCOUNT_ID }}

التكوين أعلاه يُخبر واجهة سطر الأوامر لـ kubescape بالبدء في فحص جديد لجميع التصريحات Kubernetes الموجودة في الدليل kustomize/ باستخدام إطار NSA. كما يُحدد مستوى العتبة المستخدم عبر العلم -t، وتقديم النتائج النهائية إلى بوابة سحابة Armo (العلم –submit بالتزامن مع –acount).

بالتالي، خفض قيمة درجة المخاطر واجتياز سير العمل يتضمن التحقيق في وإصلاح المشكلات التي أُبلغ عنها بواسطة الوظيفة kubescape-nsa-security-check. بعد ذلك، ستتعلم كيفية التعامل مع المشكلات الأمنية التي تم الإبلاغ عنها من خلال هذه الوظيفة.

A new browser window opens showing in detail each control and description. You will also be presented with required actions to remediate the issue (highlighted in green color):

لفحص تقرير الحالة، يمكنك النقر على رابط نتائج فحص kubescape من الإشعار الذي تلقيته عبر Slack. ثم، انقر على زر الفحص REPOSITORIES SCAN من القائمة اليسرى في بوابة سحابة Armo. الآن، انقر فوق الإدخال kubernetes-sample-apps من القائمة:

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: game-2048
spec:
  replicas: 1
  selector:
    matchLabels:
      app: game-2048
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: game-2048
    spec:
      containers:
        - name: backend
           بعد ذلك، انقر فوق الإدخال deployment.yaml، ثم اضغط على أداة المفتاح الرباعي من الجزء العلوي الأيمن:
          image: registry.digitalocean.com/sample-apps/2048-game:latest
          ports:
            - name: http
              containerPort: 8080
          resources:
            requests:
              cpu: 100m
              memory: 50Mi
            limits:
              cpu: 200m
              memory: 100Mi
          securityContext:
            readOnlyRootFilesystem: true
            runAsNonRoot: true
            allowPrivilegeEscalation: false
            capabilities:
              drop:
                - all

بعد جمع جميع المعلومات من تقرير الفحص، يمكنك المضي قدمًا وتحرير ملف deployment.yaml من مستودعك (الموجود في الدليل game-2048-example/kustomize/resources). تم تطبيق التصحيحات بالفعل، تحتاج فقط إلى فك تعليق السطور الأخيرة من الملف. يجب أن يبدو الملف deployment.yaml النهائي على النحو التالي:

# استبدل العلامات `<>` بمعلومات سجل Docker الخاص بك

  • ملاحظة:
    تم حذف الاقتراحات C-0055 في هذا المثال للبساطة. يمكنك قراءة المزيد حول وضع الحوسبة الآمن في Kubernetes هنا.
  • ما الذي تغير؟ تم تطبيق الإصلاحات الأمنية التالية:
  • readOnlyRootFilesystem – يشغل صورة الحاوية بنظام قراءة فقط (لا يمكن تعديل الملفات بواسطة kubectl exec في الحاوية).
  • runAsNonRoot – يعمل كمستخدم غير جذري كما هو محدد بواسطة التوجيه USER من مشروع game-2048 Dockerfile.

allowPrivilegeEscalation – تعيين allowPrivilegeEscalation إلى false يضمن أن لا يمكن لأي عملية فرعية للحاوية كسب المزيد من الامتيازات من والديها.

capabilities.drop – لجعل الحاويات أكثر أمانًا، يجب أن توفر الحاويات أقل قدر ممكن من الامتيازات التي تحتاج إليها للتشغيل. في الممارسة، تقوم بإسقاط كل شيء بشكل افتراضي، ثم تضيف الامتيازات المطلوبة خطوة بخطوة. يمكنك قراءة المزيد حول أمان الحاويات في هذا المقال الذي كتبته Armosec.

A few final checks can be performed as well on the Kubernetes side to verify if the reported issues were fixed:

  1. أخيرًا، قم بتأكيد التغييرات لملف deployment.yaml وقم بدفعها إلى الفرع الرئيسي. بعد تشغيل سير العمل يدويًا يجب أن يكتمل بنجاح هذه المرة:
  2. تحقق مما إذا كان نشر لعبة 2048 لديه نظام ملفات للقراءة فقط (غير قابل للتغيير) عن طريق كتابة ملف التطبيق index.html:

تحقق مما إذا كان الحاوية تعمل كمستخدم غير جذر (يجب أن يطبع رقمًا صحيحًا مختلفًا عن الصفر – على سبيل المثال، 1000):

kubectl exec -it deployment/game-2048 -n game-2048 -- id -u

تحقق مما إذا كانت الحاوية تعمل كمستخدم غير جذر (يجب أن يطبع رقمًا صحيحًا مختلفًا عن الصفر – على سبيل المثال، 1000):

إذا مرت جميع الفحوصات، فقد قمت بتطبيق التوصيات الأمنية المطلوبة بنجاح.

معالجة الاستثناءات

هناك حالات عندما لا ترغب في أن يتأثر درجة المخاطر النهائية ببعض المشاكل المُبلَّغ عنها والتي يعتبر فريقك أنها آمنة لتجاهلها. يقدم Kubescape ميزة مدمجة لإدارة الاستثناءات والتغلب على هذا الوضع.

A more efficient approach is where you integrate vulnerability scan tools directly in your favorite IDE (or Integrated Development Environment). This way, you can detect and fix security issues ahead of time in the software development cycle.

يمكنك قراءة المزيد عن هذه الميزة هنا.

  1. Kubescape لبيئات التطوير المتكاملة
  2. يقدم Kubescape دعمًا لتكامل بيئة التطوير المتكاملة عبر الامتدادات التالية:

امتداد Visual Studio Code.

امتداد Kubernetes Lens.

تساعد الإضافات المذكورة أعلاه في اكتشاف وإصلاح المشاكل في مراحل مبكرة من عملية التطوير، مما يقضي على الإحباط والتكاليف والثغرات الأمنية في أنظمة الإنتاج. كما أنها تساعد في تقليل التكرار وتوفير جهد بشري في المدى الطويل. على سبيل المثال، عند كل إبلاغ عن مشكلة أمنية من قبل أتمتة CI/CD الخاصة بك، ستحتاج إلى العودة وإصلاح المشكلة في الشفرة الخاصة بك، وتأكيد التغييرات، وانتظار أتمتة CI/CD مرة أخرى، ثم تكرار العملية في حالة الفشل.

يمكنك قراءة المزيد حول هذه الميزات من خلال التنقل إلى صفحة توثيق Kubescape، ثم البحث في قسم التكاملات.

on:
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

الخطوة 6 – تشغيل سير عمل Kubescape CI/CD تلقائيًا

يمكنك ضبط سير العمل للتشغيل تلقائيًا عند كل إرسال أو طلب سحب PR ضد الفرع الرئيسي عن طريق إلغاء تعليق الأسطر التالية في أعلى ملف game-2048-kubescape.yaml:

بعد تعديل الملف، قم بتنفيذ التغييرات على الفرع الرئيسي الخاص بك، ويجب أن تكون جاهزًا للمتابعة.

الخطوة 7 – تمكين إشعارات سليك للرصد المستمر

الأتمتة لفحص الضعف التي قمت بتنفيذها حتى الآن نقطة بداية جيدة ولكنها ليست مثالية. لماذا؟

مشكلة واحدة مع النهج الحالي هي أنك لا تعرف أبدًا متى يتم الإبلاغ عن مشاكل جديدة بالنسبة للأصول التي نشرتها بالفعل في بيئاتك. بعبارة أخرى، قمت بتقييم مخاطر الأمان واتخذت التدابير لإصلاح المشاكل في نقطة زمنية محددة واحدة – عند تنفيذ أتمتة CI/CD الخاصة بك.

لكن ماذا لو تم الإبلاغ عن مشاكل جديدة في غضون ذلك الوقت، وكان تطبيقك غير آمن مرة أخرى؟

ميزة الرصد في Kubescape تساعدك على التعامل مع الثغرات الجديدة، التي يتم الإبلاغ عنها باستمرار. عند الجمع بينها مع التكامل مع سليك، يمكنك اتخاذ إجراءات فورية لإصلاح المشاكل التي تم الكشف عنها حديثًا والتي قد تؤثر على تطبيقك في بيئة الإنتاج.

  1. تدعم بوابة Armo السحابية التكامل مع سليك لإرسال تنبيهات فورية بعد كل مسح للعنقود. يتطلب هذا الميزة تثبيت مخطط Helm الخاص بمكونات سحابة Armo في عنقود DOKS الخاص بك كما هو موضح في الخطوة 3 – تكوين مسحات Kubescape التلقائية لـ DOKS.
  2. من خلال تمكين تنبيهات Slack، ستتلقى إشعارات مهمة حول الثغرات المكتشفة في عنقود DOKS الخاص بك، مثل:
  3. ثغرات عقد العمل (مستوى نظام التشغيل).

ثغرات صور الحاويات.

  • إعدادات Kubernetes المخطئة لمختلف الموارد مثل النشر، القرون، إلخ.
  • أولاً، تحتاج إلى إنشاء تطبيق Slack. ثم، تحتاج إلى منح الأذونات التالية لروبوت Slack الخاص بك في صفحة OAuth & Permissions:
  • channels:join – الانضمام إلى القنوات العامة في مساحة العمل.
  • channels:read – عرض المعلومات الأساسية حول القنوات العامة في مساحة العمل.
  • groups:read – عرض المعلومات الأساسية حول القنوات الخاصة التي تمت إضافة تطبيق Slack الخاص بك إليها.
  • chat:write – إرسال رسائل كـ @< اسم تطبيقك على Slack >.

im:read – عرض المعلومات الأساسية حول الرسائل المباشرة التي تمت إضافة تطبيق Slack الخاص بك إليها.

mpim:read – عرض المعلومات الأساسية حول رسائل المجموعة المباشرة التي تمت إضافة تطبيق Slack الخاص بك إليها.

بعد ذلك، انتقل إلى صفحة الإعدادات في حسابك على بوابة السحابة Armo (أيقونة التروس في الزاوية العلوية اليمنى). ثم، حدد التكاملات، ثم Slack.

الآن، قم بلصق رمز مصادقة الروبوت الخاص بك في صفحة OAuth & Permissions من صفحة تطبيق Slack الخاص بك في حقل الإدخال أدخل الرمز. وأخيرًا، حدد كيفية الحصول على الإخطارات وقناة Slack التي يجب إرسال التنبيهات إليها. انقر فوق الزر تعيين الإخطارات وستكون جاهزًا. يوضح الصورة أدناه التفاصيل:

بعد تكوين التكامل مع Slack، يجب أن تتلقى إشعارات دورية بعد كل فحص للمجموعة على القناة المخصصة:

إذا تلقيت إشعارات مشابهة لما تم ذكره أعلاه، فقد قمت بتكوين التكامل مع Slack بنجاح.

الاستنتاج

في هذا الدليل، تعلمت كيفية استخدام أحد أدوات فحص الثغرات في Kubernetes الأكثر شهرة – Kubescape. كما تعلمت كيفية أداء فحص المجموعة وفحص مستودع (ملفات YAML) باستخدام واجهة سطر الأوامر لـ Kubescape. بعد ذلك، تعلمت كيفية دمج أداة فحص الثغرات في خط أنابيب CI/CD التقليدي المنفذ باستخدام سير العمل في GitHub.

وأخيرًا، تعلمت كيفية التحقيق في تقارير فحص الثغرات، وتطبيق الإصلاحات لإصلاح الوضع، وتقليل درجة المخاطر إلى الحد الأدنى من خلال مثال عملي – تطبيق game-2048 من مستودع kubernetes-sample-apps.

Source:
https://www.digitalocean.com/community/developer-center/using-the-kubescape-vulnerability-scan-tool