Aller au contenu

Sécuriser le rollback blue-green et canary cloud

Blue-green et canary réduisent le rayon d’explosion d’une mise à jour, mais ne transforment pas une livraison en opération sans risque. Le compromis central est net : gagner un retour arrière rapide exige de payer deux versions exploitables, des migrations réversibles et une discipline de versionnement que les slides de vendeur omettent avec une constance touchante.

→ Lire l’explication complète de la marmotte

Blue-green et canary : choisir selon le type de risque

Section intitulée « Blue-green et canary : choisir selon le type de risque »

Un déploiement blue-green maintient deux environnements de production équivalents. Une seule version reçoit le trafic, puis le routage bascule vers l’autre après validation. Le rollback consiste à rétablir le routage précédent. Ce modèle est le bon choix pour un changement binaire, à condition que l’état applicatif et les dépendances externes restent compatibles dans les deux sens.

Un déploiement canary expose une nouvelle version à une fraction contrôlée du trafic avant généralisation. Cette fraction doit être déterminée par une règle observable, par exemple un en-tête signé, une cohorte d’identité ou une pondération au niveau du proxy. Un canary fondé sur l’adresse IP est fragile : les réseaux d’entreprise, les passerelles de sortie et les clients mobiles rendent la cohorte incohérente. Le hasard pur détecte les erreurs générales, mais ne protège pas les comptes sensibles.

Le choix dépend d’abord de la réversibilité des données. Blue-green convient aux bascules courtes et aux versions isolées par le routage. Canary convient lorsqu’une erreur fonctionnelle, de performance ou de compatibilité doit être détectée sur trafic réel. Pour une migration de schéma irréversible, aucun des deux ne fournit un rollback complet. Le trafic peut revenir, pas une colonne supprimée ni une donnée réinterprétée et réécrite.

La recommandation est stricte : réserver blue-green aux applications dont la version précédente peut encore lire et écrire les données, et utiliser canary pour les changements où l’observation progressive apporte une information réelle. Mélanger les deux est légitime : canary sur le nouvel environnement, puis bascule blue-green. Les appeler pareil parce que deux couleurs figurent sur un tableau de bord est une forme de poésie opérationnelle, pas une architecture.

Le routage doit être séparé de l’artefact déployé. Une image de conteneur immuable est identifiée par son digest cryptographique, pas par une étiquette mutable telle que latest ou release. Le manifeste de déploiement, la politique de routage et les paramètres d’exécution doivent chacun avoir une version traçable. Sans cette séparation, un rollback remet parfois l’ancien manifeste sur une nouvelle image. Le résultat porte le nom rassurant de rollback et le comportement d’une loterie.

Versionnement des artefacts et compatibilité de l’état

Section intitulée « Versionnement des artefacts et compatibilité de l’état »

Chaque livraison doit référencer un digest d’image, un identifiant de configuration, une version de schéma et la révision des politiques d’accès. Une chaîne de livraison doit produire une attestation signée reliant le code source, les dépendances, l’artefact et le manifeste. La signature doit être vérifiée par l’admission du cluster ou par le moteur de déploiement, avant l’exécution. Une signature vérifiée au poste de construction ne protège rien si un jeton de déploiement peut pointer ensuite vers un autre registre.

La migration de base de données suit le modèle expand-contract. D’abord ajouter des structures compatibles, ensuite déployer le code qui sait lire l’ancien et le nouveau format, migrer les données, puis retirer l’ancien format dans une livraison ultérieure. Une opération destructive ne doit jamais appartenir au même lot que l’activation d’une nouvelle version. Cette règle paraît lente jusqu’au premier rollback à 02:17, moment où les options théoriques prennent soudain une forme très concrète.

Les contrats entre services exigent la même discipline. Ajouter un champ est généralement compatible si les consommateurs ignorent les champs inconnus. Renommer un champ, modifier son sens, resserrer une validation ou changer une unité ne l’est pas. Les versions d’interface doivent être acceptées en chevauchement, avec une date de retrait vérifiée par télémétrie. Une compatibilité annoncée sans métrique de consommateurs actifs est un vœu pieux avec une date dans un ticket.

