
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
KubeClarity के डिफ़ॉल्ट चार्ट मान सहेजें
helm show values kubeclarity/kubeclarity > values.yaml
values.yaml में कॉन्फ़िगरेशन जांचें और आवश्यकता होने पर आवश्यक मान अपडेट करें। समर्थित SBOM जनरेटर और भेद्यता स्कैनर को सक्षम और कॉन्फ़िगर करने के लिए, कृपया Helm मानों में "vulnerability-scanner" अनुभाग के अंतर्गत "analyzer" और "scanner" कॉन्फ़िगरेशन देखें।
Helm के साथ KubeClarity तैनात करें ```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 पर Port forward करें: ```shell
kubectl port-forward -n kubeclarity svc/kubeclarity-kubeclarity 9999:8080
नोट
KubeClarity को इन K8s अनुमतियों की आवश्यकता है:
अनुमति कारण CREDS_SECRET_NAMESPACE में रहस्य पढ़ें (डिफ़ॉल्ट: kubeclarity) यह आपको निजी इमेज रिपॉजिटरी को स्कैन करने के लिए इमेज पुल सीक्रेट्स कॉन्फ़िगर करने की अनुमति देता है। KubeClarity डिप्लॉयमेंट नेमस्पेस में कॉन्फ़िग मैप्स पढ़ें। यह स्कैनर जॉब के कॉन्फ़िगर्ड टेम्पलेट को प्राप्त करने के लिए आवश्यक है। क्लस्टर स्कोप में पॉड्स की सूची बनाएं। यह उन लक्ष्य पॉड्स की गणना करने के लिए आवश्यक है जिन्हें स्कैन करने की आवश्यकता है। नेमस्पेस की सूची बनाएं। यह K8s रनटाइम स्कैन UI में स्कैन करने के लिए लक्ष्य नेमस्पेस प्राप्त करने के लिए आवश्यक है। क्लस्टर स्कोप में जॉब्स बनाएं और हटाएं। यह उन जॉब्स को प्रबंधित करने के लिए आवश्यक है जो अपने नेमस्पेस में लक्ष्य पॉड्स को स्कैन करेंगी।
Helm अनइंस्टॉल करें ```shell helm uninstall kubeclarity -n kubeclarity
संसाधनों को साफ़ करना
डिफ़ॉल्ट रूप से, Helm StatefulSets के लिए PVC और PV को नहीं हटाएगा। उन सभी को हटाने के लिए निम्नलिखित कमांड चलाएँ:
kubectl delete pvc -l app.kubernetes.io/instance=kubeclarity -n kubeclarity
UI और बैकएंड का निर्माण करें और बैकएंड को स्थानीय रूप से प्रारंभ करें (2 विकल्प):
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 UI खोलें: http://localhost:8080/
KubeClarity में एक CLI शामिल है जिसे स्थानीय रूप से चलाया जा सकता है और विशेष रूप से CI/CD पाइपलाइनों के लिए उपयोगी है। यह इमेज और निर्देशिकाओं का विश्लेषण करके SBOM उत्पन्न करने और उसमें कमजोरियों के लिए स्कैन करने की अनुमति देता है। परिणामों को KubeClarity बैकएंड में निर्यात किया जा सकता है।
अपने OS के लिए रिलीज़ वितरण को रिलीज़ पेज से डाउनलोड करें
kubeclarity-cli बाइनरी को अनपैक करें, इसे अपने PATH में जोड़ें, और आप तैयार हैं!
एक डॉकर इमेज ghcr.io/openclarity/kubeclarity-cli पर उपलब्ध है जिसमें उपलब्ध टैग की सूची यहाँ दी गई है।
``` make cli ``` `./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 env
वेरिएबल का उपयोग करके कॉन्फ़िगर किया जा सकता है, जो एक स्पेस से अलग किए गए होते हैं (उदाहरण 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` env वेरिएबल का उपयोग करके कॉन्फ़िगर किया जा सकता है, जिसमें मान स्पेस से अलग किए जाते हैं (उदा. `SCANNERS_LIST="<Scanner1 name> <Scanner2 name>"`)```
SCANNERS_LIST="grype trivy" kubeclarity-cli scan nginx.sbom --input-type sbom
KubeClarity बैकएंड में CLI परिणामों को निर्यात करने के लिए, KubeClarity बैकएंड द्वारा परिभाषित एक एप्लीकेशन ID का उपयोग करना आवश्यक है। एप्लीकेशन ID UI में Applications स्क्रीन पर या KubeClarity API का उपयोग करके पाई जा सकती है।
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
## स्थानीय डॉकर छवि को इनपुट के रूप में उपयोग करके भेद्यता स्कैनिंग```
# 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>
```
### CLI के लिए कॉन्फ़िग फ़ाइल निर्दिष्ट करें```
# The default config path is $HOME/.kubeclarity or it can be specified by `--config` command line flag.
# kubeclarity <scan/analyze> <image name> --config <kubeclarity config path>
# For example:
kubeclarity scan registry/nginx:private --config $HOME/own-kubeclarity-config
```
## K8s रनटाइम स्कैन के लिए प्राइवेट रजिस्ट्रियों का समर्थन
Kubeclarity, google/go-containerregistry के [k8schain](https://github.com/google/go-containerregistry/tree/main/pkg/authn/k8schain#k8schain) का उपयोग रजिस्ट्रियों में प्रमाणीकरण के लिए करता है।
यदि k8schain द्वारा आवश्यक सेवा क्रेडेंशियल्स का पता नहीं लगाया जा सकता है, तो उन्हें नीचे वर्णित सीक्रेट्स के माध्यम से परिभाषित किया जा सकता है।
इसके अलावा, यदि सेवा क्रेडेंशियल्स "kubeclarity" नेमस्पेस में स्थित नहीं हैं, तो कृपया kubeclarity Deployment में CREDS_SECRET_NAMESPACE सेट करें।
हेल्म [चार्ट्स](https://github.com/openclarity/kubeclarity/blob/main/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
```
नोट:
1. सीक्रेट का नाम `ecr-sa` होना चाहिए
2. सीक्रेट डेटा कुंजियाँ `AWS_ACCESS_KEY_ID`, `AWS_SECRET_ACCESS_KEY` और `AWS_DEFAULT_REGION` पर सेट होनी चाहिए
### Google GCR
एक [Google सेवा खाता](https://cloud.google.com/docs/authentication/getting-started#creating_a_service_account) बनाएँ जिसमें `Artifact Registry Reader` अनुमतियाँ हों।
सेवा खाते की json फ़ाइल का उपयोग करके निम्नलिखित सीक्रेट बनाएँ```
kubectl -n kubeclarity create secret generic --from-file=sa.json gcr-sa
```
नोट:
1. गुप्त नाम `gcr-sa` होना चाहिए
1. गुप्त कुंजी उत्पन्न करते समय सेवा खाते की json फ़ाइल का नाम `sa.json` होना चाहिए
2. KubeClarity [एप्लिकेशन डिफ़ॉल्ट क्रेडेंशियल्स](https://developers.google.com/identity/protocols/application-default-credentials) का उपयोग कर रहा है। ये केवल तब काम करते हैं जब KubeClarity GCP से चलाया जाता है।
## विभिन्न CI/CD चरणों में SBOM और कमजोरियों का विलय```
# 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
```
## विभिन्न SBOM प्रारूप आउटपुट करें
kubeclarity-cli analyze कमांड परिणामी SBOM को विभिन्न प्रारूपों में स्वरूपित कर सकता है यदि किसी अन्य सिस्टम के साथ एकीकरण आवश्यक हो। समर्थित प्रारूप हैं:
| प्रारूप | कॉन्फ़िगरेशन नाम |
| --- | --- |
| CycloneDX JSON (डिफ़ॉल्ट) | cyclonedx-json |
| CycloneDX XML | cyclonedx-xml |
| SPDX JSON | spdx-json |
| SPDX Tag Value | spdx-tv |
| Syft JSON | syft-json |
> ***चेतावनी***
> KubeClarity आंतरिक रूप से CycloneDX प्रोसेस करता है, अन्य प्रारूप रूपांतरण के माध्यम से समर्थित हैं। रूपांतरण प्रक्रिया प्रारूपों के बीच असंगतताओं के कारण हानिकारक हो सकती है, इसलिए परिणामी आउटपुट में सभी फ़ील्ड/जानकारी मौजूद रहने का वादा नहीं किया जाता है।
kubeclarity-cli को डिफ़ॉल्ट के अलावा किसी अन्य प्रारूप का उपयोग करने के लिए कॉन्फ़िगर करने के लिए, उपरोक्त कॉन्फ़िगरेशन नाम के साथ ANALYZER\_OUTPUT\_FORMAT वातावरण चर का उपयोग किया जा सकता है:```
ANALYZER_OUTPUT_FORMAT="spdx-json" kubeclarity-cli analyze nginx:latest -o nginx.sbom
```
## CLI के लिए रिमोट स्कैनर सर्वर
जब kubeclarity CLI को कमजोरियों के लिए स्कैन करने के लिए चलाया जाता है, तो CLI को उस स्थान पर प्रासंगिक कमजोरी DBs डाउनलोड करने की आवश्यकता होगी जहाँ kubeclarity CLI चल रहा है। CI/CD पाइपलाइन में CLI चलाने से प्रत्येक रन पर DBs डाउनलोड हो सकते हैं, जिससे समय और बैंडविड्थ बर्बाद होता है। इस कारण से कई समर्थित स्कैनर में एक रिमोट मोड होता है जिसमें एक सर्वर DB प्रबंधन और संभवतः आर्टिफैक्ट्स की स्कैनिंग के लिए जिम्मेदार होता है।
> ***नोट***
>
> नीचे दिए गए उदाहरण प्रत्येक स्कैनर के लिए हैं, लेकिन उन्हें एक साथ चलाने के लिए संयोजित किया जा सकता है, ठीक वैसे ही जैसे वे गैर-रिमोट मोड में हो सकते हैं।
### Trivy
Trivy स्कैनर Trivy सर्वर का उपयोग करके रिमोट मोड का समर्थन करता है। Trivy सर्वर को यहाँ दस्तावेज के अनुसार तैनात किया जा सकता है: [trivy client-server mode](https://aquasecurity.github.io/trivy/v0.34/docs/references/modes/client-server/)।
Trivy CLI स्थापित करने के निर्देश यहाँ उपलब्ध हैं: [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://<trivy server address>: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://<trivy server address>: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 रैपर जो एक API प्रदान करता है जो एक SBOM प्राप्त करता है और
उस SBOM के लिए grype स्कैन परिणाम लौटाता है। 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="<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
```
### Dependency Track
उदाहरण कॉन्फ़िगरेशन [यहाँ देखें](https://github.com/openclarity/kubeclarity/blob/main/shared/pkg/scanner/dependency_track/example/README.md)
# सीमाएँ
1. Docker Image Manifest V2, Schema 2 (https://docs.docker.com/registry/spec/manifest-v2-2/) का समर्थन करता है। यह पुराने संस्करणों को स्कैन करने में विफल रहेगा।
# रोडमैप
* अतिरिक्त सामग्री विश्लेषकों (SBOM जनरेटर) के साथ एकीकरण
* अतिरिक्त भेद्यता स्कैनर के साथ एकीकरण
* UI में CIS Docker बेंचमार्क
* [Cosign](https://github.com/sigstore/cosign) का उपयोग करके इमेज हस्ताक्षर
* [Cosign](https://github.com/sigstore/cosign) और [in-toto](https://github.com/in-toto/in-toto) का उपयोग करके CI/CD मेटाडेटा हस्ताक्षर और प्रमाणीकरण (सप्लाई चेन सुरक्षा)
* सिस्टम सेटिंग्स और उपयोगकर्ता प्रबंधन
# योगदान
पुल अनुरोध और बग रिपोर्ट का स्वागत है।
बड़े बदलावों के लिए कृपया पहले GitHub में एक Issue बनाएं ताकि आपके प्रस्तावित बदलावों और संभावित प्रभावों पर चर्चा की जा सके।
अधिक जानकारी के लिए कृपया [इस परियोजना के लिए योगदान दिशानिर्देश](https://github.com/openclarity/kubeclarity/blob/main/CONTRIBUTING.md) देखें
## लाइसेंस
[Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)