In this article
L’infrastructure as code dans un monde DevSecOps
Cet article présente l’infrastructure as code (IaC), sa définition et les implications de sécurité liées à son utilisation dans le monde réel.
Qu’est-ce que l’infrastructure as code ?
L’infrastructure as code (IaC) est un processus qui consiste à provisionner et à gérer des ressources dans des clouds publics tels qu’AWS, GCP et Azure à l’aide d’un ensemble de fichiers texte modifiables décrivant comment et où sont déployées les configurations des ressources d’infrastructure.
Ces scripts d’entrée sont interprétés par des outils d’infrastructure as code, qui créent, mettent à jour ou suppriment automatiquement des ressources afin que l’infrastructure cloud respecte l’état défini dans le fichier IaC. Les outils IaC sont conçus pour gérer les dépendances implicites et explicites entre les ressources d’infrastructure cloud, de sorte que leur création, leur maintenance et leur suppression s’effectuent de façon logique et tiennent compte de ces dépendances.
Avant l’apparition de l’infrastructure as code (IaC), les ressources étaient généralement provisionnées manuellement ou, au mieux, au moyen de scripts simples, comme des scripts shell ou Python. Les outils de gestion de la configuration étaient très efficaces pour configurer une instance une fois celle-ci opérationnelle, mais ne permettaient pas de créer l’instance elle-même.
L’IaC est apparue pour combler cette lacune en automatisant le provisionnement des ressources et en s’affranchissant ainsi des serveurs flocons de neige. L’introduction de langages déclaratifs de haut niveau pour définir un état souhaité, ainsi que des outils IaC qui mettaient automatiquement en œuvre ces déclarations, a marqué une grande avancée dans le secteur.
L’infrastructure as code (IaC) a apporté de nombreux avantages, notamment :
Rapidité et standardisation : l’état souhaité peut être décrit dans des scripts pour une reproductibilité parfaite.
Contrôle de version : les scripts peuvent être enregistrés dans Git, ce qui permet de conserver l’historique de votre infrastructure, comme pour le code d’une application.
Documentation : les scripts font office de documentation et de source unique de vérité.
Efficacité : les déploiements continus peuvent s’appliquer au provisionnement et à la gestion des ressources elles-mêmes.
Les trois principaux fournisseurs de cloud public proposent chacun leurs propres solutions IaC, qui fonctionnent uniquement sur leurs plateformes respectives :
Amazon Web Services propose AWS CloudFormation.
La plateforme de Microsoft Azure s’appelle Azure Resource Manager.
Google Cloud Platform utilise Google Cloud Deployment Manager.
Terraform est le logiciel IaC indépendant du cloud le plus utilisé et permet de prendre en charge de nombreux fournisseurs cloud. En fait, les fournisseurs cloud de plus petite taille, comme DigitalOcean et Rackspace, ont tendance à s’appuyer sur Terraform plutôt que sur un produit IaC développé en interne.
Les éditeurs de logiciels automatisés de gestion de la configuration, notamment Puppet, Chef et Ansible, ont également cherché à étendre leurs capacités et proposent aujourd’hui un certain niveau de prise en charge de la création, de la mise à jour et de la suppression de ressources dans les clouds publics. Toutefois, ces outils n’ont pas été conçus dès le départ comme des solutions IaC.
Qu’est-ce que la sécurité IaC ?
La sécurité de l’infrastructure as code (IaC) consiste à sécuriser les configurations du cloud, de l’infrastructure et des applications en analysant les fichiers IaC et les déploiements cloud afin d’en vérifier la conformité à un ensemble de règles codifiées.
La sécurité IaC peut empêcher les erreurs de configuration d’atteindre les environnements cloud de production et ainsi réduire les risques de violation de données, d’indisponibilité et d’échec des déploiements. Les conséquences de scripts IaC qui ne respectent pas les principes de sécurité peuvent être graves : des compartiments de stockage non sécurisés peuvent exposer des données sensibles, ou une instance rendue publique par inadvertance peut servir de vecteur d’attaque aux pirates.
Parmi les bonnes pratiques de sécurité IaC figurent le principe du moindre privilège, la segmentation du réseau afin que les ressources et leurs dépendances soient sécurisées dans un sous-réseau privé, ainsi que le chiffrement des données en transit et au repos.
Le principe du moindre privilège est essentiel pour limiter les dommages causés par des ressources mal configurées ou des scripts modifiés à des fins malveillantes. Il s’applique à l’infrastructure as code (IaC) à trois niveaux :
Définir qui est autorisé ou non à exécuter les scripts.
Limiter les autorisations des utilisateurs autorisés**IaC** à ce qui est nécessaire à l’exécution de leurs tâches.
Les scripts IaC doivent veiller à ce que les autorisations accordées aux différentes ressources qu’ils créent soient limitées au strict nécessaire pour leur permettre de fonctionner.
La plupart des autres aspects de la sécurité IaC concernent les ressources créées par les scripts eux-mêmes. Par exemple, une architecture réseau correctement segmentée peut limiter les dégâts causés par des attaques internes ou externes. L’ajout d’une ligne encrypt = true à vos scripts d’infrastructure as code (IaC) protège les données au repos, tandis que l’utilisation de services gérés tels que AWS Certificate Manager peut protéger les données en transit. Parmi les autres bonnes pratiques, citons la mise en place de mécanismes de protection classiques contre les attaques DDoS et les attaques HTTP courantes, comme un pare-feu d’applications web.
Qu’est-ce que l’IaC dans le DevSecOps ?
Dans le contexte de l’infrastructure as code, le DevOps repose sur une étroite collaboration entre les développeurs et les ingénieurs DevOps, ainsi que sur l’utilisation de l’IaC dans le cadre du déploiement continu. Le « DevSecOps », également appelé « approche shift-left », consiste à intégrer la sécurité au DevOps. Pour l’IaC, le DevSecOps signifie intégrer la sécurité dès le début du projet et la maintenir à chaque étape. Cela implique également d’utiliser les outils adaptés à votre charge de travail et d’automatiser la sécurité (parfois appelée security as code).

