Checkov هي أداة لتحليل التعليمات البرمجية الثابتة للبنية التحتية كرمز (IaC) وأيضًا أداة لتحليل تكوين البرامج (SCA) للصور والحزم مفتوحة المصدر.
فهو يقوم بمسح البنية التحتية السحابية المتوفرة باستخدام Terraform أو Terraform Plan أو Cloudformation أو AWS SAM أو Kubernetes أو Helm Charts أو Kustomize أو Dockerfile أو Serverless أو Bicep أو OpenAPI أو ARM Templates أو OpenTofu ويكتشف التكوينات الخاطئة للأمان والامتثال باستخدام المسح المستند إلى الرسم البياني.
يقوم بإجراء فحص تحليل تكوين البرامج (SCA) وهو عبارة عن فحص للحزم والصور مفتوحة المصدر بحثًا عن نقاط الضعف والتعرضات الشائعة (CVEs).
يقوم Checkov أيضًا بتشغيل Prisma Cloud Application Security ، وهو النظام الأساسي للمطور الأول الذي يقوم بتدوين وتبسيط الأمان السحابي طوال دورة حياة التطوير. تعمل Prisma Cloud على تحديد التكوينات الخاطئة وإصلاحها ومنعها في موارد السحابة وملفات البنية التحتية كتعليمات برمجية.
نتائج المسح في CLI
نتيجة الفحص المجدولة في جنكينز
لتثبيت النقطة اتبع المستندات الرسمية
pip3 install checkov
أو مع Homebrew (macOS أو Linux)
brew install checkov
source <( register-python-argcomplete checkov )
إذا قمت بتثبيت checkov مع pip3
pip3 install -U checkov
أو مع البيرة المنزلية
brew upgrade checkov
checkov --directory /user/path/to/iac/code
أو ملف أو ملفات معينة
checkov --file /user/tf/example.tf
أو
checkov -f /user/cloudformation/example1.yml -f /user/cloudformation/example2.yml
أو ملف خطة terraform بتنسيق json
terraform init
terraform plan -out tf.plan
terraform show -json tf.plan > tf.json
checkov -f tf.json
ملحوظة: سيكون ملف إخراج terraform show
tf.json
عبارة عن سطر واحد. ولهذا السبب، سيتم الإبلاغ عن جميع النتائج في السطر رقم 0 بواسطة Checkov
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 إلى عدة أسطر باستخدام الأمر التالي:
terraform show -json tf.plan | jq ' . ' > tf.json
ستكون نتيجة المسح سهلة الاستخدام للغاية.
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 " ,
بدلاً من ذلك، حدد جذر الريبو لملفات hcl المستخدمة لإنشاء ملف الخطة، باستخدام علامة --repo-root-for-plan-enrichment
، لإثراء الإخراج بمسار الملف المناسب وأرقام الأسطر وكتلة التعليمات البرمجية للمورد (ق). هناك فائدة إضافية تتمثل في أنه سيتم التعامل مع عمليات منع الشيكات وفقًا لذلك.
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 من خلال قراءة صفحة البدء.
docker pull bridgecrew/checkov
docker run --tty --rm --volume /user/tf:/tf --workdir /tf bridgecrew/checkov --directory /tf
ملاحظة: إذا كنت تستخدم Python 3.6 (الإصدار الافتراضي في Ubuntu 18.04)، فلن يعمل التحقق، وسيفشل مع ظهور رسالة خطأ ModuleNotFoundError: No module named 'dataclasses'
. في هذه الحالة، يمكنك استخدام إصدار عامل الإرساء بدلاً من ذلك.
لاحظ أن هناك حالات معينة حيث تؤدي إعادة توجيه إخراج docker run --tty
إلى ملف - على سبيل المثال، إذا كنت تريد حفظ إخراج Checkov JUnit إلى ملف - إلى طباعة أحرف تحكم إضافية. هذا يمكن أن يكسر تحليل الملف. إذا واجهت هذا، قم بإزالة علامة --tty
.
تعتبر علامة --workdir /tf
اختيارية لتغيير دليل العمل إلى المجلد المثبت. إذا كنت تستخدم إخراج SARIF -o sarif
فسيؤدي ذلك إلى إخراج ملف results.sarif إلى المجلد المثبت ( /user/tf
في المثال أعلاه). إذا لم تقم بتضمين هذه العلامة، فسيكون دليل العمل "/".
باستخدام إشارات سطر الأوامر، يمكنك تحديد تشغيل عمليات التحقق المسماة فقط (قائمة السماح) أو تشغيل كافة عمليات التحقق باستثناء تلك المدرجة (قائمة الرفض). إذا كنت تستخدم تكامل النظام الأساسي عبر مفتاح API، فيمكنك أيضًا تحديد حد الخطورة للتخطي و/أو التضمين. علاوة على ذلك، نظرًا لأن ملفات json لا يمكن أن تحتوي على تعليقات، فيمكن للمرء تمرير نمط regex لتخطي الفحص السري لملف json.
راجع المستندات للحصول على معلومات أكثر تفصيلاً حول كيفية عمل هذه العلامات معًا.
السماح بتشغيل عمليتي التحقق المحددتين فقط:
checkov --directory . --check CKV_AWS_20,CKV_AWS_57
قم بتشغيل جميع عمليات التحقق باستثناء ما تم تحديده:
checkov -d . --skip-check CKV_AWS_20
قم بتشغيل جميع عمليات التحقق باستثناء عمليات التحقق ذات الأنماط المحددة:
checkov -d . --skip-check CKV_AWS *
قم بتشغيل جميع عمليات التحقق ذات الخطورة المتوسطة أو الأعلى (تتطلب مفتاح واجهة برمجة التطبيقات):
checkov -d . --check MEDIUM --bc-api-key ...
قم بتشغيل جميع عمليات التحقق ذات الخطورة المتوسطة أو الأعلى، بالإضافة إلى التحقق من CKV_123 (بافتراض أن هذا فحص الخطورة منخفض):
checkov -d . --check MEDIUM,CKV_123 --bc-api-key ...
تخطي جميع عمليات التحقق ذات الخطورة المتوسطة أو الأقل:
checkov -d . --skip-check MEDIUM --bc-api-key ...
تخطي كافة عمليات التحقق ذات الخطورة المتوسطة أو الأقل، بالإضافة إلى التحقق من CKV_789 (افترض أن هذا فحص عالي الخطورة):
checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ...
قم بتشغيل كافة عمليات التحقق ذات الخطورة المتوسطة أو الأعلى، ولكن قم بتخطي التحقق CKV_123 (بافتراض أن هذا فحص ذو خطورة متوسطة أو أعلى):
checkov -d . --check MEDIUM --skip-check CKV_123 --bc-api-key ...
قم بتشغيل التحقق CKV_789، لكن قم بتخطيه إذا كان متوسط الخطورة (يتم تطبيق منطق --check دائمًا قبل --skip-check)
checkov -d . --skip-check MEDIUM --check CKV_789 --bc-api-key ...
بالنسبة لأحمال عمل Kubernetes، يمكنك أيضًا استخدام السماح/الرفض لمساحات الأسماء. على سبيل المثال، لا تُبلغ عن أي نتائج لمساحة اسم نظام kube:
checkov -d . --skip-check kube-system
قم بإجراء فحص لصورة الحاوية. قم أولاً بسحب الصورة أو إنشائها ثم الرجوع إليها بالتجزئة أو المعرف أو الاسم:العلامة:
checkov --framework sca_image --docker-image sha256:1234example --dockerfile-path /Users/path/to/Dockerfile --repo-id ... --bc-api-key ...
checkov --docker-image < image-name > :tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
يمكنك استخدام علامة --image أيضًا لمسح صورة الحاوية بدلاً من --docker-image للتقصير:
checkov --image < image-name > :tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
قم بإجراء فحص SCA للحزم في الريبو:
checkov -d . --framework sca_package --bc-api-key ... --repo-id < repo_id(arbitrary) >
قم بإجراء فحص للدليل مع إزالة متغيرات البيئة للتخزين المؤقت وإضافة سجلات مستوى التصحيح:
PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
أو تمكين متغيرات البيئة لعمليات تشغيل متعددة
export PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG
checkov -d .
قم بتشغيل فحص الأسرار على كافة الملفات الموجودة في MyDirectory. تخطي CKV_SECRET_6 للتحقق من ملفات json أن لاحقتها هي DontScan
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:. * DontScan.json$
قم بتشغيل فحص الأسرار على كافة الملفات الموجودة في MyDirectory. تخطي التحقق من CKV_SECRET_6 على ملفات json التي تحتوي على "skip_test" في المسار
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:. * skip_test. * json$
يمكن للمرء إخفاء القيم من نتائج المسح عن طريق توفير ملف تكوين (باستخدام علامة --config-file) مع إدخال القناع. يمكن تطبيق الإخفاء على المورد والقيمة (أو قيم متعددة، مفصولة بفاصلة). أمثلة:
mask:
- aws_instance:user_data
- azurerm_key_vault_secret:admin_password,user_passwords
في المثال أعلاه، سيتم إخفاء القيم التالية:
مثل أي أداة تحليل ثابت، فهي محدودة بنطاق التحليل الخاص بها. على سبيل المثال، إذا تمت إدارة أحد الموارد يدويًا، أو باستخدام أدوات إدارة التكوين اللاحقة، فيمكن إدراج المنع كتعليق توضيحي بسيط للكود.
لتخطي عملية التحقق من كتلة تعريف Terraform معينة أو مورد CloudFormation، قم بتطبيق نمط التعليق التالي داخل نطاقه:
checkov:skip=<check_id>:<suppression_comment>
<check_id>
هو أحد [الماسحات الضوئية المتاحة للشيكات](docs/5.Policy Index/all.md)<suppression_comment>
هو سبب منع اختياري ليتم تضمينه في الإخراج يتخطى التعليق التالي فحص CKV_AWS_20
على المورد المحدد بواسطة foo-bucket
، حيث يتحقق الفحص مما إذا كانت حاوية AWS S3 خاصة. في المثال، تم تكوين الحاوية بوصول عام للقراءة؛ ستؤدي إضافة تعليق المنع إلى تخطي الفحص المناسب بدلاً من التحقق من الفشل.
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
:
...
...
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>
على سبيل المثال:
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
إذا كنت تريد استخدام Checkov ضمن VS Code، فجرّب ملحق Prisma Cloud.
يمكن تكوين Checkov باستخدام ملف تكوين YAML. افتراضيًا، يبحث checkov عن ملف .checkov.yaml
أو .checkov.yml
في الأماكن التالية حسب ترتيب الأسبقية:
--directory
)تنبيه : من أفضل الممارسات أن يتم تحميل ملف تكوين checkov من مصدر موثوق يتكون من هوية تم التحقق منها، بحيث تكون الملفات الممسوحة ضوئيًا ومعرفات التحقق والفحوصات المخصصة المحملة حسب الرغبة.
يمكن للمستخدمين أيضًا تمرير المسار إلى ملف التكوين عبر سطر الأوامر. في هذه الحالة، سيتم تجاهل ملفات التكوين الأخرى. على سبيل المثال:
checkov --config-file path/to/config.yaml
يمكن للمستخدمين أيضًا إنشاء ملف تكوين باستخدام الأمر --create-config
، الذي يأخذ وسيطات سطر الأوامر الحالية ويكتبها في مسار معين. على سبيل المثال:
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
الذي يبدو كالتالي:
branch : develop
check :
- CKV_DOCKER_1
compact : true
directory :
- test-dir
docker-image : sample-image
dockerfile-path : Dockerfile
download-external-modules : true
evaluate-variables : true
external-checks-dir :
- sample-dir
external-modules-download-path : .external_modules
framework :
- all
output : cli
quiet : true
repo-id : prisma-cloud/sample-repo
skip-check :
- CKV_DOCKER_3
- CKV_DOCKER_2
skip-framework :
- dockerfile
- secrets
soft-fail : true
يمكن للمستخدمين أيضًا استخدام علامة --show-config
لعرض جميع الوسائط والإعدادات ومن أين أتت، على سبيل المثال سطر الأوامر أو ملف التكوين أو متغير البيئة أو الافتراضي. على سبيل المثال:
checkov --show-config
سيتم عرض:
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
المساهمة موضع ترحيب!
ابدأ بمراجعة إرشادات المساهمة. بعد ذلك، ألق نظرة على العدد الأول الجيد.
يمكنك أيضًا بدء ذلك بنقرة واحدة في متصفحك من خلال Gitpod على الرابط التالي:
هل تبحث عن المساهمة بشيكات جديدة؟ تعرف على كيفية كتابة شيك جديد (سياسة AKA) هنا.
لا يقوم checkov
بحفظ أو نشر أو مشاركة أي معلومات يمكن تحديدها عن العميل مع أي شخص.
لا يتم استخدام أي معلومات محددة للعملاء للاستعلام عن أدلة Prisma Cloud التي يمكن الوصول إليها بشكل عام. يستخدم checkov
واجهة برمجة تطبيقات Prisma Cloud لإثراء النتائج بروابط لأدلة العلاج. لتخطي استدعاء واجهة برمجة التطبيقات (API) هذا، استخدم العلامة --skip-download
.
تقوم Prisma Cloud ببناء Checkov وصيانته لجعل السياسة كرمز بسيطة ويمكن الوصول إليها.
ابدأ بالوثائق الخاصة بنا للحصول على برامج تعليمية وأمثلة سريعة.
نحن نتبع دورة الدعم الرسمية لـ Python، ونستخدم اختبارات آلية للإصدارات المدعومة من Python. وهذا يعني أننا ندعم حاليًا إصدار Python 3.9 - 3.12 بشكل شامل. لاحظ أن Python 3.8 وصل إلى EOL في أكتوبر 2024 وأن Python 3.9 سيصل إلى EOL في أكتوبر 2025. نحن نحقق في دعم الإصدار 3.13. إذا واجهت أي مشكلات مع أي إصدار غير تابع لـ EOL Python، فيرجى فتح مشكلة.