Skip to main content

Infrastructure as code static analysis

Project description

Checkov

Maintained by Bridgecrew.io build status code_coverage docs PyPI Downloads Terraform Version

Table of contents

Description

Checkov is a static code analysis tool for infrastructure-as-code. It scans cloud infrastructure provisioned using Terraform or Cloudformation and detects security and compliance misconfigurations.

Checkov is written in Python and provides a simple method to write and manage policies. It follows the CIS Foundations benchmarks where applicable.

Features

  • 100+ built-in policies cover security and compliance best practices for AWS, Azure & Google Cloud.
  • Scans Terraform and AWS CloudFormation configurations.
  • Scans for AWS credentials in EC2 Userdata, Lambda environment variables and Terrafrom providers
  • Policies support evaluation of variables to their optional default value.
  • Supports in-line suppression of accepted risks or false-positives to reduce recurring scan failures.
  • Output currently available as CLI, JSON or JUnit XML.

Screenshots

Scan results in CLI

scan-screenshot

Scheduled scan result in Jenkins

jenikins-screenshot

Getting started

Installation

pip install checkov

or using homebrew (MacOS only)

brew tap bridgecrewio/checkov https://github.com/bridgecrewio/checkov
brew update
brew install checkov

Configure an input folder

checkov -d /user/path/to/iac/code

Or a specific file

checkov -f /user/tf/example.tf

or

checkov -f /user/cloudformation/example.yml

Scan result sample (CLI)

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       

Start using Checkov by reading the Getting Started page.

Using Docker

docker pull bridgecrew/checkov
docker run -t -v /user/tf:/tf bridgecrew/checkov -d /tf

Suppressing/Ignoring a check

Like any static-analysis tool it is limited by its analysis scope. For example, if a resource is managed manually, or using subsequent configuration management tooling, a suppression can be inserted as a simple code annotation.

Suppression comment format

To skip a check on a given Terraform definition block, apply the following comment pattern inside it's scope:

checkov:skip=<check_id>:<suppression_comment>

  • <check_id> is one of the available check scanners
  • <suppression_comment> is an optional suppression reason to be included in the output

Example

The following comment skip the CKV_AWS_20 check on the resource identified by foo-bucket, where the scan checks if an AWS S3 bucket is private. In the example, the bucket is configured with a public read access; Adding the suppress comment would skip the appropriate check instead of the check to fail.

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"
}

The output would now contain a SKIPPED check result entry:

...
...
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

...

Alternatives

For Terraform compliance scanners check out tfsec, Terrascan and Terraform AWS Secure Baseline.

For CloudFormation scanning check out cfripper and cfn_nag.

Contributing

Contribution is welcomed!

Start by reviewing the contribution guidelines. After that, take a look at a good first issue.

Looking to contribute new checks? Learn how to write a new check (AKA policy) here

Support

Bridgecrew builds and maintains Checkov to make policy-as-code simple and accessible.

Start with our Documentation for quick tutorials and examples.

If you need direct support you can contact us at info@bridgecrew.io

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

checkov-1.0.269.tar.gz (49.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

checkov-1.0.269-py3-none-any.whl (123.9 kB view details)

Uploaded Python 3

File details

Details for the file checkov-1.0.269.tar.gz.

File metadata

  • Download URL: checkov-1.0.269.tar.gz
  • Upload date:
  • Size: 49.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.7

File hashes

Hashes for checkov-1.0.269.tar.gz
Algorithm Hash digest
SHA256 8bf5b99f1716ca50cfa51744050acc11ac7139109837a4b81f61ff7e8a8672f9
MD5 cb0d812978cd777849a7d344bffc8c1a
BLAKE2b-256 95a903a7ef334145ef27f3f827638cc7a4d6ab83263c7da9000fcfe85280152e

See more details on using hashes here.

File details

Details for the file checkov-1.0.269-py3-none-any.whl.

File metadata

  • Download URL: checkov-1.0.269-py3-none-any.whl
  • Upload date:
  • Size: 123.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/46.1.3 requests-toolbelt/0.9.1 tqdm/4.46.0 CPython/3.7.7

File hashes

Hashes for checkov-1.0.269-py3-none-any.whl
Algorithm Hash digest
SHA256 83a13adfe17bbb53ddcfb60f3d3c9ef8d1f046dbf4ed2caada0780f53876e0d3
MD5 8d594bc83e92092b040f7fee2c6af7e2
BLAKE2b-256 659b06d8115ecde94bc3027de60cdfbaa9adaef2b2057afeef2cd9c797d94ad7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page