Recommandations pour des pratiques de déploiement sécurisées

S’applique à cette recommandation de liste de contrôle d’excellence opérationnelle Azure Well-Architected Framework :

OE :11 Définissez clairement les pratiques de déploiement sécurisées de votre charge de travail. Mettez l’accent sur les idéaux des méthodes de mise en production de petite taille, incrémentielles et contrôlées par la qualité. Utilisez des modèles de déploiement modernes et des techniques d’exposition progressive pour contrôler les risques. Tenir compte des déploiements de routine et des déploiements d’urgence ou de correctif logiciel.

Ce guide décrit les recommandations relatives à l’utilisation des pratiques de déploiement sécurisé (SDP). Les processus et procédures de déploiement sécurisés définissent comment apporter et déployer des modifications en toute sécurité à votre charge de travail. L’implémentation de SDP vous oblige à réfléchir aux déploiements sous l’angle de la gestion des risques. Vous pouvez réduire le risque d’erreur humaine dans vos déploiements et limiter les effets des déploiements problématiques sur vos utilisateurs en implémentant SDP.

Stratégies de conception

Il existe quatre recommandations importantes à garder à l’esprit lors de l’implémentation de pratiques de déploiement sécurisées :

  • Sécurité et cohérence : toutes les modifications apportées à la charge de travail de production sont intrinsèquement risquées et doivent être effectuées en mettent l’accent sur la sécurité et la cohérence.

  • Exposition progressive : vous pouvez réduire le rayon d’explosion potentiel des problèmes dus au déploiement en adoptant un modèle de déploiement d’exposition progressive.

  • Modèles d’intégrité : les déploiements doivent réussir les contrôles d’intégrité avant que chaque phase d’exposition progressive puisse commencer.

  • Détection des problèmes : lorsque des problèmes sont détectés, le déploiement doit être immédiatement arrêté et la récupération lancée.

Les sections suivantes fournissent des recommandations détaillées sur chacun de ces points.

Sécurité et cohérence

Que vous déployiez une mise à jour dans votre code d’application, une infrastructure en tant que code (IaC), un indicateur de fonctionnalité ou une mise à jour de configuration, vous introduisez un risque pour la charge de travail. Il n’existe aucun déploiement à faible risque en production. Chaque déploiement doit suivre un modèle standard et doit être automatisé pour appliquer la cohérence et réduire le risque d’erreur humaine. Il est essentiel que la chaîne logistique et les pipelines de déploiement de votre charge de travail soient fiables, sécurisés et aient des normes de déploiement clairement définies. Traitez chaque déploiement comme un risque possible et soumettez chaque déploiement au même niveau de gestion des risques. Malgré les risques, vous devez continuer à déployer des modifications régulières à votre charge de travail. Le fait de ne pas déployer les mises à jour régulières présente d’autres risques, tels que les vulnérabilités de sécurité qui doivent être traitées par le biais des déploiements. Pour plus d’informations, consultez Recommandations pour la conception d’une chaîne logistique de développement de charge de travail.

Les petits déploiements fréquents sont préférables aux grands déploiements peu fréquents. Les petits changements sont plus faciles à résoudre lorsque des problèmes se produisent et que les déploiements fréquents aident votre équipe à renforcer la confiance dans le processus de déploiement. Il est également important que vous appreniez de la production en examinant vos processus de charge de travail lorsque vous rencontrez une anomalie pendant le déploiement. Vous pouvez trouver des faiblesses dans la conception de votre infrastructure ou le déploiement. Lorsque des problèmes se produisent pendant les déploiements, assurez-vous que les post-mortems sans reproche font partie de votre processus SDP pour capturer les leçons sur l’incident.

Déploiement progressif de l’exposition

Lorsque des problèmes de déploiement se produisent, l’objectif est de les intercepter le plus tôt possible afin de réduire l’impact sur les utilisateurs finaux. Implémentez un modèle de déploiement progressif, également appelé modèle d’exposition progressive, pour atteindre cet objectif. Les déploiements Canary sont un exemple courant d’exposition progressive. Dans ce modèle de déploiement, un petit groupe d’utilisateurs internes ou externes reçoit en premier la nouvelle fonctionnalité. Une fois que le premier groupe a exécuté la nouvelle version sans problème, la fonctionnalité est déployée sur des groupes successivement plus grands jusqu’à ce que l’ensemble de la population d’utilisateurs exécute la nouvelle version. Les indicateurs de fonctionnalité sont généralement utilisés pour activer la nouvelle version pour les utilisateurs cibles dans les déploiements canary.

