
Statisches Analysetool für Infrastructure as Code, das Cloud-Fehlkonfigurationen, Schwachstellen und Geheimnisse in Terraform, Kubernetes, CloudFormation und Container-Images während der Build-Zeit erkennt.
Checkov ist ein statisches Code-Analyse-Tool für Infrastructure as Code (IaC) und auch ein Software Composition Analysis (SCA)-Tool für Images und Open-Source-Pakete.
Es scannt Cloud-Infrastruktur, die mit Terraform, Terraform plan, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates oder OpenTofu bereitgestellt wird, und erkennt Sicherheits- und Compliance-Fehlkonfigurationen mittels graphbasierter Analyse.
Es führt Software Composition Analysis (SCA)-Scans durch, bei denen Open-Source-Pakete und Images auf allgemeine Schwachstellen (CVEs) geprüft werden.
Checkov unterstützt auch Prisma Cloud Application Security, die entwicklerorientierte Plattform, die Cloud-Sicherheit während des gesamten Entwicklungslebenszyklus kodifiziert und optimiert. Prisma Cloud identifiziert, behebt und verhindert Fehlkonfigurationen in Cloud-Ressourcen und Infrastructure-as-Code-Dateien.
Scan-Ergebnisse in CLI

Ergebnis eines geplanten Scans in Jenkins

