Sécurisez votre IaC avec Snyk
Mise à jour :
Quand on parle de DevSecOps, on pense souvent à l’automatisation de la sécurité dès les premières étapes du développement. À mon avis, c’est là que les outils comme Snyk IaC prennent tout leur sens. Plutôt que d’attendre la mise en production pour découvrir des erreurs de configuration, pourquoi ne pas les détecter dès l’écriture de vos fichiers Terraform ou Kubernetes?
C’est là que Snyk IaC entre en jeu. Cet outil d’analyse de sécurité pour l’Infrastructure as Code (IaC) vous aide à identifier les vulnérabilités et les erreurs de configuration dans vos fichiers d’infrastructure.
L’histoire de Snyk IaC : de Fugue à Regula
Snyk IaC n’est pas né de rien. En 2022, Snyk a racheté Fugue, une entreprise spécialisée dans la sécurité cloud et la détection d’erreurs de configuration IaC. Fugue apportait avec elle Regula, un moteur open source basé sur OPA/Rego, utilisé pour écrire des règles de sécurité sous forme de code.
Ce rachat a permis à Snyk d’intégrer des capacités avancées d’audit et de conformité dans son outil IaC, tout en renforçant son approche DevSecOps. Aujourd’hui, Regula reste disponible en open source, et alimente en partie la puissance de Snyk IaC pour l’analyse des fichiers Terraform, YAML, et autres.
Rappel sur l’offre de Snyk
Snyk propose une suite d’outils pour sécuriser l’ensemble du cycle de développement :
- Snyk Open Source : analyse les dépendances tierces.
- Snyk Code : détecte les vulnérabilités dans le code source.
- Snyk Container : scanne les images Docker.
- Snyk IaC : identifie les erreurs de configuration dans l’Infrastructure as Code.
Il existe une offre gratuite ↗ avec un quota mensuel, idéale pour les petits projets ou les tests. Les versions payantes débloquent des fonctionnalités avancées.
Langages et formats supportés par Snyk IaC
Snyk IaC prend en charge les principaux formats de fichiers utilisés en Infrastructure as Code, ce qui le rend particulièrement utile dans des environnements cloud complexes et multi-outils. Voici les types de fichiers que vous pouvez analyser avec Snyk :
- Terraform : C’est le langage le plus répandu pour la gestion
d’infrastructure déclarative. Snyk analyse les fichiers
.tf
et.tf.json
, et identifie les mauvaises pratiques comme l’utilisation de ports ouverts, de ressources non chiffrées ou de rôles trop permissifs. - AWS CloudFormation : Les fichiers CloudFormation au format YAML ou JSON sont également pris en charge. Snyk détecte par exemple les services AWS exposés publiquement, les politiques IAM trop larges ou l’absence de chiffrement.
- Kubernetes, y compris Helm : Les manifests Kubernetes YAML sont scannés, tout comme les fichiers générés par des charts Helm. Il repère les problèmes comme les conteneurs tournant en root, les volumes non sécurisés, ou les ports ouverts sans contrôle d’accès.
- Azure Resource Manager (ARM) : Les templates ARM au format JSON sont aussi analysables. Cela permet de sécuriser les déploiements sur Azure en s’assurant que les bonnes pratiques sont respectées : chiffrement, limitation des accès, sécurité réseau, etc.
Installation et configuration de Snyk CLI
Pour utiliser Snyk IaC, tout commence par l’installation de l’outil en ligne de commande : le Snyk CLI. C’est lui qui va vous permettre de lancer des analyses de sécurité sur vos fichiers Terraform, Kubernetes YAML ou encore CloudFormation, directement depuis votre terminal.
Installation de Snyk CLI
Snyk peut être installé de plusieurs façons.
Avec asdf-vm
Si vous utilisez asdf-vm pour gérer vos versions de langages et outils, il suffit d’ajouter le plugin Snyk :
asdf plugin add snykasdf install snyk latestasdf set --home snyk latest
Avec Homebrew
Vous pouvez aussi utiliser Homebrew sur macOS :
brew install snyk/tap/snyk
Ou encore télécharger les binaries depuis la page officielle ↗ de GitHub si vous préférez éviter les gestionnaires de paquets.
Configuration de Snyk CLI
Une fois installé, il faut configurer le Snyk CLI pour qu’il puisse interagir avec votre compte Snyk. Si vous n’avez pas encore de compte, vous pouvez en créer un gratuitement sur le site de Snyk.
Authentification
Une fois installé, il faut connecter le CLI à votre compte Snyk. Lancez :
snyk auth
Cela ouvrira une page dans votre navigateur où vous devrez vous connecter. Le lien entre votre terminal et votre compte est alors établi.
Test rapide
Pour vérifier que tout fonctionne, placez-vous dans un dossier contenant un fichier Terraform ou YAML, puis exécutez :
snyk iac test
Snyk Infrastructure as Code
✔ Test completed.
Issues
Low Severity Issues: 2
[Low] EC2 API termination protection is not enabled Info: To prevent instance from being accidentally terminated using Amazon EC2, you can enable termination protection for the instance. Without this setting enabled the instances can be terminated by accident. This setting should only be used for instances with high availability requirements. Enabling this may prevent IaC workflows from updating the instance, for example terraform will not be able to terminate the instance to update instance type Rule: https://security.snyk.io/rules/cloud/SNYK-CC-AWS-426 Path: resource > aws_instance[example] > disable_api_termination File: multiline_string_assign.tf Resolve: Set `disable_api_termination` attribute with value `true`
[Low] EC2 instance accepts IMDSv1 Info: Instance Metadata Service v2 is not enforced. Metadata service may be vulnerable to reverse proxy/open firewall misconfigurations and server side request forgery attacks Rule: https://security.snyk.io/rules/cloud/SNYK-CC-TF-130 Path: resource > aws_instance[example] > metadata_options File: multiline_string_assign.tf Resolve: Set `metadata_options.http_tokens` attribute to `required`
Medium Severity Issues: 1
[Medium] Non-Encrypted root block device Info: The root block device for ec2 instance is not encrypted. That should someone gain unauthorized access to the data they would be able to read the contents. Rule: https://security.snyk.io/rules/cloud/SNYK-CC-TF-53 Path: resource > aws_instance[example] > root_block_device > encrypted File: multiline_string_assign.tf Resolve: Set `root_block_device.encrypted` attribute to `true`
-------------------------------------------------------
Test Summary
Organization: stephrobert Project name: files
✔ Files without issues: 8✗ Files with issues: 1 Ignored issues: 0 Total issues: 3 [ 0 critical, 0 high, 1 medium, 2 low ]
-------------------------------------------------------
Tip
New: Share your test results in the Snyk Web UI with the option --report
Vous verrez alors une liste d’éventuelles vulnérabilités ou mauvaises configurations, classées par sévérité.
Intégration de Snyk IaC dans un pipeline CI/CD
Pour appliquer réellement les principes du DevSecOps, il ne suffit pas de scanner ses fichiers IaC en local. L’intégration dans votre pipeline CI/CD permet de détecter automatiquement les erreurs de configuration à chaque push, merge ou déploiement.
Exemple avec GitHub Actions
Voici un exemple simple de workflow GitHub Actions pour exécuter un scan Snyk IaC :
name: Snyk IaC Scan
on: push: branches: [ main ] pull_request:
jobs: snyk: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3
- name: Install Snyk CLI run: npm install -g snyk
- name: Authenticate Snyk run: snyk auth ${{ secrets.SNYK_TOKEN }}
- name: Test IaC files run: snyk iac test
Vous devez d’abord générer un token API sur
app.snyk.io ↗ et le stocker dans les secrets
GitHub sous le nom SNYK_TOKEN
.
Autres intégrations possibles
Snyk IaC s’intègre aussi très facilement avec :
- GitLab CI/CD via
.gitlab-ci.yml
- CircleCI avec des jobs personnalisés
- Jenkins grâce à des plugins ou des scripts
- Azure DevOps, Bitbucket Pipelines, etc.
Bloquer un pipeline en cas d’erreur
Il est possible de faire échouer le pipeline si des erreurs critiques sont détectées :
snyk iac test --severity-threshold=high
Cette option est particulièrement utile pour forcer la correction des failles avant le déploiement.
Création de règles personnalisées avec Snyk IaC
Snyk IaC offre la possibilité de définir des règles personnalisées pour détecter des configurations spécifiques à votre environnement. Cette fonctionnalité est disponible avec les plans Enterprise.
Installation du SDK
Pour créer vos propres règles, commencez par installer le SDK snyk-iac-rules
.
Plusieurs méthodes sont disponibles :
-
npm :
Terminal window npm install -g snyk-iac-rules -
Homebrew (macOS/Linux) :
Terminal window brew tap snyk/tapbrew install snyk-iac-rules -
Docker :
Terminal window docker pull snyk/snyk-iac-rules:latestdocker run --rm -v $(pwd):/app snyk/snyk-iac-rules --help
D’autres options, comme les exécutables autonomes ou l’installation via Scoop pour Windows, sont détaillées dans la documentation officielle ↗.
Écriture d’une règle personnalisée
Les règles sont écrites en Rego, le langage utilisé par Open Policy Agent (OPA). Le SDK fournit des outils pour faciliter cette tâche. Par exemple, pour détecter les groupes de sécurité AWS autorisant le trafic depuis toutes les adresses IP :
package rules.aws
deny[msg] { input.resource_type == "aws_security_group" input.ingress[_].cidr_blocks[_] == "0.0.0.0/0" msg := "Le groupe de sécurité autorise l'accès depuis toutes les adresses IP."}
Des guides détaillés sur la création de règles sont disponibles dans la documentation Snyk ↗.
Intégration avec le CLI Snyk
Une fois vos règles définies, vous pouvez les intégrer au CLI Snyk :
snyk iac test --rules=chemin/vers/vos/règles
Cela permet d’appliquer vos règles personnalisées en complément des règles standard lors de l’analyse de vos fichiers IaC.
Conclusion
Adopter Snyk IaC, c’est faire un pas concret vers une approche DevSecOps efficace. L’outil permet de détecter rapidement les vulnérabilités dans vos fichiers Terraform, Kubernetes, CloudFormation ou ARM, tout en s’intégrant facilement à vos pipelines CI/CD. Et avec la possibilité de créer vos propres règles personnalisées, vous adaptez la sécurité à vos contraintes métier.
Plus loin
Voici une sélection de ressources utiles pour approfondir vos connaissances et aller plus loin avec Snyk IaC :