Infrastructure Azure Terraform, analyse statique avec Checkov et GitHub
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é :
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 :
Subscribe to my newsletter
Read articles from Antoine LOIZEAU directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Antoine LOIZEAU
Antoine LOIZEAU
Ayant eu de multiples expériences dans le monde du conseil, j'ai pu acquérir une expertise dans la conception et la construction de services de collaboration d'entreprise. Je suis passionné par les technologies Microsoft et surtout Azure. Aujourd'hui je possède une solide expérience en méthodologie de développement et j'ai mené des équipes de développement technique au succès. Je possède également une solide connaissance de l'infrastructure qui fait de moi une ressource efficace pour mettre en œuvre la transformation numérique vers le cloud Microsoft. Je suis un professionnel efficace et honnête qui aime relever les challenges. Aimant partager mes connaissances; je suis à l'aise en tant que Technical Leader et en tant que membre d'une équipe. Mes compétences techniques sont les suivantes: Azure, DevOps, Architecture Applicative, Développement de solution Cloud Native, écosystème Microsoft... et bien d'autres. Pour voir mes certifications Microsoft : https://www.youracclaim.com/users/antoine-loizeau