Checkov adalah alat analisis kode statis untuk infrastruktur sebagai kode (IaC) dan juga alat analisis komposisi perangkat lunak (SCA) untuk gambar dan paket sumber terbuka.
Ini memindai infrastruktur cloud yang disediakan menggunakan Terraform, paket Terraform, Cloudformation, AWS SAM, Kubernetes, grafik Helm, Kustomize, Dockerfile, Tanpa Server, Bicep, OpenAPI, ARM Templates, atau OpenTofu dan mendeteksi kesalahan konfigurasi keamanan dan kepatuhan menggunakan pemindaian berbasis grafik.
Ia melakukan pemindaian Analisis Komposisi Perangkat Lunak (SCA) yang merupakan pemindaian paket dan gambar sumber terbuka untuk Kerentanan dan Eksposur Umum (CVEs).
Checkov juga mendukung Prisma Cloud Application Security , platform pertama pengembang yang mengkodifikasi dan menyederhanakan keamanan cloud di seluruh siklus pengembangan. Prisma Cloud mengidentifikasi, memperbaiki, dan mencegah kesalahan konfigurasi pada sumber daya cloud dan file infrastruktur sebagai kode.
Hasil pemindaian di CLI
Hasil pemindaian terjadwal di Jenkins
Untuk menginstal pip ikuti dokumen resmi
pip3 install checkov
atau dengan Homebrew (macOS atau Linux)
brew install checkov
source <( register-python-argcomplete checkov )
jika Anda menginstal checkov dengan pip3
pip3 install -U checkov
atau dengan Homebrew
brew upgrade checkov
checkov --directory /user/path/to/iac/code
Atau file atau file tertentu
checkov --file /user/tf/example.tf
Atau
checkov -f /user/cloudformation/example1.yml -f /user/cloudformation/example2.yml
Atau file rencana terraform dalam format json
terraform init
terraform plan -out tf.plan
terraform show -json tf.plan > tf.json
checkov -f tf.json
Catatan: file keluaran terraform show
tf.json
akan berupa satu baris. Oleh karena itu semua temuan akan dilaporkan pada baris nomor 0 oleh 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
Jika Anda telah menginstal jq
Anda dapat mengonversi file json menjadi beberapa baris dengan perintah berikut:
terraform show -json tf.plan | jq ' . ' > tf.json
Hasil pemindaian akan lebih ramah pengguna.
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 " ,
Alternatifnya, tentukan root repo dari file hcl yang digunakan untuk menghasilkan file rencana, menggunakan tanda --repo-root-for-plan-enrichment
, untuk memperkaya output dengan jalur file, nomor baris, dan blok kode sumber daya yang sesuai. (S). Manfaat tambahannya adalah penghentian pemeriksaan akan ditangani sebagaimana mestinya.
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
Mulai gunakan Checkov dengan membaca halaman Memulai.
docker pull bridgecrew/checkov
docker run --tty --rm --volume /user/tf:/tf --workdir /tf bridgecrew/checkov --directory /tf
Catatan: jika Anda menggunakan Python 3.6 (Versi default di Ubuntu 18.04) checkov tidak akan berfungsi, dan akan gagal dengan pesan kesalahan ModuleNotFoundError: No module named 'dataclasses'
. Dalam hal ini, Anda dapat menggunakan versi buruh pelabuhan.
Perhatikan bahwa ada kasus tertentu ketika mengarahkan docker run --tty
output ke file - misalnya, jika Anda ingin menyimpan output Checkov JUnit ke file - akan menyebabkan karakter kontrol tambahan dicetak. Ini dapat merusak penguraian file. Jika Anda mengalami hal ini, hapus tanda --tty
.
Flag --workdir /tf
bersifat opsional untuk mengubah direktori kerja ke volume terpasang. Jika Anda menggunakan output SARIF -o sarif
ini akan menampilkan file results.sarif ke volume yang terpasang ( /user/tf
pada contoh di atas). Jika Anda tidak menyertakan tanda itu, direktori kerjanya adalah "/".
Dengan menggunakan tanda baris perintah, Anda dapat menentukan untuk menjalankan hanya pemeriksaan bernama (daftar izin) atau menjalankan semua pemeriksaan kecuali yang terdaftar (daftar tolak). Jika Anda menggunakan integrasi platform melalui kunci API, Anda juga dapat menentukan ambang batas tingkat keparahan untuk dilewati dan/atau disertakan. Selain itu, karena file json tidak boleh berisi komentar, seseorang dapat meneruskan pola regex untuk melewati pemindaian rahasia file json.
Lihat dokumen untuk informasi lebih detail tentang cara kerja tanda-tanda ini.
Izinkan hanya dua pemeriksaan tertentu yang dijalankan:
checkov --directory . --check CKV_AWS_20,CKV_AWS_57
Jalankan semua pemeriksaan kecuali yang ditentukan:
checkov -d . --skip-check CKV_AWS_20
Jalankan semua pemeriksaan kecuali pemeriksaan dengan pola tertentu:
checkov -d . --skip-check CKV_AWS *
Jalankan semua pemeriksaan dengan tingkat keparahan SEDANG atau lebih tinggi (memerlukan kunci API):
checkov -d . --check MEDIUM --bc-api-key ...
Jalankan semua pemeriksaan dengan tingkat keparahan SEDANG atau lebih tinggi, serta periksa CKV_123 (anggap ini adalah pemeriksaan tingkat keparahan RENDAH):
checkov -d . --check MEDIUM,CKV_123 --bc-api-key ...
Lewati semua pemeriksaan dengan tingkat keparahan SEDANG atau lebih rendah:
checkov -d . --skip-check MEDIUM --bc-api-key ...
Lewati semua pemeriksaan dengan tingkat keparahan SEDANG atau lebih rendah, serta periksa CKV_789 (anggap ini adalah pemeriksaan dengan tingkat keparahan tinggi):
checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ...
Jalankan semua pemeriksaan dengan tingkat keparahan SEDANG atau lebih tinggi, tetapi lewati pemeriksaan CKV_123 (anggap ini adalah pemeriksaan tingkat keparahan sedang atau lebih tinggi):
checkov -d . --check MEDIUM --skip-check CKV_123 --bc-api-key ...
Jalankan pemeriksaan CKV_789, tetapi lewati saja jika tingkat keparahannya sedang (logika --check selalu diterapkan sebelum --skip-check)
checkov -d . --skip-check MEDIUM --check CKV_789 --bc-api-key ...
Untuk beban kerja Kubernetes, Anda juga dapat menggunakan namespace izinkan/tolak. Misalnya, jangan laporkan hasil apa pun untuk namespace kube-system:
checkov -d . --skip-check kube-system
Jalankan pemindaian gambar kontainer. Pertama-tama tarik atau buat gambarnya, lalu rujuk dengan hash, ID, atau nama:tag:
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 ...
Anda juga dapat menggunakan tanda --image untuk memindai gambar kontainer alih-alih --docker-image untuk penyingkat:
checkov --image < image-name > :tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
Jalankan pemindaian SCA pada paket di repo:
checkov -d . --framework sca_package --bc-api-key ... --repo-id < repo_id(arbitrary) >
Jalankan pemindaian direktori dengan variabel lingkungan yang menghapus buffering, menambahkan log tingkat debug:
PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
ATAU aktifkan variabel lingkungan untuk beberapa proses
export PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG
checkov -d .
Jalankan pemindaian rahasia pada semua file di MyDirectory. Lewati CKV_SECRET_6 periksa file json yang sufiksnya adalah DontScan
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:. * DontScan.json$
Jalankan pemindaian rahasia pada semua file di MyDirectory. Lewati pemeriksaan CKV_SECRET_6 pada file json yang berisi "skip_test" di jalurnya
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:. * skip_test. * json$
Seseorang dapat menutupi nilai dari hasil pemindaian dengan menyediakan file konfigurasi (menggunakan flag --config-file) dengan entri mask. Penyembunyian dapat diterapkan pada sumber daya & nilai (atau beberapa nilai, dipisahkan dengan koma). Contoh:
mask:
- aws_instance:user_data
- azurerm_key_vault_secret:admin_password,user_passwords
Pada contoh di atas, nilai-nilai berikut akan di-mask:
Seperti alat analisis statis lainnya, alat ini dibatasi oleh cakupan analisisnya. Misalnya, jika sumber daya dikelola secara manual, atau menggunakan alat manajemen konfigurasi berikutnya, penekanan dapat dimasukkan sebagai anotasi kode sederhana.
Untuk melewati pemeriksaan pada blok definisi Terraform atau sumber daya CloudFormation tertentu, terapkan pola komentar berikut di dalam cakupannya:
checkov:skip=<check_id>:<suppression_comment>
<check_id>
adalah salah satu dari [pemindai cek yang tersedia](docs/5.Policy Index/all.md)<suppression_comment>
adalah alasan penindasan opsional untuk disertakan dalam output Komentar berikut melewatkan pemeriksaan CKV_AWS_20
pada sumber daya yang diidentifikasi oleh foo-bucket
, di mana pemindaian memeriksa apakah bucket AWS S3 bersifat pribadi. Dalam contoh ini, bucket dikonfigurasikan dengan akses baca publik; Menambahkan komentar penekan akan melewatkan pemeriksaan yang sesuai dan bukannya pemeriksaan gagal.
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"
}
Outputnya sekarang akan berisi entri hasil pemeriksaan 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
...
Untuk melewati beberapa pemeriksaan, tambahkan masing-masing pemeriksaan sebagai baris baru.
#checkov:skip=CKV2_AWS_6
#checkov:skip=CKV_AWS_20:The bucket is a public static content host
Untuk menyembunyikan pemeriksaan di manifes Kubernetes, anotasi digunakan dengan format berikut: checkov.io/skip#: <check_id>=<suppression_comment>
Misalnya:
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:
...
Untuk pencatatan log mendetail ke stdout, siapkan variabel lingkungan LOG_LEVEL
ke DEBUG
.
Standarnya adalah LOG_LEVEL=WARNING
.
Untuk melewati file atau direktori, gunakan argumen --skip-path
, yang dapat ditentukan beberapa kali. Argumen ini menerima ekspresi reguler untuk jalur yang berhubungan dengan direktori kerja saat ini. Anda dapat menggunakannya untuk melewati seluruh direktori dan/atau file tertentu.
Secara default, semua direktori bernama node_modules
, .terraform
, dan .serverless
akan dilewati, selain file atau direktori apa pun yang diawali dengan .
. Untuk membatalkan melewatkan direktori yang diawali dengan .
ganti CKV_IGNORE_HIDDEN_DIRECTORIES
export CKV_IGNORE_HIDDEN_DIRECTORIES=false
Anda dapat mengganti kumpulan direktori default untuk dilewati dengan mengatur variabel lingkungan CKV_IGNORED_DIRECTORIES
. Perhatikan bahwa jika Anda ingin mempertahankan daftar ini dan menambahkannya, Anda harus menyertakan nilai-nilai ini. Misalnya, CKV_IGNORED_DIRECTORIES=mynewdir
hanya akan melewati direktori itu, tetapi tidak direktori lain yang disebutkan di atas. Variabel ini adalah fungsi lama; kami merekomendasikan penggunaan tanda --skip-file
.
Output konsol berwarna secara default, untuk beralih ke output monokrom, atur variabel lingkungan: ANSI_COLORS_DISABLED
Jika Anda ingin menggunakan Checkov dalam VS Code, cobalah ekstensi Prisma Cloud.
Checkov dapat dikonfigurasi menggunakan file konfigurasi YAML. Secara default, checkov mencari file .checkov.yaml
atau .checkov.yml
di tempat berikut dalam urutan prioritas:
--directory
)Perhatian : ini adalah praktik terbaik untuk file konfigurasi checkov dimuat dari sumber tepercaya yang disusun oleh identitas terverifikasi, sehingga file yang dipindai, id pemeriksaan, dan pemeriksaan khusus yang dimuat sesuai keinginan.
Pengguna juga dapat meneruskan jalur ke file konfigurasi melalui baris perintah. Dalam hal ini, file konfigurasi lainnya akan diabaikan. Misalnya:
checkov --config-file path/to/config.yaml
Pengguna juga dapat membuat file konfigurasi menggunakan perintah --create-config
, yang mengambil argumen baris perintah saat ini dan menuliskannya ke jalur tertentu. Misalnya:
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
Akan membuat file config.yaml
yang terlihat seperti ini:
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
Pengguna juga dapat menggunakan flag --show-config
untuk melihat semua argumen dan pengaturan serta dari mana asalnya, yaitu baris perintah, file konfigurasi, variabel lingkungan, atau default. Misalnya:
checkov --show-config
Akan menampilkan:
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
Kontribusi disambut baik!
Mulailah dengan meninjau pedoman kontribusi. Setelah itu, lihatlah edisi pertama yang bagus.
Anda bahkan dapat memulai ini dengan dev sekali klik di browser Anda melalui Gitpod di tautan berikut:
Ingin menyumbangkan cek baru? Pelajari cara menulis cek baru (kebijakan AKA) di sini.
checkov
tidak menyimpan, mempublikasikan atau berbagi dengan siapa pun informasi pelanggan yang dapat diidentifikasi.
Tidak ada informasi pelanggan yang dapat diidentifikasi yang digunakan untuk menanyakan panduan Prisma Cloud yang dapat diakses publik. checkov
menggunakan API Prisma Cloud untuk memperkaya hasil dengan tautan ke panduan remediasi. Untuk melewati panggilan API ini gunakan tanda --skip-download
.
Prisma Cloud membangun dan memelihara Checkov untuk membuat kebijakan sebagai kode menjadi sederhana dan mudah diakses.
Mulailah dengan Dokumentasi kami untuk tutorial dan contoh singkat.
Kami mengikuti siklus dukungan resmi Python, dan kami menggunakan pengujian otomatis untuk versi Python yang didukung. Artinya saat ini kami mendukung Python 3.9 - 3.12, inklusif. Perhatikan bahwa Python 3.8 mencapai EOL pada bulan Oktober 2024 dan Python 3.9 akan mencapai EOL pada bulan Oktober 2025. Kami sedang menyelidiki dukungan untuk 3.13. Jika Anda mengalami masalah apa pun dengan versi Python non-EOL, silakan buka Masalah.