Infrastructure Azure Terraform, analyse statique avec Checkov et GitHub

A chaque scan de votre code vous pourrez ainsi trouver une liste d'actions vous permettant de garantir la qualité de votre infrastructure Azure.

Analyse statique avec Checkov

Déjà présenté dans mon précédent article; Checkov est un outil permettant l'analyse statique de votre Infrastructure As Code (IaC). Celui-ci va vous aider dans l'écriture de vos scripts terraform pour maximiser les bonnes pratiques.

A chaque scan de votre code vous pourrez ainsi trouver une liste d'actions vous permettant de garantir un minimum de qualité.

Voici un résultat d'un scan optenu grâce à Checkov:

L'avantage de cet outil est la partie "guideline" qui vous permet d'avoir une documentation associée à l'anomalie identifié.

Par exemple; sur le problème d'une base Azure Cosmos DB en accès publique nous avons ce lien : Ensure Azure Cosmos DB disables public network access (bridgecrew.io) qui nous permet d'avoir une description du problème ainsi que la correction à apporter pour corriger l'anomalie :

Cet outil est une grande aide au quotidien, il peut être intégrer à votre environnement de développement mais aussi dans votre outil de CI/CD. Je vais donc détailler comment l'intégrer dans vos projet en utilisant GitHub.

Automatiser l'analyse Checkov avec GitHub action

GitHub Actions

Microsoft ayant acquis GitHub en 2018 (Microsoft to acquire GitHub for $7.5 billion - Stories) il est incoutournable lorsque nous souhaitons déployer des solutions sur Azure.

Actions est la solution de CI/CD proposée par GitHub et est fortement utilisé dans l'univers du cloud et sur les projets open source. Avec un marketplace riche, il permet d'accélérer fortement l'automatisation de vos activités quotidiennes.

N'hésitez pas à jeter un coup d'oeil pour ne pas réinventer la roue et bénéficier de l'avantage de la communauté :

GitHub Marketplace · Actions to improve your workflow

Workflow GitHub

Voici le Workflow GitHub que j'utilise pour valider ma solution à chaque "push" dans le repository git associé. Pensez à modifier la propriété "paths" et "directory" si vos scripts terraform IaC ne sont pas dans un répertoire nommé "terraform":

name: "👮‍♂️Checkov🔎"
on:
  push:
    paths:
      - terraform/** # Change directory if needed
jobs:
  checkov-job:
    runs-on: ubuntu-latest
    name: checkov-action
    steps:
      - name: Checkout repo
        uses: actions/checkout@master
      - name: Set up Python 3.11
        uses: actions/setup-python@v4
        with:
          python-version: 3.11
      - name: Checkov - Tests Terraform
        id: checkov
        uses: bridgecrewio/checkov-action@master
        with:
          directory: ./terraform/ # Change directory if needed
          check: CKV_AZURE_*
          #skip_check: CKV_AWS_2 # optional: skip a specific check_id. can be comma separated list
          quiet: false # optional: display only failed checks
          soft_fail: true # optional: do not return an error code if there are failed checks
          framework: terraform # optional: run only on a specific infrastructure {cloudformation,terraform,kubernetes,all}
          output_format: github_failed_only # optional: the output format, one of: cli, json, junitxml, github_failed_only, or sarif. Default: sarif
          output_file_path: checkov-results.md # folder and name of results file
          download_external_modules: true # optional: download external terraform modules from public git repositories and terraform registry
          #var_file: ./testdir/gocd.yaml # optional: variable files to load in addition to the default files. Currently only supported for source Terraform and Helm chart scans.
          #log_level: DEBUG # optional: set log level. Default WARNING
      - name: Checkov - Publish Tests Results
        uses: actions/upload-artifact@v3
        with:
          name: checkov
          path: checkov-results.md

La dernière action permet de publier les résultats dans les artifacts sous la forme d'un markdown. Vous pourrez les retrouver sur l'archive dans la partie base de l'exécution du workflow :

Le fichier présent dans cette archive contient l'ensemble des actions à mener sur votre solution :

Il ne reste plus qu'à améliorer votre infrastructure depuis votre éditeur préféré en suivant les guidelines Checkov :

Did you find this article valuable?

Support Antoine LOIZEAU's Blog by becoming a sponsor. Any amount is appreciated!