Hoje vamos conversar sobre ferramentas de verificação de segurança seguindo o conceito de DevSecOps que é “uma prática de desenvolvimento de aplicações que automatiza a integração de práticas de segurança e proteção em todas as fases do ciclo de vida do desenvolvimento de software, desde o design inicial até a integração, testes, entrega e implementação” conforme IBM.
Será uma série de 5 artigos onde irei falar sobre Checkov, Gitleaks, Snyk, TruffleHog e Trivy. Neste artigo falarei sobre Checkov.
Checkov é uma ferramenta de segurança de Infraestrutura como Código (IaC) que verifica se o código de infraestrutura está em conformidade com as melhores práticas de segurança para encontrar configurações incorretas antes que elas sejam implantadas.
O Checkov usa uma interface de linha de comando comum para gerenciar e analisar os resultados da verificação de Infraestrutura como Código (IaC) em plataformas como Terraform, CloudFormation, Kubernetes, Helm, ARM Templates e estrutura Serverless.
Abaixo está um exemplo de uso que está disponível no repositório https://github.com/toolbox-playground/pipelines-seguranca-exemplo-basico da Toolbox Playground.
O ambiente em que este lab foi desenvolvido:
- SO Ubuntu 24.04 LTS
- Terraform v1.9.4 linux_amd64
- Python 3.12.3
O Terraform é uma ferramenta de infraestrutura como código que permite definir e provisionar recursos de infraestrutura de forma declarativa, para saber mais acesse https://www.terraform.io/.
Python é uma linguagem de programação que permite que você trabalhe rapidamente e integre sistemas de forma mais eficaz, para saber mais acesse https://www.python.org/.
As políticas que o Checkov verifica no Terraform encontram-se no seguinte link: https://www.checkov.io/5.Policy%20Index/terraform.html.

A imagem acima mostra o conteúdo do repositório a ser clonado.
Neste exemplo o Checkov irá analisar o arquivo main.tf que possui o seguinte conteudo:

