कोड के रूप में बुनियादी ढांचे के लिए स्थैतिक विश्लेषण उपकरण जो निर्माण-समय के दौरान Terraform, Kubernetes, CloudFormation और कंटेनर इमेज में क्लाउड गलत कॉन्फ़िगरेशन, कमजोरियां और गुप्त जानकारी का पता लगाता है।
Checkov इंफ्रास्ट्रक्चर ऐज़ कोड (IaC) के लिए एक स्थैतिक कोड विश्लेषण उपकरण है और इमेज और ओपन सोर्स पैकेजों के लिए एक सॉफ्टवेयर संरचना विश्लेषण (SCA) उपकरण भी है।
यह Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates, या OpenTofu का उपयोग करके प्रावधानित क्लाउड इंफ्रास्ट्रक्चर को स्कैन करता है और ग्राफ-आधारित स्कैनिंग का उपयोग करके सुरक्षा और अनुपालन गलत कॉन्फ़िगरेशन का पता लगाता है।
यह सॉफ्टवेयर संरचना विश्लेषण (SCA) स्कैनिंग करता है जो सामान्य कमजोरियों और एक्सपोज़र (CVE) के लिए ओपन सोर्स पैकेज और इमेज का स्कैन है।
Checkov Prisma Cloud Application Security को भी संचालित करता है, जो डेवलपर-प्रथम प्लेटफ़ॉर्म है जो विकास जीवनचक्र में क्लाउड सुरक्षा को संहिताबद्ध और सुव्यवस्थित करता है। Prisma Cloud क्लाउड संसाधनों और इंफ्रास्ट्रक्चर-ऐज़-कोड फ़ाइलों में गलत कॉन्फ़िगरेशन की पहचान करता है, उन्हें ठीक करता है और रोकता है।
CLI में स्कैन परिणाम

जेनकिंस में निर्धारित स्कैन परिणाम

