Checkov é uma ferramenta de análise de código estático para infraestrutura como código (IaC) e também uma ferramenta de análise de composição de software (SCA) para imagens e pacotes de código aberto.
Ele verifica a infraestrutura em nuvem provisionada usando Terraform, plano Terraform, Cloudformation, AWS SAM, Kubernetes, Helm charts, Kustomize, Dockerfile, Serverless, Bicep, OpenAPI, ARM Templates ou OpenTofu e detecta configurações incorretas de segurança e conformidade usando verificação baseada em gráfico.
Ele executa a varredura de Análise de Composição de Software (SCA), que é uma varredura de pacotes e imagens de código aberto em busca de Vulnerabilidades e Exposições Comuns (CVEs).
Checkov também potencializa o Prisma Cloud Application Security , a primeira plataforma para desenvolvedores que codifica e agiliza a segurança na nuvem durante todo o ciclo de vida de desenvolvimento. Prisma Cloud identifica, corrige e evita configurações incorretas em recursos de nuvem e arquivos de infraestrutura como código.
Resultados da verificação na CLI
Resultado da verificação agendada no Jenkins
Para instalar o pip siga a documentação oficial
pip3 install checkov
ou com Homebrew (macOS ou Linux)
brew install checkov
source <( register-python-argcomplete checkov )
se você instalou o checkov com pip3
pip3 install -U checkov
ou com Homebrew
brew upgrade checkov
checkov --directory /user/path/to/iac/code
Ou um arquivo ou arquivos específicos
checkov --file /user/tf/example.tf
Ou
checkov -f /user/cloudformation/example1.yml -f /user/cloudformation/example2.yml
Ou um arquivo de plano terraform em formato json
terraform init
terraform plan -out tf.plan
terraform show -json tf.plan > tf.json
checkov -f tf.json
Nota: o arquivo de saída terraform show
tf.json
será uma única linha. Por essa razão, todas as descobertas serão relatadas na linha número 0 por 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
Se você instalou jq
poderá converter o arquivo json em várias linhas com o seguinte comando:
terraform show -json tf.plan | jq ' . ' > tf.json
O resultado da verificação seria muito fácil de usar.
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 " ,
Como alternativa, especifique a raiz do repositório dos arquivos hcl usados para gerar o arquivo de plano, usando o sinalizador --repo-root-for-plan-enrichment
, para enriquecer a saída com o caminho de arquivo apropriado, números de linha e bloco de código do recurso (s). Um benefício adicional é que as supressões de verificação serão tratadas adequadamente.
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
Comece a usar o Checkov lendo a página de primeiros passos.
docker pull bridgecrew/checkov
docker run --tty --rm --volume /user/tf:/tf --workdir /tf bridgecrew/checkov --directory /tf
Nota: se você estiver usando Python 3.6 (versão padrão no Ubuntu 18.04), checkov não funcionará e falhará com a mensagem de erro ModuleNotFoundError: No module named 'dataclasses'
. Nesse caso, você pode usar a versão docker.
Observe que há certos casos em que o redirecionamento da saída docker run --tty
para um arquivo - por exemplo, se você deseja salvar a saída Checkov JUnit em um arquivo - fará com que caracteres de controle extras sejam impressos. Isso pode interromper a análise do arquivo. Se você encontrar isso, remova o sinalizador --tty
.
O sinalizador --workdir /tf
é opcional para alterar o diretório de trabalho para o volume montado. Se você estiver usando a saída SARIF -o sarif
isso gerará o arquivo results.sarif para o volume montado ( /user/tf
no exemplo acima). Se você não incluir esse sinalizador, o diretório de trabalho será "/".
Usando sinalizadores de linha de comando, você pode especificar a execução apenas de verificações nomeadas (lista de permissões) ou de todas as verificações, exceto as listadas (lista de negações). Se você estiver usando a integração da plataforma via chave API, também poderá especificar um limite de gravidade para ignorar e/ou incluir. Além disso, como os arquivos json não podem conter comentários, pode-se passar o padrão regex para pular a verificação secreta do arquivo json.
Consulte a documentação para obter informações mais detalhadas sobre como esses sinalizadores funcionam juntos.
Permita que apenas as duas verificações especificadas sejam executadas:
checkov --directory . --check CKV_AWS_20,CKV_AWS_57
Execute todas as verificações, exceto a especificada:
checkov -d . --skip-check CKV_AWS_20
Execute todas as verificações, exceto as verificações com padrões especificados:
checkov -d . --skip-check CKV_AWS *
Execute todas as verificações de gravidade MÉDIA ou superior (requer chave de API):
checkov -d . --check MEDIUM --bc-api-key ...
Execute todas as verificações de gravidade MÉDIA ou superior, bem como verifique CKV_123 (suponha que esta seja uma verificação de gravidade BAIXA):
checkov -d . --check MEDIUM,CKV_123 --bc-api-key ...
Ignore todas as verificações de gravidade MÉDIA ou inferior:
checkov -d . --skip-check MEDIUM --bc-api-key ...
Ignore todas as verificações de gravidade MÉDIA ou inferior, bem como verifique CKV_789 (suponha que esta seja uma verificação de gravidade alta):
checkov -d . --skip-check MEDIUM,CKV_789 --bc-api-key ...
Execute todas as verificações de gravidade MÉDIA ou superior, mas ignore a verificação CKV_123 (suponha que esta seja uma verificação de gravidade média ou superior):
checkov -d . --check MEDIUM --skip-check CKV_123 --bc-api-key ...
Execute a verificação CKV_789, mas ignore-a se for de gravidade média (a lógica --check é sempre aplicada antes de --skip-check)
checkov -d . --skip-check MEDIUM --check CKV_789 --bc-api-key ...
Para cargas de trabalho do Kubernetes, você também pode usar namespaces de permissão/negação. Por exemplo, não relate nenhum resultado para o namespace kube-system:
checkov -d . --skip-check kube-system
Execute uma verificação de uma imagem de contêiner. Primeiro extraia ou construa a imagem e depois consulte-a pelo hash, ID ou nome: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 ...
Você também pode usar o sinalizador --image para verificar a imagem do contêiner em vez de --docker-image para encurtador:
checkov --image < image-name > :tag --dockerfile-path /User/path/to/Dockerfile --repo-id ... --bc-api-key ...
Execute uma verificação SCA de pacotes em um repositório:
checkov -d . --framework sca_package --bc-api-key ... --repo-id < repo_id(arbitrary) >
Execute uma varredura de um diretório com variáveis de ambiente removendo o buffer, adicionando logs de nível de depuração:
PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG checkov -d .
OU habilite as variáveis de ambiente para múltiplas execuções
export PYTHONUNBUFFERED=1 LOG_LEVEL=DEBUG
checkov -d .
Execute a verificação de segredos em todos os arquivos no MyDirectory. Ignore CKV_SECRET_6, verifique nos arquivos json se seu sufixo é DontScan
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:. * DontScan.json$
Execute a verificação de segredos em todos os arquivos no MyDirectory. Ignore a verificação CKV_SECRET_6 em arquivos json que contenham "skip_test" no caminho
checkov -d /MyDirectory --framework secrets --repo-id ... --bc-api-key ... --skip-check CKV_SECRET_6:. * skip_test. * json$
É possível mascarar valores dos resultados da verificação fornecendo um arquivo de configuração (usando o sinalizador --config-file) com entrada de máscara. O mascaramento pode ser aplicado ao recurso e ao valor (ou a vários valores, separados por vírgula). Exemplos:
mask:
- aws_instance:user_data
- azurerm_key_vault_secret:admin_password,user_passwords
No exemplo acima, os seguintes valores serão mascarados:
Como qualquer ferramenta de análise estática, ela é limitada pelo seu escopo de análise. Por exemplo, se um recurso for gerenciado manualmente ou usando ferramentas de gerenciamento de configuração subsequentes, a supressão poderá ser inserida como uma simples anotação de código.
Para ignorar uma verificação em um determinado bloco de definição do Terraform ou recurso CloudFormation, aplique o seguinte padrão de comentário dentro de seu escopo:
checkov:skip=<check_id>:<suppression_comment>
<check_id>
é um dos [scanners de cheques disponíveis](docs/5.Policy Index/all.md)<suppression_comment>
é um motivo de supressão opcional a ser incluído na saída O comentário a seguir ignora a verificação CKV_AWS_20
no recurso identificado por foo-bucket
, onde a verificação verifica se um bucket AWS S3 é privado. No exemplo, o bucket está configurado com acesso público de leitura; Adicionar o comentário de supressão ignoraria a verificação apropriada em vez de a verificação falhar.
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"
}
A saída agora conteria uma entrada de resultado de verificação 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
...
Para pular várias verificações, adicione cada uma como uma nova linha.
#checkov:skip=CKV2_AWS_6
#checkov:skip=CKV_AWS_20:The bucket is a public static content host
Para suprimir verificações em manifestos do Kubernetes, são usadas anotações com o seguinte formato: checkov.io/skip#: <check_id>=<suppression_comment>
Por exemplo:
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:
...
Para registro detalhado no stdout, configure a variável de ambiente LOG_LEVEL
como DEBUG
.
O padrão é LOG_LEVEL=WARNING
.
Para pular arquivos ou diretórios, use o argumento --skip-path
, que pode ser especificado várias vezes. Este argumento aceita expressões regulares para caminhos relativos ao diretório de trabalho atual. Você pode usá-lo para pular diretórios inteiros e/ou arquivos específicos.
Por padrão, todos os diretórios denominados node_modules
, .terraform
e .serverless
serão ignorados, além de quaisquer arquivos ou diretórios que comecem com .
. Para cancelar o salto de diretórios começando com .
substituir export CKV_IGNORE_HIDDEN_DIRECTORIES=false
da variável de ambiente CKV_IGNORE_HIDDEN_DIRECTORIES
CKV_IGNORE_HIDDEN_DIRECTORIES=false
Você pode substituir o conjunto padrão de diretórios a serem ignorados definindo a variável de ambiente CKV_IGNORED_DIRECTORIES
. Observe que se quiser preservar esta lista e adicionar itens a ela, você deverá incluir esses valores. Por exemplo, CKV_IGNORED_DIRECTORIES=mynewdir
irá ignorar apenas esse diretório, mas não os outros mencionados acima. Esta variável é uma funcionalidade legada; recomendamos usar o sinalizador --skip-file
.
A saída do console é colorida por padrão, para mudar para uma saída monocromática, defina a variável de ambiente: ANSI_COLORS_DISABLED
Se você quiser usar Checkov no VS Code, experimente a extensão Prisma Cloud.
Checkov pode ser configurado usando um arquivo de configuração YAML. Por padrão, checkov procura um arquivo .checkov.yaml
ou .checkov.yml
nos seguintes locais em ordem de precedência:
--directory
)Atenção : é uma prática recomendada que o arquivo de configuração checkov seja carregado de uma fonte confiável composta por uma identidade verificada, para que os arquivos verificados, ids de verificação e verificações personalizadas carregadas sejam conforme desejado.
Os usuários também podem passar o caminho para um arquivo de configuração por meio da linha de comando. Neste caso, os outros arquivos de configuração serão ignorados. Por exemplo:
checkov --config-file path/to/config.yaml
Os usuários também podem criar um arquivo de configuração usando o comando --create-config
, que pega os argumentos da linha de comando atual e os grava em um determinado caminho. Por exemplo:
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
Criará um arquivo config.yaml
parecido com este:
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
Os usuários também podem usar o sinalizador --show-config
para visualizar todos os argumentos e configurações e de onde eles vieram, ou seja, linha de comando, arquivo de configuração, variável de ambiente ou padrão. Por exemplo:
checkov --show-config
Irá exibir:
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
A contribuição é bem-vinda!
Comece revisando as diretrizes de contribuição. Depois disso, dê uma olhada em uma boa primeira edição.
Você pode até começar isso com um clique dev em seu navegador através do Gitpod no seguinte link:
Quer contribuir com novos cheques? Aprenda como preencher um novo cheque (política AKA) aqui.
checkov
não salva, publica ou compartilha com ninguém nenhuma informação identificável do cliente.
Nenhuma informação identificável do cliente é usada para consultar os guias acessíveis ao público da Prisma Cloud. checkov
usa a API do Prisma Cloud para enriquecer os resultados com links para guias de correção. Para pular esta chamada de API, use o sinalizador --skip-download
.
Prisma Cloud cria e mantém Checkov para tornar a política como código simples e acessível.
Comece com nossa documentação para tutoriais e exemplos rápidos.
Seguimos o ciclo de suporte oficial do Python e usamos testes automatizados para versões suportadas do Python. Isso significa que atualmente oferecemos suporte a Python 3.9 - 3.12, inclusive. Observe que o Python 3.8 atingiu o EOL em outubro de 2024 e o Python 3.9 atingirá o EOL em outubro de 2025. Estamos investigando o suporte para o 3.13. Se você tiver algum problema com qualquer versão Python não EOL, abra um problema.