Um pip zu installieren, folgen Sie der offiziellen Dokumentation```sh pip3 install checkov
Bestimmte Umgebungen (z. B. Debian 12) erfordern möglicherweise die Installation von Checkov in einer virtuellen Umgebung```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
oder mit Homebrew (macOS oder Linux)```sh brew install checkov
### Bash autocomplete aktivieren```sh
source <(register-python-argcomplete checkov)
Wenn Sie checkov mit pip3 installiert haben```sh pip3 install -U checkov
oder mit Homebrew```sh
brew upgrade checkov
checkov --directory /user/path/to/iac/code
Oder eine bestimmte Datei oder Dateien```sh
checkov --file /user/tf/example.tf
Oder```sh checkov -f /user/cloudformation/example1.yml -f /user/cloudformation/example2.yml
Oder eine Terraform-Plan-Datei im JSON-Format```sh
terraform init
terraform plan -out tf.plan
terraform show -json tf.plan > tf.json
checkov -f tf.json
Hinweis: terraform show Ausgabedatei tf.json wird eine einzelne Zeile sein. Aus diesem Grund werden alle Funde von Checkov als Zeilennummer 0 gemeldet.```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
Wenn Sie `jq` installiert haben, können Sie eine JSON-Datei mit dem folgenden Befehl in mehrere Zeilen konvertieren:```sh
terraform show -json tf.plan | jq '.' > tf.json
Scan-Ergebnis wäre viel benutzerfreundlicher.```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",
Alternativ kann das Repository-Root der HCL-Dateien, die zur Erstellung der Plan-Datei verwendet werden, mit dem Flag `--repo-root-for-plan-enrichment` angegeben werden, um die Ausgabe mit den entsprechenden Dateipfaden, Zeilennummern und Codeblöcken der Ressource(n) anzureichern. Ein zusätzlicher Vorteil ist, dass Prüfunterdrückungen entsprechend behandelt werden.```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
Starten Sie mit Checkov, indem Sie die Seite [Erste Schritte](https://github.com/bridgecrewio/checkov/blob/main/docs/1.Welcome/Quick%20Start.md) lesen.
### Docker verwenden```sh
docker pull bridgecrew/checkov
docker run --tty --rm --volume /user/tf:/tf --workdir /tf bridgecrew/checkov --directory /tf
Hinweis: Wenn Sie Python 3.6 (Standardversion in Ubuntu 18.04) verwenden, funktioniert checkov nicht und schlägt mit der Fehlermeldung ModuleNotFoundError: No module named 'dataclasses' fehl. In diesem Fall können Sie stattdessen die Docker-Version verwenden.
Beachten Sie, dass in bestimmten Fällen die Umleitung der Ausgabe von docker run --tty in eine Datei – zum Beispiel, wenn Sie die Checkov JUnit-Ausgabe in einer Datei speichern möchten – dazu führt, dass zusätzliche Steuerzeichen gedruckt werden. Dies kann die Dateiverarbeitung beeinträchtigen. Wenn dies auftritt, entfernen Sie das Flag --tty.
Das Flag --workdir /tf ist optional, um das Arbeitsverzeichnis auf das gemountete Volume zu ändern. Wenn Sie die SARIF-Ausgabe -o sarif verwenden, wird die Datei results.sarif in das gemountete Volume ausgegeben (im obigen Beispiel /user/tf). Wenn Sie dieses Flag nicht angeben, lautet das Arbeitsverzeichnis "/".
Durch die Verwendung von Befehlszeilenflags können Sie festlegen, dass nur benannte Prüfungen ausgeführt werden (Zulassungsliste) oder alle Prüfungen außer den aufgeführten ausgeführt werden (Ablehnungsliste). Wenn Sie die Plattformintegration über einen API-Schlüssel verwenden, können Sie auch einen Schweregradschwellenwert angeben, um zu überspringen und/oder einzuschließen. Da JSON-Dateien keine Kommentare enthalten können, kann man außerdem ein Regex-Muster übergeben, um den Geheimscanner von JSON-Dateien zu überspringen.
Weitere detaillierte Informationen zur Zusammenarbeit dieser Flags finden Sie in der Dokumentation.
Erlaube nur die beiden angegebenen Prüfungen auszuführen:```sh checkov --directory . --check CKV_AWS_20,CKV_AWS_57
Führen Sie alle Überprüfungen durch, außer der angegebenen:```sh
checkov -d . --skip-check CKV_AWS_20
Führen Sie alle Prüfungen aus, außer Prüfungen mit angegebenen Mustern:```sh checkov -d . --skip-check CKV_AWS*
Führe alle Prüfungen mit MEDIUM-Schweregrad oder höher aus (API-Schlüssel erforderlich):```sh
checkov -d . --check MEDIUM --bc-api-key ...
Führe alle Prüfungen mit Schweregrad MEDIUM oder höher sowie die Prüfung CKV_123 aus (gehe davon aus, dass dies eine Prüfung mit Schweregrad LOW ist):```sh checkov -d . --check MEDIUM,CKV_123 --bc-api-key ...
Überspringe alle Prüfungen, die MEDIUM oder niedriger eingestuft sind:```sh
checkov -d . --skip-check MEDIUM --bc-api-key ...
Überspringe alle Prüfungen, die den Schweregrad MEDIUM oder niedriger haben, sowie die Prüfung CKV_789 (nimm an, dass dies eine Prüfung mit hohem Schweregrad ist):```sh checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ...
Führe alle Prüfungen mit MEDIUM severity oder höher aus, überspringe jedoch die Prüfung CKV_123 (gehe davon aus, dass dies eine Prüfung mit MEDIUM oder höherer severity ist):```sh
checkov -d . --check MEDIUM --skip-check CKV_123 --bc-api-key ...
Führe den Check CKV_789 aus, aber überspringe ihn, wenn er einen mittleren Schweregrad hat (die --check-Logik wird immer vor --skip-check angewendet).```sh checkov -d . --skip-check MEDIUM --check CKV_789 --bc-api-key ...
Für Kubernetes Workloads können Sie auch Allow/Deny-Namespaces verwenden. Melden Sie zum Beispiel keine Ergebnisse für den
kube-system-Namespace:```sh
checkov -d . --skip-check kube-system
Führen Sie einen Scan eines Container-Images durch. Ziehen (pull) oder erstellen (build) Sie das Image zunächst und beziehen Sie sich dann auf den Hash, die ID oder den name:tag:```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 ...
Sie können das --image-Flag auch verwenden, um ein Container-Image zu scannen, anstelle von --docker-image zur Abkürzung:```sh
checkov --image <image-name>:tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
Führen Sie einen SCA-Scan der Pakete in einem Repo durch:```sh checkov -d . --framework sca_package --bc-api-key ... --repo-id <repo_id(arbitrary)>
Führen Sie einen Scan eines Verzeichnisses mit Umgebungsvariablen durch, die die Pufferung entfernen und Debug-Level-Protokolle hinzufügen:```sh
PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
ODER aktivieren Sie die Umgebungsvariablen für mehrere Durchläufe```sh export PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
Führen Sie Secrets Scanning für alle Dateien in MyDirectory durch. Überspringen Sie die CKV_SECRET_6-Prüfung für JSON-Dateien, deren Suffix DontScan lautet.```sh
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*DontScan.json$
Führen Sie einen Secret-Scan auf allen Dateien in MyDirectory durch. Überspringen Sie die CKV_SECRET_6-Prüfung für JSON-Dateien, die "skip_test" im Pfad enthalten.```sh checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:.*skip_test.*json$
Man kann Werte aus Scan-Ergebnissen maskieren, indem man eine Konfigurationsdatei (mit dem Flag --config-file) mit einem Maskierungseintrag bereitstellt.
Die Maskierung kann auf Ressource & Wert (oder mehrere Werte, durch Komma getrennt) angewendet werden.
Beispiele:```sh
mask:
- aws_instance:user_data
- azurerm_key_vault_secret:admin_password,user_passwords
Im obigen Beispiel werden die folgenden Werte maskiert:
Wie jedes statische Analysetool ist es durch seinen Analyseumfang eingeschränkt. Wenn beispielsweise eine Ressource manuell oder mit nachfolgenden Konfigurationsmanagement-Tools verwaltet wird, kann die Unterdrückung als einfache Code-Annotation eingefügt werden.
Um eine Prüfung für einen bestimmten Terraform-Definitionsblock oder eine CloudFormation-Ressource zu überspringen, wenden Sie das folgende Kommentarmuster innerhalb seines Gültigkeitsbereichs an:
checkov:skip=<check_id>:<suppression_comment>
<check_id> ist einer der [verfügbaren Check-Scanner](docs/5.Policy Index/all.md)<suppression_comment> ist ein optionaler Unterdrückungsgrund, der in die Ausgabe aufgenommen wirdDer folgende Kommentar überspringt die Prüfung CKV_AWS_20 auf der Ressource, die durch foo-bucket identifiziert wird, wobei der Scan prüft, ob ein AWS S3-Bucket privat ist.
Im Beispiel ist der Bucket mit öffentlichem Lesezugriff konfiguriert; das Hinzufügen des Unterdrückungskommentars würde die entsprechende Prüfung überspringen, anstatt dass die Prüfung fehlschlägt.```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"
}
Die Ausgabe würde nun einen Eintrag mit dem Prüfergebnis ``SKIPPED`` enthalten:```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
...
Um mehrere Prüfungen zu überspringen, fügen Sie jede als neue Zeile hinzu.``` #checkov:skip=CKV2_AWS_6 #checkov:skip=CKV_AWS_20:The bucket is a public static content host
Um Prüfungen in Kubernetes-Manifesten zu unterdrücken, werden Annotationen im folgenden Format verwendet:
`checkov.io/skip#: <check_id>=<suppression_comment>`
Zum Beispiel:```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:
...
Für detaillierte Protokollierung auf stdout setzen Sie die Umgebungsvariable LOG_LEVEL auf DEBUG.
Standard ist LOG_LEVEL=WARNING.
Um Dateien oder Verzeichnisse zu überspringen, verwenden Sie das Argument --skip-path, das mehrfach angegeben werden kann. Dieses Argument akzeptiert reguläre Ausdrücke für Pfade relativ zum aktuellen Arbeitsverzeichnis. Sie können damit ganze Verzeichnisse und/oder bestimmte Dateien überspringen.
Standardmäßig werden alle Verzeichnisse namens node_modules, .terraform und .serverless sowie alle Dateien oder Verzeichnisse, die mit . beginnen, übersprungen.
Um das Überspringen von Verzeichnissen, die mit . beginnen, aufzuheben, überschreiben Sie die Umgebungsvariable CKV_IGNORE_HIDDEN_DIRECTORIES mit export CKV_IGNORE_HIDDEN_DIRECTORIES=false
Sie können den Standard-Satz zu überspringender Verzeichnisse überschreiben, indem Sie die Umgebungsvariable CKV_IGNORED_DIRECTORIES setzen.
Beachten Sie, dass Sie, wenn Sie diese Liste erhalten und erweitern möchten, diese Werte einschließen müssen. Zum Beispiel überspringt CKV_IGNORED_DIRECTORIES=mynewdir nur dieses Verzeichnis, aber nicht die oben genannten. Diese Variable ist eine Legacy-Funktion; wir empfehlen die Verwendung des --skip-file-Flags.
Die Konsolenausgabe ist standardmäßig farbig; um auf eine monochrome Ausgabe umzuschalten, setzen Sie die Umgebungsvariable:
ANSI_COLORS_DISABLED
Wenn Sie Checkov in VS Code verwenden möchten, probieren Sie die Prisma Cloud-Erweiterung aus.
Checkov kann mit einer YAML-Konfigurationsdatei konfiguriert werden. Standardmäßig sucht checkov an folgenden Orten in der angegebenen Reihenfolge nach einer .checkov.yaml- oder .checkov.yml-Datei:
--directory)Achtung: Es ist bewährte Praxis, dass die checkov-Konfigurationsdatei von einer vertrauenswürdigen Quelle geladen wird, die von einer verifizierten Identität stammt, damit gescannte Dateien, Prüf-IDs und geladene benutzerdefinierte Prüfungen wie gewünscht sind.
Benutzer können den Pfad zu einer Konfigurationsdatei auch über die Befehlszeile angeben. In diesem Fall werden die anderen Konfigurationsdateien ignoriert. Beispiel:```sh checkov --config-file path/to/config.yaml
Benutzer können auch eine Konfigurationsdatei mit dem Befehl `--create-config` erstellen, der die aktuellen Befehlszeilenargumente übernimmt und sie an einen angegebenen Pfad schreibt. Zum Beispiel:```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
Erstellt eine config.yaml-Datei, die wie folgt aussieht:```yaml
branch: develop
check:
Benutzer können auch das `--show-config` Flag verwenden, um alle Argumente und Einstellungen sowie deren Herkunft (z.B. Kommandozeile, Konfigurationsdatei, Umgebungsvariable oder Standardwert) anzuzeigen. Zum Beispiel:```sh
checkov --show-config
Wird angezeigt:```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
## Mitwirken
Mitwirkung ist willkommen!
Beginnen Sie mit einem Blick auf die [Beitragsrichtlinien](https://github.com/bridgecrewio/checkov/blob/main/CONTRIBUTING.md). Danach werfen Sie einen Blick auf ein [gutes erstes Issue](https://github.com/bridgecrewio/checkov/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22).
Sie können sogar mit einem Klick in Ihrem Browser über Gitpod unter folgendem Link starten:
[](https://gitpod.io/#https://github.com/bridgecrewio/checkov)
Sie möchten neue Prüfungen beisteuern? Erfahren Sie [hier](https://github.com/bridgecrewio/checkov/blob/main/docs/6.Contribution/Contribution%20Overview.md), wie Sie eine neue Prüfung (auch Policy genannt) schreiben.
## Haftungsausschluss
`checkov` speichert, veröffentlicht oder teilt keine identifizierbaren Kundeninformationen.
Es werden keine identifizierbaren Kundeninformationen verwendet, um Prisma Clouds öffentlich zugängliche Leitfäden abzufragen.
`checkov` verwendet die Prisma Cloud-API, um die Ergebnisse mit Links zu Sanierungsleitfäden anzureichern.
Um diesen API-Aufruf zu überspringen, verwenden Sie das Flag `--skip-download`.
## Support
[Prisma Cloud](https://www.prismacloud.io/?utm_source=github&utm_medium=organic_oss&utm_campaign=checkov) entwickelt und pflegt Checkov, um Policy-as-Code einfach und zugänglich zu machen.
Beginnen Sie mit unserer [Dokumentation](https://www.checkov.io/1.Welcome/Quick%20Start.html) für schnelle Tutorials und Beispiele.
## Unterstützte Python-Versionen
Wir folgen dem offiziellen Support-Zyklus von Python und verwenden automatisierte Tests für unterstützte Python-Versionen.
Das bedeutet, dass wir aktuell Python 3.9 - 3.13 einschließlich unterstützen.
Beachten Sie, dass Python 3.8 im Oktober 2024 das Ende seiner Lebensdauer (EOL) erreicht hat und Python 3.9 im Oktober 2025 EOL erreichen wird.
Wenn Sie auf Probleme mit einer Nicht-EOL-Python-Version stoßen, eröffnen Sie bitte ein Issue.