Les secrets doivent aussi être compatibles pendant la fenêtre de rollback. Une rotation de clé de chiffrement ou de certificat Transport Layer Security (TLS) doit autoriser temporairement la vérification par l’ancienne et la nouvelle clé, tout en limitant les émissions à la nouvelle. La révocation d’un certificat ne ferme pas les sessions déjà établies. Les durées de session, les caches de jetons et les listes de révocation déterminent le délai réel de retour à un état sûr. Les principes de séparation des identités de déploiement sont détaillés dans l’IAM cloud, et les dépendances de certificats dans la PKI et TLS.

Le rollback est un pouvoir d’administration. Un attaquant qui peut revenir à une image ancienne vulnérable, désactiver une correction ou réactiver une dépendance compromise n’a pas besoin de modifier le code courant. La menace est particulièrement élevée lorsque le pipeline accepte des tags mutables, quand l’historique de déploiement n’est pas protégé, ou quand une identité humaine possède un droit permanent de bascule.

L’autorisation de promouvoir, suspendre ou annuler un déploiement doit être distincte de l’autorisation de construire une image. Appliquer le moindre privilège : le compte d’exécution lit les secrets nécessaires, le compte de livraison modifie les objets de déploiement, et aucun des deux ne doit administrer les règles réseau. Une élévation temporaire, journalisée et soumise à approbation pour le rollback d’urgence réduit le risque, sans prétendre qu’un compte partagé dans un coffre-fort est une stratégie. C’est un secret collectif avec une moustache.

Les métriques de santé ne doivent pas être fournies uniquement par la version candidate. Une compromission peut déclarer le succès tout en exfiltrant des données. Observer depuis le proxy les taux d’erreur, la latence, les codes de réponse et les échecs d’authentification. Corréler ces signaux avec les journaux d’audit, les refus de politiques et les accès aux secrets. Définir avant le déploiement des seuils de promotion et d’abandon, avec une période d’observation adaptée aux traitements asynchrones.

Les attaques par rejeu méritent une vérification explicite. Un ancien manifeste signé peut rester cryptographiquement valide après qu’une vulnérabilité a été corrigée. L’admission doit imposer une fenêtre de versions autorisées, une liste de digests interdits et un numéro de génération croissant pour chaque environnement. La signature garantit l’origine de l’artefact, pas son innocuité actuelle. Ces deux propriétés sont souvent mélangées, probablement parce qu’elles tiennent bien dans une même case de diagramme.

Enfin, protéger le plan de contrôle : authentification multifacteur pour les actions humaines, journaux immuables exportés hors du compte d’exécution, alertes sur toute bascule de trafic et conservation des manifestes effectivement appliqués. Les règles de segmentation et d’exposition restent nécessaires, même avec deux versions disponibles, comme rappelé dans l’architecture cyber et la section cloud.

Exemple de bascule blue-green contrôlée sur Kubernetes

Section intitulée « Exemple de bascule blue-green contrôlée sur Kubernetes »

Kubernetes est un orchestrateur de conteneurs. L’exemple suivant bascule un service entre deux déploiements déjà prêts, identifiés par le label track. Il suppose kubectl configuré avec un compte limité au namespace concerné, deux déploiements dont les sondes de disponibilité sont actives, et une image référencée par digest dans chaque manifeste.

Fenêtre de terminal
# Vérifier que la cible green possède des instances réellement prêtes.
kubectl -n production get pods -l app=paiement,track=green
# Conserver l'état de routage actuel, nécessaire au retour arrière vérifiable.
kubectl -n production get service paiement -o yaml > paiement-service-before.yaml
# Basculer le sélecteur du service vers green.
kubectl -n production patch service paiement \
--type merge \
-p '{"spec":{"selector":{"app":"paiement","track":"green"}}}'
# Contrôler les points d'accès du service après la bascule.
kubectl -n production get endpoints paiement
# Revenir à blue si les seuils définis avant la bascule sont dépassés.
kubectl -n production apply -f paiement-service-before.yaml