pip स्थापित करने के लिए आधिकारिक दस्तावेज़ का पालन करें```sh pip3 install checkov
कुछ वातावरण (जैसे, Debian 12) आपको Checkov को एक वर्चुअल वातावरण में स्थापित करने की आवश्यकता हो सकती है```sh
# Create and activate a virtual environment
python3 -m venv /path/to/venv/checkov
cd /path/to/venv/checkov
source ./bin/activate
# Install Checkov with pip
pip install checkov
# Optional: Create a symlink for easy access
sudo ln -s /path/to/venv/checkov/bin/checkov /usr/local/bin/checkov
या Homebrew (macOS या Linux)```sh brew install checkov
### बैश ऑटोकम्पलीट सक्षम करना```sh
source <(register-python-argcomplete checkov)
यदि आपने pip3 के साथ checkov स्थापित किया है```sh pip3 install -U checkov
या Homebrew के साथ```sh
brew upgrade checkov
checkov --directory /user/path/to/iac/code
या एक विशिष्ट फ़ाइल या फ़ाइलें```sh
checkov --file /user/tf/example.tf
या```sh checkov -f /user/cloudformation/example1.yml -f /user/cloudformation/example2.yml
या एक terraform plan फ़ाइल json प्रारूप में```sh
terraform init
terraform plan -out tf.plan
terraform show -json tf.plan > tf.json
checkov -f tf.json
नोट: terraform show आउटपुट फ़ाइल tf.json एक एकल पंक्ति होगी।
उस कारण से सभी निष्कर्ष Checkov द्वारा पंक्ति संख्या 0 पर रिपोर्ट किए जाएंगे```sh
check: CKV_AWS_21: "Ensure all data stored in the S3 bucket have versioning enabled"
FAILED for resource: aws_s3_bucket.customer
File: /tf/tf.json:0-0
Guide: https://docs.prismacloud.io/en/enterprise-edition/policy-reference/aws-policies/s3-policies/s3-16-enable-versioning
यदि आपने `jq` स्थापित किया है तो आप निम्न आदेश से json फ़ाइल को कई पंक्तियों में बदल सकते हैं:```sh
terraform show -json tf.plan | jq '.' > tf.json
स्कैन परिणाम अधिक उपयोगकर्ता अनुकूल होगा।```sh checkov -f tf.json Check: CKV_AWS_21: "Ensure all data stored in the S3 bucket have versioning enabled" FAILED for resource: aws_s3_bucket.customer File: /tf/tf1.json:224-268 Guide: https://docs.prismacloud.io/en/enterprise-edition/policy-reference/aws-policies/s3-policies/s3-16-enable-versioning
225 | "values": {
226 | "acceleration_status": "",
227 | "acl": "private",
228 | "arn": "arn:aws:s3:::mybucket",
वैकल्पिक रूप से, `--repo-root-for-plan-enrichment` फ़्लैग का उपयोग करके, योजना फ़ाइल उत्पन्न करने के लिए उपयोग किए गए hcl फ़ाइलों के रिपॉजिटरी रूट को निर्दिष्ट करें, ताकि आउटपुट को संसाधन(संसाधनों) के उपयुक्त फ़ाइल पथ, पंक्ति संख्याओं और कोडब्लॉक के साथ समृद्ध किया जा सके। एक अतिरिक्त लाभ यह है कि जाँच दमन को तदनुसार नियंत्रित किया जाएगा।```sh
checkov -f tf.json --repo-root-for-plan-enrichment /user/path/to/iac/code
Passed Checks: 1, Failed Checks: 1, Suppressed Checks: 0 Check: "Ensure all data stored in the S3 bucket is securely encrypted at rest" /main.tf: Passed for resource: aws_s3_bucket.template_bucket Check: "Ensure all data stored in the S3 bucket is securely encrypted at rest" /../regionStack/main.tf: Failed for resource: aws_s3_bucket.sls_deployment_bucket_name
Checkov का उपयोग शुरू करने के लिए [प्रारंभ](https://github.com/bridgecrewio/checkov/blob/main/docs/1.Welcome/Quick%20Start.md) पृष्ठ पढ़ें।
### Docker का उपयोग करना```sh
docker pull bridgecrew/checkov
docker run --tty --rm --volume /user/tf:/tf --workdir /tf bridgecrew/checkov --directory /tf
नोट: यदि आप Python 3.6 (Ubuntu 18.04 में डिफ़ॉल्ट संस्करण) का उपयोग कर रहे हैं, तो checkov काम नहीं करेगा, और यह ModuleNotFoundError: No module named 'dataclasses' त्रुटि संदेश के साथ विफल हो जाएगा। इस स्थिति में, आप इसके बजाय डॉकर संस्करण का उपयोग कर सकते हैं।
ध्यान दें कि कुछ मामलों में docker run --tty आउटपुट को किसी फ़ाइल में रीडायरेक्ट करने पर - उदाहरण के लिए, यदि आप Checkov JUnit आउटपुट को किसी फ़ाइल में सहेजना चाहते हैं - तो अतिरिक्त नियंत्रण वर्ण मुद्रित हो जाएंगे। इससे फ़ाइल पार्सिंग टूट सकती है। यदि आपको यह समस्या आती है, तो --tty फ़्लैग हटा दें।
--workdir /tf फ़्लैग वैकल्पिक है और वर्किंग डायरेक्टरी को माउंटेड वॉल्यूम में बदलने के लिए है। यदि आप SARIF आउटपुट -o sarif का उपयोग कर रहे हैं, तो यह results.sarif फ़ाइल को माउंटेड वॉल्यूम (ऊपर उदाहरण में /user/tf) पर आउटपुट करेगा। यदि आप वह फ़्लैग शामिल नहीं करते हैं, तो वर्किंग डायरेक्टरी "/" होगी।
कमांड लाइन फ़्लैग का उपयोग करके, आप केवल नामित जाँच (अनुमति सूची) चलाने या सभी जाँचों को छोड़कर केवल सूचीबद्ध जाँचों को चलाने (अस्वीकृति सूची) के लिए निर्दिष्ट कर सकते हैं। यदि आप API कुंजी के माध्यम से प्लेटफ़ॉर्म एकीकरण का उपयोग कर रहे हैं, तो आप एक गंभीरता सीमा भी निर्दिष्ट कर सकते हैं जिसे छोड़ा और/या शामिल किया जाना चाहिए। इसके अलावा, चूंकि json फ़ाइलों में टिप्पणियाँ नहीं हो सकतीं, इसलिए आप json फ़ाइल गुप्त स्कैन को छोड़ने के लिए regex पैटर्न पास कर सकते हैं।
इन फ़्लैग के एक साथ काम करने के तरीके के बारे में अधिक विस्तृत जानकारी के लिए दस्तावेज़ देखें।
केवल निर्दिष्ट दो जाँचों को चलाने की अनुमति दें:```sh checkov --directory . --check CKV_AWS_20,CKV_AWS_57
निर्दिष्ट एक को छोड़कर सभी जाँच चलाएँ:```sh
checkov -d . --skip-check CKV_AWS_20
निर्दिष्ट पैटर्न वाले चेक को छोड़कर सभी चेक चलाएँ:```sh checkov -d . --skip-check CKV_AWS*
सभी MEDIUM या उच्च गंभीरता की जाँचें चलाएँ (API कुंजी आवश्यक है):```sh
checkov -d . --check MEDIUM --bc-api-key ...
सभी जाँचों को चलाएँ जो मध्यम गंभीरता या उससे अधिक हैं, साथ ही CKV_123 की जाँच करें (मान लें कि यह निम्न गंभीरता की जाँच है):```sh checkov -d . --check MEDIUM,CKV_123 --bc-api-key ...
सभी मध्यम या निचली गंभीरता की जाँचों को छोड़ें:```sh
checkov -d . --skip-check MEDIUM --bc-api-key ...
MEDIUM गंभीरता या उससे कम की सभी जाँचों को छोड़ें, साथ ही CKV_789 जाँच (मान लें कि यह एक उच्च गंभीरता की जाँच है) को भी छोड़ें:```sh checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ...
उन सभी जाँचों को चलाएँ जो MEDIUM गंभीरता या उससे अधिक हैं, लेकिन जाँच CKV_123 को छोड़ दें (मान लें कि यह एक medium या उससे अधिक गंभीरता की जाँच है):```sh
checkov -d . --check MEDIUM --skip-check CKV_123 --bc-api-key ...
चेक CKV_789 चलाएँ, लेकिन इसे छोड़ दें यदि यह मध्यम गंभीरता का है (--check तर्क हमेशा --skip-check से पहले लागू होता है)```sh checkov -d . --skip-check MEDIUM --check CKV_789 --bc-api-key ...
For Kubernetes workloads, you can also use allow/deny namespaces. For example, do not report any results for the
kube-system namespace:```sh
checkov -d . --skip-check kube-system
कंटेनर इमेज का स्कैन चलाएं। पहले इमेज को पुल या बिल्ड करें, फिर उसे हैश, आईडी, या नाम:टैग द्वारा संदर्भित करें:```sh checkov --framework sca_image --docker-image sha256:1234example --dockerfile-path /Users/path/to/Dockerfile --repo-id ... --bc-api-key ...
checkov --docker-image :tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
आप छोटा करने के लिए --docker-image के बजाय कंटेनर इमेज को स्कैन करने के लिए --image फ़्लैग का भी उपयोग कर सकते हैं:```sh
checkov --image <image-name>:tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
किसी रिपॉजिटरी में पैकेजों का SCA स्कैन चलाएँ:```sh checkov -d . --framework sca_package --bc-api-key ... --repo-id <repo_id(arbitrary)>
बफरिंग हटाने और डीबग स्तर के लॉग जोड़ने के लिए पर्यावरण चरों के साथ एक निर्देशिका का स्कैन चलाएँ:```sh
PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
या कई रनों के लिए पर्यावरण चर सक्षम करें।```sh export PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
MyDirectory में सभी फ़ाइलों पर सीक्रेट्स स्कैनिंग चलाएँ। उन json फ़ाइलों पर CKV_SECRET_6 जाँच को छोड़ें जिनका सफ़िक्स DontScan है।```sh
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*DontScan.json$
गुप्त जानकारी स्कैनिंग चलाएँ MyDirectory में सभी फ़ाइलों पर। उन json फ़ाइलों पर CKV_SECRET_6 जाँच छोड़ें जिनके पथ में "skip_test" शामिल है।```sh checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*skip_test.*json$
स्कैनिंग परिणामों से मानों को मास्क करने के लिए, कोई व्यक्ति कॉन्फ़िगरेशन फ़ाइल (--config-file फ़्लैग का उपयोग करके) मास्क एंट्री के साथ प्रदान कर सकता है। मास्किंग संसाधन और मान (या एकाधिक मान, अल्पविराम से अलग) पर लागू हो सकती है। उदाहरण:```sh
mask:
- aws_instance:user_data
- azurerm_key_vault_secret:admin_password,user_passwords
उपरोक्त उदाहरण में, निम्नलिखित मान मास्क किए जाएंगे:
किसी भी स्थैतिक-विश्लेषण उपकरण की तरह, यह अपने विश्लेषण क्षेत्र (scope) द्वारा सीमित है। उदाहरण के लिए, यदि कोई संसाधन मैन्युअल रूप से प्रबंधित किया जाता है, या बाद के कॉन्फ़िगरेशन प्रबंधन टूलिंग का उपयोग करके, सप्रेशन (suppression) को एक सरल कोड एनोटेशन के रूप में डाला जा सकता है।
किसी दिए गए Terraform परिभाषा ब्लॉक या CloudFormation संसाधन पर किसी चेक को छोड़ने के लिए, इसके दायरे (scope) में निम्नलिखित टिप्पणी पैटर्न लागू करें:
checkov:skip=<check_id>:<suppression_comment>
<check_id> [उपलब्ध चेक स्कैनर्स](docs/5.Policy Index/all.md) में से एक है<suppression_comment> आउटपुट में शामिल करने के लिए एक वैकल्पिक सप्रेशन कारण हैनिम्नलिखित टिप्पणी foo-bucket द्वारा पहचाने गए संसाधन पर CKV_AWS_20 चेक को छोड़ देती है, जहां स्कैन जांचता है कि AWS S3 बकेट निजी (private) है या नहीं। उदाहरण में, बकेट को सार्वजनिक पढ़ने की पहुंच (public read access) के साथ कॉन्फ़िगर किया गया है; सप्रेस टिप्पणी जोड़ने से चेक को विफल करने के बजाय उपयुक्त चेक को छोड़ दिया जाएगा।```hcl-terraform
resource "aws_s3_bucket" "foo-bucket" {
region = var.region
#checkov:skip=CKV_AWS_20:The bucket is a public static content host
bucket = local.bucket_name
force_destroy = true
acl = "public-read"
}
आउटपुट में अब एक ``SKIPPED`` जाँच परिणाम प्रविष्टि होगी:```bash
...
...
Check: "S3 Bucket has an ACL defined which allows public access."
SKIPPED for resource: aws_s3_bucket.foo-bucket
Suppress comment: The bucket is a public static content host
File: /example_skip_acl.tf:1-25
...
एकाधिक जांचों को छोड़ने के लिए, प्रत्येक को एक नई पंक्ति के रूप में जोड़ें।``` #checkov:skip=CKV2_AWS_6 #checkov:skip=CKV_AWS_20:The bucket is a public static content host
Kubernetes मेनिफेस्ट में जांचों को दबाने के लिए, एनोटेशन निम्नलिखित प्रारूप में उपयोग किए जाते हैं:
`checkov.io/skip#: <check_id>=<suppression_comment>`
उदाहरण के लिए:```bash
apiVersion: v1
kind: Pod
metadata:
name: mypod
annotations:
checkov.io/skip1: CKV_K8S_20=I don't care about Privilege Escalation :-O
checkov.io/skip2: CKV_K8S_14
checkov.io/skip3: CKV_K8S_11=I have not set CPU limits as I want BestEffort QoS
spec:
containers:
...
stdout पर विस्तृत लॉगिंग के लिए पर्यावरण चर LOG_LEVEL को DEBUG पर सेट करें।
डिफ़ॉल्ट LOG_LEVEL=WARNING है।
फ़ाइलों या निर्देशिकाओं को छोड़ने के लिए, --skip-path तर्क का उपयोग करें, जिसे कई बार निर्दिष्ट किया जा सकता है। यह तर्क वर्तमान कार्यशील निर्देशिका के सापेक्ष पथों के लिए रेगुलर एक्सप्रेशन स्वीकार करता है। इसका उपयोग पूरी निर्देशिकाओं और/या विशिष्ट फ़ाइलों को छोड़ने के लिए किया जा सकता है।
डिफ़ॉल्ट रूप से, . से शुरू होने वाली किसी भी फ़ाइल या निर्देशिका के अतिरिक्त, node_modules, .terraform, और .serverless नामक सभी निर्देशिकाएँ छोड़ दी जाएँगी।
. से शुरू होने वाली निर्देशिकाओं को छोड़ना रद्द करने के लिए, पर्यावरण चर CKV_IGNORE_HIDDEN_DIRECTORIES को ओवरराइड करें: export CKV_IGNORE_HIDDEN_DIRECTORIES=false
आप पर्यावरण चर CKV_IGNORED_DIRECTORIES सेट करके छोड़ी जाने वाली निर्देशिकाओं के डिफ़ॉल्ट सेट को ओवरराइड कर सकते हैं।
ध्यान दें कि यदि आप इस सूची को संरक्षित करना चाहते हैं और इसमें जोड़ना चाहते हैं, तो आपको इन मानों को शामिल करना होगा। उदाहरण के लिए, CKV_IGNORED_DIRECTORIES=mynewdir केवल उस निर्देशिका को छोड़ेगा, लेकिन ऊपर उल्लिखित अन्य निर्देशिकाओं को नहीं। यह चर लीगेसी कार्यक्षमता है; हम --skip-file फ़्लैग का उपयोग करने की अनुशंसा करते हैं।
कंसोल आउटपुट डिफ़ॉल्ट रूप से रंगीन होता है, मोनोक्रोम आउटपुट पर स्विच करने के लिए, पर्यावरण चर सेट करें:
ANSI_COLORS_DISABLED
यदि आप VS Code के भीतर Checkov का उपयोग करना चाहते हैं, तो Prisma Cloud एक्सटेंशन आज़माएं।
Checkov को YAML कॉन्फ़िगरेशन फ़ाइल का उपयोग करके कॉन्फ़िगर किया जा सकता है। डिफ़ॉल्ट रूप से, checkov प्राथमिकता के क्रम में निम्नलिखित स्थानों पर .checkov.yaml या .checkov.yml फ़ाइल की तलाश करता है:
--directory)ध्यान दें: checkov कॉन्फ़िगरेशन फ़ाइल को किसी सत्यापित पहचान द्वारा बनाए गए विश्वसनीय स्रोत से लोड करना एक सर्वोत्तम अभ्यास है, ताकि स्कैन की गई फ़ाइलें, चेक आईडी और लोड किए गए कस्टम चेक वांछित हों।
उपयोगकर्ता कमांड लाइन के माध्यम से कॉन्फिग फ़ाइल का पथ भी पास कर सकते हैं। इस स्थिति में, अन्य कॉन्फिग फ़ाइलों को अनदेखा कर दिया जाएगा। उदाहरण के लिए:```sh checkov --config-file path/to/config.yaml
उपयोगकर्ता `--create-config` कमांड का उपयोग करके एक कॉन्फ़िग फ़ाइल भी बना सकते हैं, जो वर्तमान कमांड लाइन आर्ग्स लेता है और उन्हें दिए गए पथ पर लिखता है। उदाहरण के लिए:```sh
checkov --compact --directory test-dir --docker-image sample-image --dockerfile-path Dockerfile --download-external-modules True --external-checks-dir sample-dir --quiet --repo-id prisma-cloud/sample-repo --skip-check CKV_DOCKER_3,CKV_DOCKER_2 --skip-framework dockerfile secrets --soft-fail --branch develop --check CKV_DOCKER_1 --create-config /Users/sample/config.yml
एक config.yaml फ़ाइल बनाएगा जो इस प्रकार दिखती है:```yaml
branch: develop
check:
उपयोगकर्ता `--show-config` फ़्लैग का उपयोग करके सभी आर्ग्स और सेटिंग्स तथा वे कहाँ से आए हैं अर्थात कमांडलाइन, कॉन्फ़िग फ़ाइल, पर्यावरण चर या डिफ़ॉल्ट देख सकते हैं। उदाहरण के लिए:```sh
checkov --show-config
दिखाएगा:```sh Command Line Args: --show-config Environment Variables: BC_API_KEY: your-api-key Config File (/Users/sample/.checkov.yml): soft-fail: False branch: master skip-check: ['CKV_DOCKER_3', 'CKV_DOCKER_2'] Defaults: --output: cli --framework: ['all'] --download-external-modules:False --external-modules-download-path:.external_modules --evaluate-variables:True
## योगदान
योगदान का स्वागत है!
[योगदान दिशानिर्देशों](https://github.com/bridgecrewio/checkov/blob/main/CONTRIBUTING.md) की समीक्षा करके शुरू करें। उसके बाद, एक [अच्छा पहला मुद्दा](https://github.com/bridgecrewio/checkov/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) देखें।
आप निम्न लिंक के माध्यम से Gitpod में एक-क्लिक डेवलपमेंट के साथ भी शुरू कर सकते हैं:
[](https://gitpod.io/#https://github.com/bridgecrewio/checkov)
नए चेक जोड़ने में योगदान देना चाहते हैं? [यहाँ](https://github.com/bridgecrewio/checkov/blob/main/docs/6.Contribution/Contribution%20Overview.md) जानें कि नया चेक (उर्फ नीति) कैसे लिखें।
## अस्वीकरण
`checkov` किसी भी पहचान योग्य ग्राहक जानकारी को सहेजता, प्रकाशित या किसी के साथ साझा नहीं करता है।
Prisma Cloud के सार्वजनिक रूप से सुलभ गाइड को क्वेरी करने के लिए किसी भी पहचान योग्य ग्राहक जानकारी का उपयोग नहीं किया जाता है।
`checkov` परिणामों को सुधार गाइड के लिंक के साथ समृद्ध करने के लिए Prisma Cloud के API का उपयोग करता है।
इस API कॉल को छोड़ने के लिए `--skip-download` फ़्लैग का उपयोग करें।
## सहायता
[Prisma Cloud](https://www.prismacloud.io/?utm_source=github&utm_medium=organic_oss&utm_campaign=checkov) Checkov को बनाता और बनाए रखता है ताकि नीति-जैसे-कोड सरल और सुलभ हो।
त्वरित ट्यूटोरियल और उदाहरणों के लिए हमारे [दस्तावेज़ीकरण](https://www.checkov.io/1.Welcome/Quick%20Start.html) से शुरू करें।
## Python संस्करण समर्थन
हम Python के आधिकारिक समर्थन चक्र का पालन करते हैं, और हम Python के समर्थित संस्करणों के लिए स्वचालित परीक्षणों का उपयोग करते हैं।
इसका मतलब है कि हम वर्तमान में Python 3.9 से 3.13 तक (सम्मिलित) का समर्थन करते हैं।
ध्यान दें कि Python 3.8 अक्टूबर 2024 में EOL तक पहुँच गया और Python 3.9 अक्टूबर 2025 में EOL तक पहुँचेगा।
यदि आप किसी गैर-EOL Python संस्करण में किसी समस्या का सामना करते हैं, तो कृपया एक Issue खोलें।