Un autre modèle de déploiement courant est une approche bleu-vert. Dans ce modèle, deux ensembles identiques, ou pools, d’infrastructure de charge de travail sont déployés. Les deux pools sont en mesure de gérer une charge de production complète. Le premier pool (bleu) exécute la version actuelle du déploiement où tous les utilisateurs atterrissent. Le deuxième pool (vert) est mis à jour avec la nouvelle fonctionnalité et testé en interne. Après les tests internes, un sous-ensemble du trafic de production est acheminé du pool bleu vers le pool vert. Comme pour les déploiements de canaris, le déploiement est progressif à mesure que vous déplacez davantage du trafic vers le pool vert dans des vagues de déploiement successivement plus importantes. Une fois le déploiement terminé, le pool de mises à jour devient le pool bleu et le pool vert est prêt pour le déploiement suivant. Les deux pools sont logiquement séparés l’un de l’autre pour se protéger contre les dysfonctionnements. Vous pouvez déployer une variante du modèle bleu-vert dans une charge de travail qui utilise le modèle de conception Empreintes de déploiement en déployant sur un tampon à la fois.

Dans ces deux modèles, le temps entre chaque phase du déploiement doit être suffisamment long pour vous permettre de surveiller les métriques d’intégrité de la charge de travail. Vous devez fournir suffisamment de temps entre les groupes de déploiement pour vous assurer que les utilisateurs de différentes régions ou les utilisateurs qui effectuent différentes tâches ont le temps d’utiliser la charge de travail dans leur capacité normale. Les temps de cuisson doivent être mesurés en heures et jours plutôt qu’en minutes. Les temps de cuisson doivent également augmenter pour chaque groupe de déploiement afin que vous puissiez tenir compte des différents fuseaux horaires et modèles d’utilisation au cours de la journée.

Modèles d’intégrité

Développez un modèle d’intégrité robuste dans le cadre de votre plateforme d’observabilité et de vos stratégies de fiabilité. Votre modèle d’intégrité doit fournir une visibilité approfondie des composants et de l’intégrité globale de la charge de travail. Lors d’un déploiement, si vous recevez une alerte concernant une modification d’intégrité liée à un utilisateur final, le déploiement doit immédiatement s’arrêter et une enquête sur la cause de l’alerte doit être effectuée pour aider à déterminer la prochaine action. S’il n’y a aucun problème signalé par les utilisateurs finaux et que tous les indicateurs d’intégrité restent verts pendant toute la durée de cuisson, le déploiement doit se poursuivre. Veillez à inclure des métriques d’utilisation dans votre modèle d’intégrité pour vous assurer qu’un manque de problèmes signalés par l’utilisateur et de signaux d’intégrité négatifs ne masquent pas un problème. Pour plus d’informations, consultez Génération d’un modèle d’intégrité.

Détection des problèmes

Lorsque votre déploiement provoque un problème dans l’un des groupes de déploiement, le déploiement doit s’arrêter immédiatement. Une enquête sur la cause du problème et la gravité des effets doit être effectuée dès que l’alerte est reçue. La récupération après le problème peut inclure :

  • Restauration du déploiement en annulant les modifications apportées au déploiement et en revenir à la dernière configuration de travail connue.

  • Poursuivre le déploiement en traitant le problème au milieu du déploiement. Vous pouvez résoudre les problèmes à mi-déploiement en appliquant un correctif logiciel ou en réduisant le problème.

  • Déploiement d’une nouvelle infrastructure à l’aide de la dernière configuration de travail connue.

La restauration des modifications, en particulier les modifications apportées à la base de données, au schéma ou à d’autres modifications de composant avec état, peut être complexe. Vos instructions SDP doivent fournir des instructions claires sur la façon de gérer les modifications de données en fonction de la conception du patrimoine de données pour votre charge de travail. De même, la progression doit être gérée avec soin pour s’assurer que SDP n’est pas négligé et que le correctif logiciel ou d’autres efforts de minimisation sont exécutés en toute sécurité.