Cette commande ne valide ni la cohérence des écritures, ni les traitements asynchrones, ni les sessions persistantes. Elle ne fait que modifier la destination du trafic. Avant l’exécution, vérifier que les consommateurs de files, les tâches planifiées et les workers ne traitent pas deux fois le même événement lorsque blue et green coexistent. L’idempotence, c’est-à-dire la capacité à rejouer une opération sans effet supplémentaire, est une condition de sécurité du rollback dès qu’un traitement quitte le chemin synchrone.

Le fichier de restauration doit être conservé dans un dépôt protégé et lié à une révision approuvée, pas créé à la volée depuis une console. Un état récupéré après modification manuelle incorpore les erreurs manuelles, ce qui est une manière étonnamment efficace de transformer un plan de reprise en archéologie.

Exploitation : rotation, sauvegarde et critères d’abandon

Section intitulée « Exploitation : rotation, sauvegarde et critères d’abandon »

La fenêtre de rollback doit être définie par les dépendances les plus lentes : durée maximale des transactions, expiration des jetons, propagation Domain Name System (DNS), réplication de données et vidage des files. Une bascule de trafic terminée en secondes ne signifie pas que l’ancien état cesse d’agir en secondes. Documenter cette fenêtre avec les propriétaires des dépendances, puis l’exercer.

Sauvegarder les données avant toute migration destructive, mais ne confondre ni sauvegarde ni rollback. La restauration d’une sauvegarde réintroduit un point de restauration et peut écraser des écritures légitimes. Définir le Recovery Point Objective (RPO), soit la perte de données maximale acceptable, et le Recovery Time Objective (RTO), soit le délai maximal de reprise. Ces objectifs sont des contraintes d’architecture, pas des décorations de comité.

Tester les retours arrière avec des données représentatives et des pannes injectées : indisponibilité du registre d’images, échec de lecture de secret, saturation de base, certificat expiré, règle réseau erronée. Vérifier aussi le chemin humain : qui peut arrêter une promotion, qui approuve une restauration, et comment joindre l’astreinte sans dépendre du service qui vient de tomber. Un plan qui suppose que le système défaillant envoie ses propres alertes a l’optimisme d’un grille-pain dans une baignoire.

Sans deux versions exploitables et des migrations réversibles, une mise à jour défaillante ne peut plus être annulée : le retour arrière rapide que promettent blue-green et canary n’existe que si la version précédente reste prête à reprendre le trafic. En son absence, une livraison fautive s’installe partout en même temps, et la seule issue devient une correction à chaud sous pression, pendant l’incident. Une migration de données non réversible verrouille cette situation : le schéma a changé, l’ancienne version ne sait plus lire ce qui a été écrit, et revenir en arrière corromprait ou perdrait des données. Sans versionnement discipliné des artefacts et de la configuration, il devient aussi impossible de savoir quelle version tourne réellement, donc d’identifier laquelle a introduit la régression et laquelle restaurer.

Lors d’une mise à jour, il faut conserver une ancienne version qui peut encore fonctionner pendant que la nouvelle est vérifiée. Avec la méthode blue-green, deux ensembles de programmes sont prêts en même temps. Le trafic des utilisateurs va vers un seul ensemble. Après les contrôles, la direction du trafic peut passer vers l’autre ensemble. Si un problème apparaît, la direction revient vers le premier.

Avec la méthode canary, seule une partie des utilisateurs reçoit d’abord la nouvelle version. Les erreurs, les lenteurs et les refus d’accès sont mesurés avant d’élargir le changement. Les règles doivent décider à l’avance quand arrêter ou revenir en arrière.

Le retour arrière ne répare pas automatiquement les données. Si la nouvelle version a supprimé ou transformé des informations, l’ancienne peut ne plus les comprendre. Il faut donc ajouter les changements de données progressivement et attendre avant de supprimer l’ancien format.

Chaque programme déployé doit être identifié précisément et signé pour empêcher le remplacement par une version inconnue ou ancienne. Les droits de bascule doivent être séparés des droits de fabrication des programmes. Enfin, il faut garder des copies des données, surveiller les changements et tester les échecs. Sans tests de retour arrière, le bouton de retour est seulement un bouton décoratif.

À lire aussi

Pages voisines