O código acima é um exemplo de configuração de um recurso de bucket de armazenamento no Google Cloud Platform usando o Terraform.
Neste código acima, será criado um recurso de bucket de armazenamento chamado “my_bucket” usando o provedor do Google Cloud. O nome do bucket é definido como “my-bucket” e a localização é definida como “us-central1”. O projeto associado a esse bucket é definido como “toolbox-playground”.
Dentro do bloco de configuração do bucket, temos duas seções adicionais: “logging” e “versioning”. A seção “logging” define o bucket de logs como “my-logs-bucket”, o que significa que todos os logs gerados por esse bucket serão armazenados em um bucket separado chamado “my-logs-bucket”. A seção “versioning” habilita a funcionalidade de versionamento para o bucket, permitindo que versões anteriores dos objetos armazenados sejam mantidas.
Além disso, temos duas configurações adicionais fora do bloco de configuração do bucket. A configuração “uniform_bucket_level_access” define que o acesso ao bucket deve ser uniforme, o que significa que todas as solicitações de acesso ao bucket devem seguir as mesmas regras de controle de acesso. A configuração “public_access_prevention” define que a prevenção de acesso público está “enforced”, o que significa que o acesso público ao bucket é proibido.
Você pode usar o Checkov localmente ou utilizar o workflow do GitHub Actions.
Uso do Checkov localmente
- Clone o repositório https://github.com/toolbox-playground/pipelines-seguranca-exemplo-basico e acesse a pasta pipelines-seguranca-exemplo-basico/checkov.
git clone https://github.com/toolbox-playground/pipelines-seguranca-exemplo-basico
cd pipelines-seguranca-exemplo-basico/checkov2. Certifique-se de ter o Python instalado em sua máquina. Você pode verificar a versão do Python digitando o seguinte comando no terminal:
python —versionSe o Python não estiver instalado, faça o download e a instalação a partir do site oficial do Python: https://www.python.org/
3. Crie um ambiente virtual (venv) para isolar as dependências do projeto. No terminal, execute o seguinte comando:
python -m venv myenvIsso criará um novo diretório chamado myenv que conterá o ambiente virtual.
4. Ative o ambiente virtual. No terminal, execute o seguinte comando:
– No Windows:
myenv\Scripts\activate– No macOS/Linux:
source myenv/bin/activate5. Instale as dependências do projeto a partir do arquivo requirements.txt executando o seguinte comando:
pip install -r requirements.txtIsso instalará todas as dependências listadas no arquivo requirements.txt, incluindo o Checkov.
6. Navegue até o diretório onde se encontram os arquivos do Terraform:
cd tf7. Execute o Checkov usando o seguinte comando:
checkov -d .8. Analise os resultados fornecidos pelo Checkov e faça as correções necessárias em seus arquivos de configuração.
Com esses passos, você poderá usar o Checkov com venv e instalar as dependências a partir do arquivo requirements.txt para verificar a segurança de seus arquivos de configuração.
Uso do Checkov no Actions do GitHub
Para utilizar o Checkov no GitHub Actions, siga os passos abaixo:
1. Faça um Fork do repositório https://github.com/toolbox-playground/pipelines-seguranca-exemplo-basico.
2. O arquivo .github/workflows/checkov.yml, descrito abaixo, irá executar o checkov.
name: Terraform Security Check with Checkov
on:
push:
branches:
- main
paths:
- 'checkov/tf/**' # Aciona o fluxo de trabalho quando houver alterações no diretório 'checkov/tf'
pull_request:
branches:
- main
paths:
- 'checkov/tf/**' # Aciona o fluxo de trabalho quando houver alterações no diretório 'checkov/tf'
workflow_dispatch: # Aciona manualmente o fluxo de trabalho
inputs: # Define as entradas para o fluxo de trabalho
name: # Define a entrada "name"
description: 'Acionador manual do Fluxo de Trabalho' # Descrição da entrada
jobs:
checkov-scan:
runs-on: ubuntu-latest # Executa o trabalho na versão mais recente do Ubuntu
steps:
- name: Checkout do Repositório # Passo para fazer checkout do repositório
uses: actions/checkout@v2 # Usa a ação 'actions/checkout' para fazer checkout do repositório
- name: Set up Python 3.12
uses: actions/setup-python@v4
with:
python-version: 3.12 # Define a versão do Python como 3.12
- name: Test with Checkov
id: checkov
uses: bridgecrewio/checkov-action@master # Usa a ação 'bridgecrewio/checkov-action' para testar com Checkov
with:
directory: checkov/tf # Define o diretório de verificação como 'checkov/tf'
framework: terraform # Define o framework como TerraformEste arquivo de fluxo de trabalho configura o Checkov para ser executado sempre que houver um push ou pull request na branch “main” do seu repositório alterando os arquivos presentes na pasta checkov/tf.
3 Acesse a aba Actions do repositório que você acabou de fazer o fork, no seu GitHub.

4. Clique em Terraform Security Check with Checkov e depois em Run workflow.

5. O GitHub Actions executará o fluxo de trabalho e o Checkov analisará os arquivos de configuração do Terraform, fornecendo relatórios sobre possíveis problemas de segurança.
Compreendendo os relatórios Checkov
Após executar a verificação, o Checkov emitirá um relatório detalhando suas descobertas. O relatório inclui:
– Verificações com falha: lista de verificações que falharam junto com seus IDs, que fazem referência a regras específicas de segurança ou conformidade.
– Verificações aprovadas: lista de verificações que foram aprovadas.
– Recurso e arquivo: para cada problema, o Checkov indica o recurso e o arquivo onde o problema foi encontrado.
– Correções sugeridas: se disponíveis, o Checkov fornece orientação sobre como resolver problemas.
Com esses passos, você poderá utilizar o Checkov no GitHub Actions para verificar a segurança dos seus arquivos de configuração do Terraform.
No próximo artigo irei falar sobre Gitleaks.
Todos os códigos de todos os artigos estão no repositório https://github.com/toolbox-playground/pipelines-seguranca-exemplo-basico.