
KubeClarity هي أداة لكشف وإدارة قائمة مكونات البرمجيات (SBOM) والثغرات الأمنية في صور الحاويات وأنظمة الملفات.
[!IMPORTANT] تم إيقاف KubeClarity وتم استبداله بـ openclarity/openclarity.
راجع بيان الإصدار لمزيد من المعلومات.
هذا المشروع لا يتلقى تحديثات. نشجعك على الترحيل.
KubeClarity هي أداة للكشف عن وإدارة فواتير المواد البرمجية (SBOM) والثغرات الأمنية في صور الحاويات وأنظمة الملفات. وهي تقوم بمسح كل من مجموعات K8s في وقت التشغيل وخطوط أنابيب CI/CD لتعزيز أمان سلسلة التوريد البرمجية.

محلل المحتوى KubeClarity يتكامل مع مولدات SBOM التالية:
ماسح الثغرات KubeClarity يتكامل مع الماسحات التالية:

أضف مستودع Helm ```shell helm repo add kubeclarity https://openclarity.github.io/kubeclarity
Save KubeClarity default chart values
helm show values kubeclarity/kubeclarity > values.yaml
تحقق من الإعدادات في values.yaml وقم بتحديث القيم المطلوبة إذا لزم الأمر. لتفعيل وتكوين مولدات SBOM وماسحات الثغرات المدعومة، يرجى التحقق من إعدادات "analyzer" و "scanner" ضمن قسم "vulnerability-scanner" في قيم Helm.
انشر KubeClarity باستخدام Helm ```shell helm install --values values.yaml --create-namespace kubeclarity kubeclarity/kubeclarity -n kubeclarity
أو لتثبيت OpenShift Restricted SCC المتوافق: ```shell
helm install --values values.yaml --create-namespace kubeclarity kubeclarity/kubeclarity -n kubeclarity --set global.openShiftRestricted=true
--set kubeclarity-postgresql.securityContext.enabled=false --set kubeclarity-postgresql.containerSecurityContext.enabled=false
--set kubeclarity-postgresql.volumePermissions.enabled=true --set kubeclarity-postgresql.volumePermissions.securityContext.runAsUser="auto"
--set kubeclarity-postgresql.shmVolume.chmod.enabled=false
3. إعادة توجيه المنفذ إلى KubeClarity UI: ```shell
kubectl port-forward -n kubeclarity svc/kubeclarity-kubeclarity 9999:8080
ملاحظة
تتطلب KubeClarity هذه الأذونات من K8s:
إلغاء تثبيت Helm ```shell helm uninstall kubeclarity -n kubeclarity
تنظيف الموارد
بشكل افتراضي، لن يقوم Helm بإزالة وحدات تخزين PVCs و PVs الخاصة بـ StatefulSets. قم بتشغيل الأمر التالي لحذفهم جميعًا:
kubectl delete pvc -l app.kubernetes.io/instance=kubeclarity -n kubeclarity
بناء الواجهة الأمامية والخلفية وتشغيل الخلفية محليًا (خياران):
VERSION=test make docker-backend
docker run -p 8080:8080 -e FAKE_RUNTIME_SCANNER=true -e FAKE_DATA=true -e ENABLE_DB_INFO_LOGS=true -e DATABASE_DRIVER=LOCAL ghcr.io/openclarity/kubeclarity:test run
make ui && make backend
cp -r ./ui/build ./site
FAKE_RUNTIME_SCANNER=true DATABASE_DRIVER=LOCAL FAKE_DATA=true ENABLE_DB_INFO_LOGS=true ./backend/bin/backend run
افتح واجهة KubeClarity في المتصفح: http://localhost:8080/
يتضمن KubeClarity واجهة سطر أوامر يمكن تشغيلها محليًا ومفيدة بشكل خاص لخطوط أنابيب CI/CD. يسمح بتحليل الصور والدلائل لإنشاء SBOM، وفحصها بحثًا عن الثغرات الأمنية. يمكن تصدير النتائج إلى خلفية KubeClarity.
قم بتنزيل توزيع الإصدار الخاص بنظام تشغيلك من صفحة الإصدارات
قم بفك ضغط ملف kubeclarity-cli الثنائي، وأضفه إلى PATH الخاص بك، وستكون جاهزًا!
صورة Docker متاحة على ghcr.io/openclarity/kubeclarity-cli مع قائمة
العلامات المتاحة هنا.
``` make cli ``` Copy `./cli/bin/cli` إلى PATH الخاص بك تحت اسم `kubeclarity-cli`.
الاستخدام:``` kubeclarity-cli analyze <image/directory name> --input-type <dir|file|image(default)> -o
مثال:```
kubeclarity-cli analyze --input-type image nginx:latest -o nginx.sbom
يمكن اختيارياً تكوين قائمة محللي المحتوى المستخدمين باستخدام متغير البيئة ANALYZER_LIST مفصولة بمسافة (مثال: ANALYZER_LIST="<analyzer 1 name> <analyzer 2 name>")
مثال:``` ANALYZER_LIST="syft gomod" kubeclarity-cli analyze --input-type image nginx:latest -o nginx.sbom
### فحص الثغرات الأمنية
الاستخدام:```
kubeclarity-cli scan <image/sbom/directoty/file name> --input-type <sbom|dir|file|image(default)> -f <output file>
مثال:``` kubeclarity-cli scan nginx.sbom --input-type sbom
اختياريًا، يمكن تكوين قائمة بأدوات فحص الثغرات التي سيتم استخدامها باستخدام متغير البيئة `SCANNERS_LIST` مفصولة بمسافة (مثل `SCANNERS_LIST="<Scanner1 name> <Scanner2 name>"`)
مثال:```
SCANNERS_LIST="grype trivy" kubeclarity-cli scan nginx.sbom --input-type sbom
لتصدير نتائج CLI إلى خلفية KubeClarity، يجب استخدام معرف التطبيق كما هو محدد بواسطة خلفية KubeClarity. يمكن العثور على معرف التطبيق في شاشة التطبيقات في واجهة المستخدم أو باستخدام API الخاص بـ KubeClarity.
BACKEND_HOST= BACKEND_DISABLE_TLS=true kubeclarity-cli analyze --application-id -e -o
BACKEND_HOST=localhost:9999 BACKEND_DISABLE_TLS=true kubeclarity-cli analyze nginx:latest --application-id 23452f9c-6e31-5845-bf53-6566b81a2906 -e -o nginx.sbom
#### تصدير نتائج فحص الثغرات الأمنية```
# The vulnerability scan result can be exported to KubeClarity backend by setting the BACKEND_HOST env variable and the -e flag.
# Note: Until TLS is supported, BACKEND_DISABLE_TLS=true should be set.
BACKEND_HOST=<KubeClarity backend address> BACKEND_DISABLE_TLS=true kubeclarity-cli scan <image> --application-id <application ID> -e
# For example:
SCANNERS_LIST="grype" BACKEND_HOST=localhost:9999 BACKEND_DISABLE_TLS=true kubeclarity-cli scan nginx.sbom --input-type sbom --application-id 23452f9c-6e31-5845-bf53-6566b81a2906 -e
LOCAL_IMAGE_SCAN=true kubeclarity-cli analyze nginx:latest -o nginx.sbom
## فحص الثغرات باستخدام docker image المحلية كمدخلات```
# Local docker images can be scanned using the LOCAL_IMAGE_SCAN env variable
# For example:
LOCAL_IMAGE_SCAN=true kubeclarity-cli scan nginx.sbom
يمكن لـ KubeClarity cli قراءة ملف تكوين يخزن بيانات الاعتماد للسجلات الخاصة.
مثال لقسم السجل في ملف التكوين:``` registry: auths: - authority: <registry 1> username: <username for registry 1> password: <password for registry 1> - authority: <registry 2> token: <token for registry 2>
مثال على تكوين السجل بدون سلطة: (في هذه الحالة سيتم استخدام بيانات الاعتماد هذه لجميع السجلات)```
registry:
auths:
- username: <username>
password: <password>
--config command line flag.kubeclarity scan registry/nginx:private --config $HOME/own-kubeclarity-config
## دعم السجلات الخاصة لفحص وقت التشغيل في K8s
Kubeclarity يستخدم [k8schain](https://github.com/google/go-containerregistry/tree/main/pkg/authn/k8schain#k8schain) من google/go-containerregistry للمصادقة على السجلات.
إذا لم تكن بيانات اعتماد الخدمة الضرورية قابلة للاكتشاف بواسطة k8schain، فيمكن تعريفها عبر الأسرار الموضحة أدناه.
بالإضافة إلى ذلك، إذا لم تكن بيانات اعتماد الخدمة موجودة في مساحة اسم "kubeclarity"، فيرجى تعيين CREDS_SECRET_NAMESPACE إلى نشر kubeclarity.
عند استخدام helm [charts](https://github.com/openclarity/kubeclarity/blob/HEAD/charts)، يتم تعيين CREDS_SECRET_NAMESPACE إلى مساحة اسم الإصدار المثبتة kubeclarity.
### Amazon ECR
أنشئ [مستخدم AWS IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_console) مع أذونات `AmazonEC2ContainerRegistryFullAccess`.
استخدم بيانات اعتماد المستخدم (`AWS_ACCESS_KEY_ID`، `AWS_SECRET_ACCESS_KEY`، `AWS_DEFAULT_REGION`) لإنشاء السر التالي:```
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Secret
metadata:
name: ecr-sa
namespace: kubeclarity
type: Opaque
data:
AWS_ACCESS_KEY_ID: $(echo -n 'XXXX'| base64 -w0)
AWS_SECRET_ACCESS_KEY: $(echo -n 'XXXX'| base64 -w0)
AWS_DEFAULT_REGION: $(echo -n 'XXXX'| base64 -w0)
EOF
ملاحظة:
ecr-saAWS_ACCESS_KEY_ID و AWS_SECRET_ACCESS_KEY و AWS_DEFAULT_REGIONأنشئ حساب خدمة Google مع صلاحيات Artifact Registry Reader.
استخدم ملف json لحساب الخدمة لإنشاء السر التالي``` kubectl -n kubeclarity create secret generic --from-file=sa.json gcr-sa
ملاحظة:
1. يجب أن يكون اسم السر `gcr-sa`
1. يجب أن يكون `sa.json` هو اسم ملف JSON لحساب الخدمة عند إنشاء السر
2. يستخدم KubeClarity [بيانات اعتماد التطبيق الافتراضية](https://developers.google.com/identity/protocols/application-default-credentials). تعمل هذه فقط عند تشغيل KubeClarity من GCP.
## دمج SBOM والثغرات عبر مراحل CI/CD المختلفة```
# Additional SBOM will be merged into the final results when '--merge-sbom' is defined during analysis. The input SBOM can be CycloneDX XML or CyclonDX json format.
# For example:
ANALYZER_LIST="syft" kubeclarity-cli analyze nginx:latest -o nginx.sbom --merge-sbom inputsbom.xml
يمكن لأمر التحليل kubeclarity-cli analyze تنسيق SBOM الناتج إلى تنسيقات مختلفة إذا لزم الأمر للتكامل مع نظام آخر. التنسيقات المدعومة هي:
| التنسيق | اسم الإعداد |
|---|---|
| CycloneDX JSON (افتراضي) | cyclonedx-json |
| CycloneDX XML | cyclonedx-xml |
| SPDX JSON | spdx-json |
تحذير
يقوم KubeClarity بمعالجة CycloneDX داخليًا، ويتم دعم التنسيقات الأخرى من خلال التحويل. قد تكون عملية التحويل غير مكتملة بسبب عدم التوافق بين التنسيقات، وبالتالي لا يُضمن وجود جميع الحقول/المعلومات في الإخراج الناتج.
لتكوين kubeclarity-cli لاستخدام تنسيق غير الافتراضي، يمكن استخدام متغير البيئة ANALYZER_OUTPUT_FORMAT مع اسم الإعداد أعلاه:``` ANALYZER_OUTPUT_FORMAT="spdx-json" kubeclarity-cli analyze nginx:latest -o nginx.sbom
## خوادم الماسح الضوئي عن بُعد لـ CLI
عند تشغيل CLI الخاص بـ kubeclarity لفحص الثغرات الأمنية، سيحتاج CLI إلى تنزيل قواعد بيانات الثغرات ذات الصلة إلى الموقع الذي يعمل فيه CLI الخاص بـ kubeclarity. سيؤدي تشغيل CLI في مسار CI/CD إلى تنزيل قواعد البيانات في كل مرة يتم تشغيلها، مما يضيع الوقت وعرض النطاق الترددي. لهذا السبب، فإن العديد من الماسحات الضوئية المدعومة تحتوي على وضع عن بُعد يكون فيه الخادم مسؤولاً عن إدارة قواعد البيانات وربما فحص القطع الأثرية.
> ***ملاحظة***
>
> الأمثلة أدناه مخصصة لكل ماسح ضوئي على حدة، ولكن يمكن دمجها لتشغيلها معًا بنفس الطريقة التي يمكن بها في الوضع غير البعيد.
### Trivy
يدعم ماسح Trivy الوضع عن بُعد باستخدام خادم Trivy. يمكن نشر خادم trivy كما هو موثق هنا: [trivy client-server mode](https://aquasecurity.github.io/trivy/v0.34/docs/references/modes/client-server/). إرشادات تثبيت CLI الخاص بـ Trivy متاحة هنا: [trivy install](https://aquasecurity.github.io/trivy/v0.34/getting-started/installation/). يوفر فريق Aqua صورة حاوية رسمية يمكن استخدامها لتشغيل الخادم في kubernetes/docker والتي سنستخدمها في الأمثلة هنا.
لبدء تشغيل الخادم:```
docker run -p 8080:8080 --rm aquasec/trivy:0.41.0 server --listen 0.0.0.0:8080
لتشغيل فحص باستخدام الخادم:``` SCANNERS_LIST="trivy" SCANNER_TRIVY_SERVER_ADDRESS="http://:8080" ./kubeclarity_cli scan --input-type sbom nginx.sbom
خادم trivy يوفر أيضًا مصادقة مستندة إلى الرمز المميز لمنع الاستخدام غير المصرح به لمثيل خادم trivy. يمكنك تمكين ذلك عن طريق تشغيل الخادم مع العلم الإضافي:```
docker run -p 8080:8080 --rm aquasec/trivy:0.41.0 server --listen 0.0.0.0:8080 --token mytoken
وتمرير الرمز المميز إلى الماسح الضوئي:``` SCANNERS_LIST="trivy" SCANNER_TRIVY_SERVER_ADDRESS="http://:8080" SCANNER_TRIVY_SERVER_TOKEN="mytoken" ./kubeclarity_cli scan --input-type sbom nginx.sbom
### Grype
يدعم Grype الوضع عن بُعد باستخدام [grype-server](https://github.com/portshift/grype-server)
وهو غلاف RESTful لـ Grype يوفر واجهة برمجة تطبيقات تستقبل SBOM وتعيد
نتائج فحص grype لذلك SBOM. يتم شحن Grype-server كصورة حاوية
لذلك يمكن تشغيله في kubernetes أو عبر docker بشكل مستقل.
لبدء الخادم:```
docker run -p 9991:9991 --rm gcr.io/eticloud/k8sec/grype-server:v0.1.5
لتشغيل مسح باستخدام الخادم:``` SCANNERS_LIST="grype" SCANNER_GRYPE_MODE="remote" SCANNER_REMOTE_GRYPE_SERVER_ADDRESS=":9991" SCANNER_REMOTE_GRYPE_SERVER_SCHEMES="https" ./kubeclarity_cli scan --input-type sbom nginx.sbom
إذا تم نشر خادم Grype مع TLS، يمكنك تجاوز نظام URL الافتراضي كما يلي:```
SCANNERS_LIST="grype" SCANNER_GRYPE_MODE="remote" SCANNER_REMOTE_GRYPE_SERVER_ADDRESS="<grype server address>:9991" SCANNER_REMOTE_GRYPE_SERVER_SCHEMES="https" ./kubeclarity_cli scan --input-type sbom nginx.sbom
راجع مثال التكوين هنا
نرحب بطلبات السحب وتقارير الأخطاء.
للتغييرات الأكبر، يرجى إنشاء Issue في GitHub أولاً لمناقشة تغييراتك المقترحة والآثار المحتملة.
لمزيد من التفاصيل، يرجى الاطلاع على إرشادات المساهمة لهذا المشروع
| الإذن | السبب |
|---|
| قراءة الأسرار في CREDS_SECRET_NAMESPACE (الافتراضي: kubeclarity) | هذا يسمح لك بتكوين أسرار سحب الصور لمسح مستودعات الصور الخاصة. |
| قراءة config maps في مساحة نشر KubeClarity. | هذا مطلوب للحصول على القالب المُهيأ لوظيفة الماسح الضوئي. |
| سرد pods في نطاق الكتلة. | هذا مطلوب لحساب pods المستهدفة التي تحتاج إلى المسح. |
| سرد namespaces. | هذا مطلوب لجلب namespaces المستهدفة للمسح في واجهة مسح وقت التشغيل K8s. |
| إنشاء وحذف jobs في نطاق الكتلة. | هذا مطلوب لإدارة jobs التي ستقوم بمسح pods المستهدفة في namespaces الخاصة بها. |
| SPDX Tag Value |
| spdx-tv |
| Syft JSON | syft-json |