Adoption du DevSecOps : intégrer la sécurité au pipeline CI/CD
Le DevSecOps concerne autant la culture organisationnelle — notamment la libre circulation de l’information entre différentes équipes — que la technologie. Le DevSecOps, au sein de l’univers DevOps, où culture et technologie convergent, encourage l’automatisation à tous les niveaux. L’IaC est un aspect fondamental du DevOps, puisqu’elle vise à automatiser des déploiements complets. Dans le cadre de l’IaC, le DevSecOps consiste à automatiser les bonnes pratiques de sécurité et à utiliser des outils adaptés à la charge de travail pour renforcer la sécurité.
Outils de sécurité de l’infrastructure as code
En réalité, peu d’outils de sécurité sont spécifiquement conçus pour appliquer les bonnes pratiques de sécurité au niveau de l’infrastructure as code dans le DevSecOps. Des outils de sécurité tiers tels que DataDog, Splunk, Jaeger et d’autres peuvent être utilisés en dehors des scripts IaC. Il existe également des services de sécurité natifs du cloud qui peuvent être activés à partir de scripts IaC, comme Amazon GuardDuty, Amazon Macie et Amazon Inspector.
Snyk IaC Security est toutefois l’un des rares outils conçus pour les développeurs _et les équipes de sécurité, afin de sécuriser Terraform, Kubernetes, CloudFormation, Azure Resource Manager (ARM) et bien plus encore.

Snyk IaC sécurise vos configurations tout au long du cycle de vie complet de l’infrastructure, en s’intégrant parfaitement aux workflows des développeurs et en appliquant les bonnes pratiques de sécurité IaC, du code au cloud :
Définissez les bonnes pratiques de sécurité et assurez la conformité : un ensemble de règles intégré et évolutif, fondé sur les bonnes pratiques du secteur, les référentiels CIS et les exercices de modélisation des menaces de l’équipe de sécurité de Snyk. Intégrez la sécurité et réussissez vos revues de code.
Laissez les développeurs travailler dans leur workflow habituel : testez en continu les fichiers IaC pour détecter les erreurs de configuration, avec la possibilité d’effectuer des tests en local via la CLI et des intégrations aux IDE, aux outils de gestion du code source (GitHub, GitLab, etc.) et à Terraform Cloud. Favorisez l’adoption par les développeurs et réduisez au minimum les interruptions et les distractions.
Corrigez plus rapidement les problèmes les plus risqués : la gravité et l’impact des problèmes, ainsi que des recommandations de correction structurées, sont mis en évidence directement dans le code pour aider les développeurs à corriger rapidement les problèmes et à garantir la sécurité des configurations.
Adaptez la sécurité à votre cas d’usage : rédigez ou importez des règles personnalisées dans le langage de haut niveau Rego d’Open Policy Agent, et ajustez la gravité des règles prédéfinies.
Assurez la sécurité tout au long du cycle de vie de l’infrastructure : détectez les problèmes de dérive de l’infrastructure et les ressources non gérées dans les environnements cloud de production. Signalez directement les problèmes aux ingénieurs, avec le contexte de la ressource, pour accélérer les corrections et reprendre le contrôle des ressources non gérées.
Snyk Infrastructure as Code est une composante essentielle de la plateforme Snyk, qui intègre et applique les bonnes pratiques de sécurité à l’ensemble de la pile applicative cloud native, notamment aux logiciels open source, aux conteneurs et à Kubernetes, en plus de l’infrastructure as code.
Sécurisez votre infrastructure dès la source
Snyk automatise la sécurité et la conformité de l’IaC dans vos workflows, et détecte les ressources dont la configuration a dérivé ou qui sont manquantes.
Conclusion
L’infrastructure as code étant située au sommet des couches d’orchestration, la sécurité devient plus facile à gérer et à maintenir. De nombreuses solutions peuvent être activées par l’IaC, mais très peu permettent d’appliquer les bonnes pratiques de sécurité au niveau même de l’IaC. Il est également essentiel de trouver les bons outils et de former les équipes pour favoriser la collaboration. Appliquez les bonnes pratiques de sécurité au code IaC utilisé avec Terraform, Kubernetes, CloudFormation, Azure Resource Manager (ARM) et bien d’autres. Inscrivez-vous gratuitement pour sécuriser vos projets avec Snyk.