Le policy as code (ou politique en tant que code) est une méthode permettant d’exprimer des règles et des contraintes, notamment en matière de sécurité, de conformité et de politiques organisationnelles, sous la forme d’un code lisible par machine qui est automatiquement appliqué aux architectures informatiques et aux pipelines DevOps.
Au lieu de compter sur des êtres humains pour vérifier la conformité ou mémoriser les règles de sécurité, ces règles existent sous forme de logique exécutable qui s’applique chaque fois qu’un développeur ou un système propose une modification ou une requête. Si quelqu’un soumet une modification, un moteur de politiques évalue automatiquement cette modification par rapport aux règles codées et l’autorise, la refuse ou la signale.
Ce système remplace les pratiques de gestion des politiques basées sur des documents statiques par une surface de contrôle dynamique, appliquée en continu et intégrée au pipeline de livraison logicielle.
Les règles basées sur du code permettent de garantir que les mêmes politiques sont appliquées partout, de manière reproductible et évolutive. Les moteurs de politiques peuvent effectuer des vérifications automatisées en quelques secondes lors des builds ou des déploiements, ce qui réduit les cycles de retour d’information et évite aux équipes DevOps des surprises de dernière minute en matière de sécurité ou de conformité.
Le PaC permet aux entreprises d’améliorer leur posture de cybersécurité globale et de maintenir leur conformité aux normes sectorielles et réglementaires. De plus, le fait de traiter les politiques comme du code s’inscrit dans une transition plus large vers le modèle « everything as code » (ou tout en tant que code), qui transforme des éléments tels que les demandes d’infrastructure en fichiers de code pouvant être examinés et autour desquels les équipes de développement peuvent collaborer.
Restez au fait des tendances les plus étonnantes du secteur dans le domaine de l’IA, de l’automatisation, des données et bien d’autres avec la newsletter Think. Consultez la Déclaration de confidentialité d’IBM.
Dans le contexte DevOps, une politique est une règle claire et applicable concernant la manière dont l’infrastructure informatique et les applications doivent être configurées, accessibles ou exécutées. Plus précisément, ces politiques dictent quelles actions sont autorisées, requises ou interdites afin que les systèmes continuent de fonctionner dans leur état optimal.
Par exemple, « tous les compartiments de stockage doivent être chiffrés » ou « aucun service public ne peut ouvrir le port 22 » sont des politiques, car elles spécifient des contraintes concrètes sur le comportement du système.
Avec le PaC, les politiques sont rédigées dans un langage de programmation structuré, ce qui permet aux moteurs de politiques et aux outils d’automatisation de les analyser et de les évaluer de manière déterministe. Ainsi, les politiques deviennent des garde-fous exécutables auxquels les systèmes et les ingénieurs doivent se conformer, plutôt que de simples lignes directrices susceptibles d’être interprétées différemment selon les personnes.
Les outils de policy as code permettent aux développeurs d’intégrer du code exécutable dans les environnements d’exécution et les pipelines CI/CD (intégration continue/livraison continue), de sorte que chaque modification soit automatiquement vérifiée quant à sa conformité.
D’un point de vue technique, la plupart des configurations PaC suivent les mêmes grandes étapes :
Les vérifications de conformité peuvent avoir lieu à n’importe quelle étape du cycle de développement logiciel (SDLC), de l’intégration du code à la mise en production et à la surveillance.
Les politiques étant du code, elles peuvent également être traitées comme n’importe quel autre artefact logiciel.
Les équipes de développement peuvent écrire des tests automatisés qui fournissent des exemples d’entrées aux politiques et vérifient les décisions qu’elles renvoient, afin d’accélérer les cycles de retour d’information en cas de modification des politiques.
Lorsque les politiques sont codées, les développeurs peuvent extraire la logique commune pour en faire des modules ou des fonctions réutilisables. Plusieurs politiques de niveau supérieur peuvent alors faire appel à des politiques partagées au lieu de dupliquer les conditions partout.
Les développeurs peuvent également renommer, restructurer ou diviser de grandes politiques en politiques plus petites sans modifier leur comportement, tout comme lorsqu’on refactorise une grande fonction d’application en fonctions plus petites.
Grâce à ces capacités, les équipes peuvent appliquer les pratiques existantes d’ingénierie logicielle à la logique de gouvernance, et ainsi respecter les exigences de sécurité et de conformité à mesure que les architectures informatiques évoluent et s’étendent.
Imaginons que l’entreprise X souhaite mettre en œuvre une politique « HTTPS uniquement » selon laquelle chaque service Web doit utiliser le protocole HTTPS, et non le protocole HTTP en clair. Pour codifier cette politique, un ingénieur de plateforme rédige une règle simple qui stipule :
L’ingénieur place ce fichier de politique dans un dossier « policies » (politiques) situé dans le même référentiel de code que l’application, puis ouvre une pull request afin d’ajouter la politique. Cette pull request déclenche une vérification syntaxique automatique du fichier de politique ainsi qu’un examen du code par un autre ingénieur. Ce n’est qu’une fois que la politique a réussi les tests requis qu’elle est fusionnée dans la branche principale.
Dans le pipeline d’intégration continue (CI), tous les fichiers de politique sont chargés dans le moteur de politique à partir du dossier « policies ». Le moteur de politiques lit la politique, la convertit en une représentation interne et la compile sous une forme compacte de bas niveau. Cette dernière permet au moteur de répondre rapidement à la question « autoriser ou refuser ? » pour chaque service vérifié par le pipeline.
Quel que soit le format du fichier, une tâche CI prend le fichier de configuration existant, en extrait les champs importants (nom, protocole, port) et crée une description JSON simple de chaque service.
L’appelant demande une décision au moteur de politiques en envoyant la description standardisée du service en entrée et en indiquant que l’ensemble de politiques « HTTPS uniquement » doit être appliqué.
Le moteur de politiques évalue ensuite l’entrée par rapport aux règles. Il vérifie le champ « protocole » du service. Si le protocole est HTTP, cela signifie que l’entrée correspond à la condition « refuser » de la politique. Le moteur indique que la modification doit être refusée et génère un message informant le développeur que le service doit utiliser HTTPS à la place de HTTP. Si le service utilise HTTPS, aucune des conditions de refus n’est remplie, et le moteur indique que la modification est autorisée.
Ensuite, le moteur de politiques synthétise les évaluations des règles en un seul objet de décision pour le service. Les objets de décision précisent généralement si la décision globale est « autoriser » ou « refuser » et quel est le niveau de gravité du problème (élevé, moyen, faible). Ils comprennent également une liste de messages expliquant pourquoi l’entrée a été refusée, ainsi que les avertissements détectés par le moteur au cours du processus d’évaluation. Si tout est conforme, l’objet de décision indique que la modification est autorisée et ne contient que des notes d’information (voire aucun message).
Enfin, les outils CI appliquent la décision. Si la décision est « refuser », la modification ne parvient pas à être fusionnée dans la branche principale du code. L’ingénieur voit s’afficher un message d’erreur indiquant que le service doit utiliser le protocole HTTPS et subir des modifications spécifiques. Si la décision est « autoriser », l’artefact est packagé et déployé, et le pipeline d’intégration continue se déroule normalement.
Le concept de policy as code est né du mouvement plus large « everything as code » dans le domaine du DevOps moderne et de l’ingénierie cloud.
À l’origine, c’est l’infrastructure as code (infrastructure en tant que code ou IaC) qui a constitué un changement majeur. Au lieu que les administrateurs système cliquent dans des interfaces utilisateur ou suivent des runbooks, (dossiers d’exploitation), les équipes décrivaient les serveurs, les réseaux et autres ressources dans des fichiers de code déclaratifs. Ces fichiers étaient stockés dans des systèmes de contrôle de version et appliqués via des pipelines automatisés.
Lorsque les entreprises en ont constaté les avantages, cette approche s’est étendue à d’autres composants des architectures informatiques. La configuration des applications s’est orientée vers des approches basées sur le code. Les pipelines CI/CD sont devenus des scripts hébergés dans des référentiels de code. Les règles de surveillance et d’alerte ont elles aussi commencé à être définies sous forme de code. Ensemble, ces pratiques ont été baptisées « everything as code ».
L’idée centrale du concept « everything as code » est la suivante : si une partie du système peut être décrite, elle doit l’être sous forme de code et être gérée de la même manière que les applications logicielles.
Le PaC consiste essentiellement à appliquer cette philosophie aux règles, à la gouvernance et à la conformité. Traditionnellement, les politiques étaient consignées dans des fichiers PDF et sur des wikis, ou décidées en comité, et leur application était assurée par des êtres humains. Ce processus fonctionnait lorsque les cycles de mise en production étaient lents et que l’infrastructure était relativement statique.
Avec l’avènement des architectures cloud natives et des microservices, et alors que les équipes commençaient à déployer du code plusieurs fois par jour, les processus manuels ne parvenaient plus à suivre le rythme. Le PaC a relevé ce défi en exprimant les politiques dans des formats lisibles par machine, afin qu’elles puissent être gérées par versions dans Git, examinées comme des fichiers de code, testées en CI et appliquées automatiquement dans les pipelines ou lors de l’exécution.
Le policy as code permet de gérer les politiques informatiques à la manière du code logiciel. L’infrastructure as code (IaC) repose sur un principe similaire, mais avec une orientation différente. Cette approche permet aux équipes d’ingénierie de définir et de gérer l’infrastructure informatique à l’aide de code d’application.
Au lieu de créer et de configurer manuellement des ressources réseau telles que des machines virtuelles (VM) et des équilibreurs de charge, l’IaC permet aux développeurs d’écrire du code pour décrire l’état souhaité de ces ressources. Un outil IaC utilise ensuite ce code pour créer ou modifier les ressources spécifiées.
L’IaC facilite considérablement le dimensionnement et l’automatisation de l’infrastructure. Si une équipe a besoin de plus de serveurs, il lui suffit de modifier un chiffre dans le code (passer de six instances à neuf par exemple). Les outils d’automatisation se chargent des détails liés au provisionnement de ces ressources supplémentaires.
D’un point de vue général, l’IaC définit quelle infrastructure doit exister et comment elle doit être configurée, tandis que le PaC se concentre sur les règles et les contraintes auxquelles cette infrastructure doit se conformer. Le code IaC crée et configure les ressources, tandis que le code PaC permet de s’assurer que ces ressources (et la manière dont elles sont utilisées) respectent les exigences de sécurité, les normes de conformité et les garde-fous opérationnels définis.
Dans de nombreuses architectures informatiques modernes et configurations CI/CD, l’IaC et le PaC présentent des avantages complémentaires. L’IaC automatise le provisionnement, tandis que le PaC y ajoute une gouvernance automatisée.
Lorsqu’un développeur modifie un fichier IaC, un moteur PaC peut inspecter le nouveau plan ou la nouvelle configuration. Si tout est conforme aux politiques établies, la modification est autorisée et l’infrastructure est mise à jour. En cas de violation d’une règle, le pipeline échoue et aucun déploiement n’a lieu tant que le problème n’est pas résolu.
Le DevSecOps consiste à intégrer la sécurité et la conformité au cœur du cycle de vie DevOps, plutôt que de les ajouter en fin de processus. Il s’agit d’une approche de développement dans laquelle les processus de sécurité sont hiérarchisés et exécutés à chaque étape du cycle de développement logiciel.
Le PaC soutient les pratiques DevSecOps en :
Le PaC permet aux équipes d’anticiper la sécurité en déplaçant les contrôles de sécurité vers les premières étapes du processus de développement, plutôt qu’après le déploiement, moment où les problèmes peuvent affecter les utilisateurs. Si un développeur introduit une configuration risquée ou un modèle non sécurisé, le problème sera détecté par des politiques automatisées et la compilation échouera.
Les outils PaC automatisent l’application des politiques en intégrant directement les règles de sécurité dans les pipelines CI/CD et les systèmes d’exécution, de sorte que les contrôles s’effectuent automatiquement à chaque modification du code ou de l’infrastructure. Au lieu de compter sur des intervenants humains pour mémoriser chaque norme de sécurité et examiner manuellement chaque modification, le système évalue systématiquement les changements afin de garantir qu’aucune étape ne soit accidentellement omise.
Le PaC permet aux développeurs de maintenir la vitesse de déploiement sans compromettre la cohérence ni la sécurité. Il applique les mêmes définitions de politiques dans tous les environnements et à chaque étape : développement, tests, préproduction et production. Les équipes peuvent ainsi effectuer des mises en production fréquentes, car elles ont l’assurance que le même ensemble de règles est appliqué partout. Elles évitent également les situations où les différents environnements divergent ou appliquent des interprétations légèrement différentes des règles.
Le PaC traite les politiques de sécurité des applications comme n’importe quel autre artefact de code hébergé dans un système de contrôle de version. Les équipes de développement, d’exploitation et de sécurité peuvent toutes examiner, commenter et mettre à jour les politiques via des workflows familiers (examens de code, stratégies de branchement), ce qui rend les discussions sur les politiques plus transparentes et mieux intégrées au travail quotidien de développement.
Le policy as code offre un large éventail d’applications pour les architectures informatiques d’entreprise.
De nombreuses entreprises utilisent le PaC comme couche de gouvernance pour les infrastructures cloud natives. Les politiques sont évaluées à chaque fois que des modèles IaC sont appliqués ; elles peuvent alors bloquer ou modifier les ressources non conformes. Par exemple, les équipes peuvent utiliser le PaC pour restreindre les paramètres réseau en interdisant les adresses IP publiques pour les bases de données ou en exigeant des sous-réseaux privés pour certains workloads.
Le PaC peut exprimer une logique d’autorisation très fine, en définissant qui peut faire quoi, dans quelles conditions et sur quelles ressources, le tout au sein d’une couche de politiques centralisée et testable.
Par exemple, les équipes utilisent le PaC pour déterminer, de manière détaillée, quels rôles d’utilisateurs peuvent accéder à des API et à des points de terminaison sensibles, et selon quelles méthodes HTTP. Au lieu de « les administrateurs peuvent accéder au système », les développeurs peuvent stipuler que « les utilisateurs ayant le rôle X peuvent effectuer l’action Y sur la ressource Z entre les heures A et B ».
Traditionnellement, les exigences réglementaires, telles que la loi HIPAA (Health Insurance Portability and Accountability Act), font l’objet de longs documents. Des personnes lisent ces documents et tentent de les convertir en configurations et en listes de contrôle.
Avec le PaC, les équipes reprennent ces exigences de haut niveau et les codifient sous forme de règles qu’un ordinateur peut évaluer. Ces règles peuvent être partagées et réutilisées dans tous les environnements ; lorsqu’une réglementation change, la règle correspondante peut être mise à jour une seule fois et automatiquement appliquée partout où la politique est déployée.
De plus, le PaC crée des fichiers journaux lisibles par machine chaque fois que le moteur de politiques effectue un contrôle de conformité, permettant aux équipes de conserver des pistes d’audit détaillées. Chaque évaluation peut générer des journaux ou des indicateurs en temps réel indiquant quels systèmes ont été validés, lesquels ont échoué et la raison exacte de cet échec. Ces résultats alimentent des tableaux de bord et des rapports qui présentent l’état de conformité par système, compte ou environnement.
Sans PaC, il arrive souvent que les équipes surprovisionnent des ressources (instances de grande taille, disques volumineux, nombreuses répliques) et ne s’en rendent compte que lorsqu’elles constatent un pic dans les rapports de coûts mensuels. PaC renverse cette dynamique. Les règles sont évaluées avant ou au moment même de la création des ressources, ce qui permet de bloquer ou de signaler immédiatement les choix peu rentables.
Par exemple, si un utilisateur tente de lancer un type d’instance de grande taille dans un environnement de test, une politique peut refuser la modification et renvoyer une erreur expliquant que seules les tailles plus petites sont autorisées. Cette approche permet aux développeurs de continuer à travailler rapidement tout en respectant les limites budgétaires.
Dans Kubernetes, les développeurs soumettent des manifestes (fichiers décrivant ce qu’ils souhaitent que Kubernetes crée et comment ils souhaitent qu’il se comporte) au serveur d’API afin de créer des pods, des déploiements et d’autres ressources.
Les contrôleurs d’admission et les moteurs de politiques sont placés en amont du serveur API et examinent chaque requête API émise par chaque manifeste. Ils appliquent le PaC pour décider s’il convient d’autoriser, de refuser ou de modifier la ressource entrante. De cette manière, la gouvernance s’effectue automatiquement à l’« entrée » du cluster.
Lorsque les entreprises exploitent plusieurs clusters (par région ou par unité commerciale par exemple), le PaC leur permet d’appliquer les mêmes règles de gouvernance partout. Un même référentiel de politiques peut être synchronisé sur de nombreux clusters, de sorte que chaque cluster applique les mêmes limites de ressources, les mêmes règles relatives aux images et les mêmes exigences en matière de métadonnées.
Chaque fournisseur de cloud et chaque plateforme sur site dispose de ses propres services et outils dont les équipes DevOps peuvent tirer parti. Cependant, bon nombre des règles de gouvernance qu’elles créent pour chaque plateforme sont identiques sur le plan conceptuel. La manière dont les développeurs doivent baliser les ressources, les personnes autorisées à y accéder, l’exposition des réseaux et le fonctionnement du chiffrement sont généralement cohérents d’un service à l’autre.
Le PaC permet aux équipes d’appliquer des règles de sécurité cloud via des outils spécifiques aux fournisseurs ou un moteur de politiques multiplateforme. Par exemple, une politique partagée pourrait stipuler : « tous les points de terminaison exposés vers l’extérieur doivent utiliser le protocole TLS et se situer derrière une passerelle API approuvée ». Cette règle pourrait être appliquée par un mécanisme différent dans chaque environnement cloud, mais elle resterait néanmoins régie par la même définition de politique.
Les développeurs et les professionnels de la sécurité étudient actuellement le policy as code comme moyen de créer des modèles de garde-fous à plusieurs niveaux couvrant l’ensemble du cycle de vie d’un workflow agentique ou d’IA. Bien que cette pratique soit encore naissante, les premières études ont révélé de nombreuses applications possibles du PaC dans les workflows d’IA.
Le PaC permet d’établir une séparation claire entre le raisonnement de l’IA et le système qui décide des actions qu’elle est réellement autorisée à exécuter. L’outil d’IA peut proposer des actions ou des plans, mais un moteur de politiques évalue ces propositions à l’aune de règles codifiées avant que tout système sous-jacent ne soit sollicité.
Au stade de la saisie, le PaC permet de filtrer ou de transformer les prompts des utilisateurs, de masquer les données sensibles, d’assurer l’isolation des entités et de bloquer les schémas d’attaque connus. Lors de la planification, le PaC peut exiger des agents d’IA qu’ils produisent des plans structurés et valident chaque étape au regard des outils, actions et conditions de risque autorisés avant que l’exécution ne soit autorisée.
Au moment de l’exécution, chaque invocation d’outil ou appel d’API peut être vérifiée par la couche d’application des politiques. Cette couche décide s’il convient d’autoriser, de refuser ou de modifier une action, ou de la transmettre à un intervenant humain. Après l’exécution, les politiques peuvent piloter la journalisation, les pistes d’audit, les règles de conservation et les filtres a posteriori sur les résultats des modèles afin de garantir que les réponses respectent les exigences requises.
Exploitez le pouvoir de l’IA et de l’automatisation pour résoudre de manière proactive les problèmes de la pile d’applications.
Utilisez les logiciels et outils DevOps pour construire, déployer et gérer des applications cloud natives sur plusieurs appareils et environnements.
Renforcez l’agilité et la croissance de votre entreprise. Modernisez en continu vos applications sur n’importe quelle plateforme grâce à nos services de conseil cloud.