Recommandations générales en matière de SDP

  • Implémentez le contrôle de version sur vos artefacts de build pour vous assurer que vous pouvez restaurer et restaurer si nécessaire.

  • Utilisez un flux de mise en production ou une structure de branche basée sur des jonctions, qui applique une collaboration étroitement synchronisée au sein de l’équipe de développement, au lieu d’une structure gitflow ou de branchement basée sur l’environnement.

  • Automatisez autant que possible votre SDP. Pour obtenir des conseils détaillés sur l’automatisation de l’iaC et des processus d’intégration continue et de livraison continue (CI/CD), consultez Recommandations pour l’implémentation de l’automatisation.

  • Utilisez des pratiques CI pour intégrer régulièrement les modifications de code dans les référentiels. Les pratiques CI peuvent vous aider à identifier les conflits d’intégration et à réduire la probabilité de fusions volumineuses et risquées. Pour plus d’informations, consultez le guide d’intégration continue.

  • Utilisez des indicateurs de fonctionnalité pour activer ou désactiver de manière sélective de nouvelles fonctionnalités ou modifications en production. Les indicateurs de fonctionnalité peuvent vous aider à contrôler l’exposition du nouveau code et à restaurer rapidement le déploiement en cas de problèmes.

  • Déployez les modifications apportées aux environnements intermédiaires qui miroir votre environnement de production. Les environnements pratiques vous permettent de tester les modifications dans un paramètre contrôlé avant de déployer dans l’environnement actif.

  • Établissez des vérifications de prédéploiement, notamment la révision du code, les analyses de sécurité et les vérifications de conformité, pour vous assurer que les modifications sont déployées en toute sécurité.

  • Implémentez des disjoncteurs pour arrêter automatiquement le trafic vers un service qui rencontre des problèmes. Cela peut contribuer à empêcher une dégradation supplémentaire du système.

Protocoles SDP d’urgence

Établissez des protocoles prescriptifs qui définissent la façon dont votre SDP peut être ajusté pour un correctif logiciel ou pour des problèmes d’urgence tels qu’une violation de sécurité ou une exposition à des vulnérabilités. Par exemple, vos protocoles SDP d’urgence peuvent inclure :

  • Accélération de la phase de promotion et d’approbation.

  • Accélération des tests de fumée et des tests d’intégration.

  • Réduction du temps de cuisson.

Dans certains cas, l’urgence peut limiter les barrières de qualité et de test, mais les portes doivent toujours être exécutées aussi rapidement que possible comme un exercice hors bande. Veillez à définir qui peut approuver l’accélération SDP en cas d’urgence et les critères qui doivent être remplis pour que l’accélération soit approuvée. Alignez vos protocoles SDP d’urgence sur votre plan d’intervention d’urgence pour vous assurer que toutes les situations d’urgence sont gérées selon les mêmes protocoles.

Considérations

La création et la maintenance de pratiques de déploiement sécurisées sont complexes. Votre réussite dans l’implémentation complète de normes robustes dépend de la maturité de vos pratiques dans de nombreux domaines du développement de logiciels. L’utilisation de l’automatisation, de l’IaC uniquement pour les modifications d’infrastructure, de la cohérence dans les stratégies de création de branches, de l’utilisation d’indicateurs de fonctionnalité et de nombreuses autres pratiques peuvent aider à garantir un déploiement sécurisé. Utilisez ce guide pour optimiser votre charge de travail et informer vos plans d’amélioration à mesure que vos pratiques évoluent.

Animation Azure

  • Azure Pipelines et GitHub Actions prennent en charge les déploiements en plusieurs étapes à l’aide de portes d’approbation, ce qui peut vous aider à concevoir votre déploiement d’exposition progressive pour les déploiements.

  • Utilisez Azure App Service emplacements intermédiaires pour échanger facilement entre les versions de code. Les emplacements intermédiaires sont utiles pour les tests dans les environnements intermédiaires et peuvent être utilisés pour les déploiements bleu-vert.

  • Stockez et gérez les indicateurs de fonctionnalités de votre application web dans Azure App Configuration. À l’aide de ce service, vous pouvez créer, modifier et déployer des fonctionnalités dans un plan de gestion unifié.

  • Déployez des applications de charge de travail sur votre machine virtuelle à l’aide d’applications de machine virtuelle.

  • Utilisez des équilibreurs de charge Azure pour implémenter des stratégies de déploiement et exposer l’intégrité de vos applications de charge de travail à l’aide de ressources natives.

  • Utilisez l’extension Intégrité de l’application pour créer des rapports sur l’intégrité de l’application à partir d’un groupe de machines virtuelles identiques instance. L’extension sonde sur un point de terminaison d’application local et met à jour le status d’intégrité en fonction des réponses TCP/HTTP(S) reçues de l’application.

  • Utilisez Azure Logic Apps pour créer une nouvelle version de l’application chaque fois qu’une mise à jour est effectuée. Azure conserve un historique des versions de l’application et peut rétablir ou promouvoir une version précédente.

  • De nombreux services Azure Database fournissent des fonctionnalités de restauration à un instant dans le temps qui peuvent vous aider à effectuer une restauration. Les services qui prennent en charge la restauration à un instant dans le temps sont les suivants :

Exemple

Pour obtenir un exemple d’utilisation de ce modèle de déploiement, consultez le guide d’architecture du déploiement bleu-vert de clusters Azure Kubernetes Service aks (AKS).

Liste de contrôle de l’excellence opérationnelle

Reportez-vous à l’ensemble complet de recommandations.