Aller au contenu

Sécurisez votre IaC avec Snyk

Mise à jour :

logo snyk

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 :

Terminal window
asdf plugin add snyk
asdf install snyk latest
asdf set --home snyk latest

Avec Homebrew

Vous pouvez aussi utiliser Homebrew sur macOS :

Terminal window
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 :

Terminal window
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 :

Terminal window
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 :

Terminal window
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/tap
    brew install snyk-iac-rules
  • Docker :

    Terminal window
    docker pull snyk/snyk-iac-rules:latest
    docker 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 :

Terminal window
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 :