Table of Contents
Pourquoi les pratiques de sauvegarde standard tombent court pour Nx Monorepos
Nx a transformé la façon dont les équipes de développement construisent et maintiennent des applications à grande échelle en fournissant une boîte à outils sophistiquée pour la gestion monorepo. Sa capacité à comprendre les dépendances des projets, les résultats du calcul du cache et l'exécution de tâches distribuées orchestrées améliore considérablement la productivité du développeur.
Les données dans un espace de travail Nx s'étendent bien au-delà du code source. Il comprend la configuration du graphique de projet stocké dans nx.json, les définitions individuelles project.json, le cache de calcul dans .nx/cache, les définitions de variables d'environnement et les configurations sophistiquées de pipelines CI/CD qui utilisent les commandes de Nx touchées. Un cache compromis ou perdu peut conduire à des heures de reconstructions inutiles dans toute une équipe.
Ce guide fournit un cadre complet pour la sauvegarde des données et la sécurité spécifiquement adaptés aux espaces de travail Nx. En comprenant le paysage de risque unique et en mettant en œuvre des stratégies de défense en profondeur, les équipes peuvent protéger leur propriété intellectuelle, maintenir la vitesse de développement et assurer la continuité des activités face aux suppressions accidentelles, aux défaillances matérielles ou aux attaques malveillantes.
Le paysage à risque unique des projets Nx
Avant de plonger dans des solutions, il est essentiel de comprendre exactement ce qui est en péril dans un monorepo Nx. La nature interconnectée du monorepos signifie qu'une défaillance dans une zone peut s'accumuler dans l'ensemble de l'écosystème du projet.
Code source et historique de la version
La base de tout projet Nx est son dépôt Git. Cela inclut chaque ligne de code source, chaque message de commit et chaque branche. La perte de ces données représente un échec catastrophique pour les équipes de développement. Cependant, les dépôts Git eux-mêmes ne sont pas à l'abri de la corruption, en particulier dans les grands monorepos avec un historique étendu.
Espace de travail et configuration du projet
Le fichier nx.json définit la configuration globale de l'espace de travail Nx, y compris la version de Nx utilisée, les paramètres par défaut du cache, les options de générateur et les configurations des coureurs de tâches. Chaque projet individuel au sein du monorepo a également son propre project.json fichier définissant les cibles, les entrées, les sorties et les configurations. Ces fichiers forment l'épine dorsale de la façon dont Nx comprend et interagit avec la base de code. Si ces fichiers sont corrompus ou supprimés accidentellement, Nx perd la capacité de déterminer avec précision la structure et les dépendances du projet, rendant la commande affectée peu fiable et potentiellement brisant les pipelines CI/CD.
La Cache de calcul
Lorsqu'un développeur ou un pipeline CI exécute une commande build, test ou lint, Nx stocke la sortie et les entrées qui l'ont produite. Lors des essais ultérieurs, si les entrées n'ont pas changé, Nx rejoue la sortie cache, en économisant beaucoup de temps. Ce cache est stocké localement dans .nx/cache et en option dans un cache à distance via Nx Cloud ou des solutions de stockage cloud personnalisées. Perdre le cache ne brise pas le code, mais il dégrade gravement les performances. Après une perte de cache, chaque développeur et chaque pipeline CI doivent reconstruire le cache à partir de zéro, ce qui entraîne un gaspillage des ressources et des boucles de rétroaction.
Variables et secrets d'environnement
Les applications modernes reposent fortement sur des variables d'environnement pour la configuration, les clés API, les identifiants de base de données et d'autres informations sensibles. Nx fournit des mécanismes intégrés pour la gestion des variables d'environnement, tels que .env, .env.local et des fichiers de configuration spécifiques au projet.
Configuration du pipeline CI/CD
Les espaces de travail Nx sont souvent étroitement intégrés avec les pipelines CI/CD qui tirent parti de la commande affectée pour construire et tester uniquement les projets qui ont changé. Les fichiers de configuration du pipeline eux-mêmes (p. ex. ].github/workflows/*.yml, Jenkinsfile[, .gitlab-ci.yml) font partie du monorepo et doivent être sauvegardés avec le code source.
Bâtir une stratégie de sauvegarde globale pour les espaces de travail Nx
Une stratégie de sauvegarde robuste pour les projets Nx doit porter sur tous les types de données décrits ci-dessus. L'approche doit être stratifiée, automatisée et testée régulièrement pour s'assurer que la récupération est possible au besoin.
Sécuriser le dépôt Git avec la redondance
Le dépôt Git est la seule source de vérité pour l'espace de travail Nx. La protection nécessite plus qu'un dépôt distant unique sur une plate-forme comme GitHub, GitLab ou Bitbucket. Bien que ces plateformes offrent une certaine redondance, les équipes devraient implémenter la règle de sauvegarde 3-2-1 : trois copies des données, sur deux supports différents, avec une copie stockée hors site.
Pour les dépôts Git, cela signifie le maintien des branches et de l'historique primaires sur la plate-forme distante, un clone ou une sauvegarde sur un serveur interne séparé, et une sauvegarde supplémentaire sur un service de stockage d'objets immuable comme AWS S3 ou Google Cloud Storage. Des outils comme git bundle ou git clone --mirror peuvent être utilisés pour créer des sauvegardes complètes et portables du dépôt. Ces sauvegardes doivent être automatisées et exécutées régulièrement pour garantir une perte minimale de données en cas d'échec.
Les plateformes comme GitHub fournissent des solutions de sauvegarde officielles telles que GitHub Enterprise Backup pour les instances auto-hosties. Pour les dépôts hébergés dans le cloud, envisagez d'utiliser des services de sauvegarde tiers spécialisés dans la protection des données de SaaS, ou écrivez des scripts personnalisés en utilisant l'API de la plate-forme pour exporter périodiquement des données de dépôt.
Gestion et préservation des fichiers de configuration Nx
Les fichiers nx.json et project.json sont contrôlés en version, ce qui est la première ligne de défense. Cependant, les équipes doivent également s'assurer que ces fichiers sont inclus dans la portée de sauvegarde plus large.
En plus de sauvegarder le dépôt, exportez l'état actuel du fichier nx.json et stockez-le séparément dans un système de gestion de configuration sécurisé. Cela fournit un retour en arrière au cas où la restauration de Git est retardée ou complexe. Documentez les paramètres du noyau dans le fichier nx.json, y compris la configuration du coureur de tâches, les opérations cacheables et les dépendances de cible, de sorte que l'espace de travail puisse être recréé manuellement si nécessaire.
Considérations stratégiques en matière de cache et de cache
Le cache de calcul Nx est critique en termes de performances mais la régénération est possible à partir du code source. Par conséquent, la stratégie de sauvegarde du cache diffère de celle du code source. Les répertoires de cache locaux (.nx/cache) sont éphémères par nature et n'ont pas besoin d'être sauvegardés au sens traditionnel.
Si votre équipe utilise Nx Cloud, le cache est géré et sauvegardé par l'infrastructure Nx Cloud, offrant une grande durabilité et disponibilité. Pour les équipes qui hébergent un cache à distance en utilisant des solutions comme Redis ou le stockage d'objets cloud, il est important de configurer des politiques de sauvegarde appropriées pour cette infrastructure. Assurez-vous que le stockage du cache à distance a une redondance activée et des instantanés réguliers configurés pour empêcher la perte de données.
La documentation officielle Nx sur le cache fournit des conseils détaillés sur le fonctionnement du cache et la façon de le configurer pour une performance et une fiabilité optimales.
Appliquer la règle 3-2-1 à Nx Monorepos
La règle de sauvegarde 3-2-1 est un principe éprouvé dans le temps qui s'applique directement aux projets Nx. Les trois copies de données comprennent la copie de travail principale utilisée par les développeurs, le dépôt distant sur la plate-forme d'hébergement, et une sauvegarde dédiée stockée indépendamment. Les deux différents types de médias pourraient être le stockage de serveur principal et un service de stockage externe du cloud. La copie hors site protège contre les catastrophes à l'échelle du site telles que les attaques d'incendie, d'inondation ou de ransomware qui ciblent l'infrastructure locale.
La mise en œuvre de cette règle pour Nx nécessite l'identification de toutes les sources de données dans le monorepo. La copie principale est le dépôt Git avec toutes les branches et étiquettes. La deuxième copie est le dépôt distant sur GitHub ou GitLab. La troisième copie devrait être un clone git --mirror stocké dans une région géographique ou un fournisseur de cloud séparé.
Automatiser les sauvegardes avec l'intégration CI/CD
Les sauvegardes ne devraient jamais être des processus manuels. Elles sont sujettes à l'erreur humaine et à l'incohérence. Au lieu de cela, intégrer l'automatisation de sauvegarde directement dans le pipeline CI/CD qui supporte déjà l'espace de travail Nx.
Cette tâche de sauvegarde peut effectuer plusieurs tâches. Elle peut cloner le dépôt en utilisant une option miroir pour capturer toutes les branches et étiquettes. Elle peut exporter l'état actuel des fichiers de configuration de l'espace de travail vers un seau de stockage sécurisé. Elle peut générer une archive de l'état cache distant, le cas échéant.
Les archives de sauvegarde sont stockées dans un stockage immuable avec version activée. Cela fournit une protection contre les ransomwares et la suppression accidentelle, car les anciennes versions de la sauvegarde peuvent être restaurées même si l'emplacement de sauvegarde primaire est compromis.
Essai du processus de restauration
Une sauvegarde qui n'a jamais été testée pour la restauration n'est pas une sauvegarde. C'est une croyance. Les équipes doivent simuler régulièrement des scénarios de catastrophe pour vérifier que leur stratégie de sauvegarde fonctionne comme prévu.
Pendant ces exercices, mesurez le temps nécessaire pour restaurer le dépôt, valider l'intégrité des fichiers de configuration et reconstruire le cache. Utilisez ces mesures pour affiner le processus de sauvegarde et identifier les faiblesses. Documentez les étapes de restauration dans un roundbook afin que tout membre de l'équipe puisse les exécuter lors d'un incident réel. L'objectif est de minimiser l'objectif de temps de récupération et de s'assurer que l'équipe peut revenir à la productivité complète le plus rapidement possible après un événement de perte de données.
Mise en œuvre d'une première approche en matière de sécurité pour les projets Nx
La sécurité proactive vise à empêcher que ce scénario ne se produise en premier lieu. Les espaces de travail Nx, avec leurs graphiques de dépendance complexes et leurs permissions CI/CD élevées, présentent une surface d'attaque unique qui doit être gérée avec soin.
Contrôle de l'accès et principe du moindre privilège
Le contrôle de la lecture, de la modification et de la suppression des données dans l'espace de travail Nx est le fondement de la sécurité. Mettre en place des contrôles d'accès basés sur le rôle sur la plateforme d'hébergement du dépôt pour s'assurer que seul le personnel autorisé peut pousser le code, modifier les branches ou accéder aux fichiers de configuration sensibles.
Le principe du moins de privilège doit guider toutes les décisions d'accès. Les développeurs n'ont généralement besoin d'avoir accès à l'écriture que pour les projets spécifiques qu'ils possèdent dans le monorepo. Utilisez les permissions de niveau d'équipe ou de projet pour restreindre l'accès. Les fichiers nx.json et de configuration au niveau racine devraient avoir un accès limité à l'écriture pour empêcher les changements accidentels ou malveillants à la structure de l'espace de travail.
Les règles de protection de la branche sont un autre contrôle essentiel. Exiger des examens de la demande de tirage et des vérifications d'état avant de fusionner dans les branches principales. Restreindre la capacité de forcer la poussée, car cela peut réécrire l'historique et potentiellement contourner les contrôles de sécurité. Activer les engagements signés pour assurer l'intégrité et l'authenticité de chaque changement apporté au dépôt.
Sécuriser l'intégration du pipeline CI/CD et du nuage Nx
Le pipeline CI/CD est une cible de grande valeur pour les attaquants car il a souvent accès aux identifiants de production, aux clés de déploiement et au cache à distance. L'intégration de Nx avec les systèmes CI/CD amplifie ce risque, car les pipelines fonctionnent fréquemment avec des permissions élevées pour exécuter les commandes et déployer les applications touchées.
Sécurisez le pipeline en utilisant des identifiants et des comptes de service à courte durée de vie avec des permissions minimales. Évitez de stocker des secrets à longue durée de vie dans les fichiers de configuration du pipeline. Au lieu de cela, utilisez les fonctionnalités de gestion des secrets fournies par la plate-forme CI/CD (p. ex., GitHub Actions Secrets, GitLab CI/CD Variables) ou intégrez-vous à une voûte dédiée aux secrets.
Vérifier régulièrement la configuration du pipeline pour s'assurer qu'aucun secret n'est accidentellement exposé dans les grumes ou les artefacts de construction. Les pipelines Nx génèrent souvent des grumes extensives à des fins de débogage, et ces grumes doivent être désinfectées pour éviter les fuites de justificatifs.
La gestion efficace des variables d'environnement est une partie critique de la sécurité CI/CD. Nx fournit des conseils clairs sur la façon dont les variables d'environnement sont résolues, y compris leur ordre de priorité.
Gestion de la dépendance et sécurité de la chaîne d'approvisionnement
Les espaces de travail Nx contiennent souvent des centaines ou des milliers de dépendances dans plusieurs projets. Chaque dépendance représente une vulnérabilité potentielle de la chaîne d'approvisionnement.
Mettre en œuvre une vérification automatisée de la dépendance dans le cadre du pipeline Nx. Utiliser des outils comme npm audit[, yarn audit[, ou pnpm audit[ pour analyser les vulnérabilités connues dans l'arborescence de la dépendance. Intégrer ces audits dans le flux de travail nx affecté de sorte que seules les dépendances modifiées soient réévaluées à chaque course, en maintenant la vitesse du pipeline tout en assurant la sécurité.
Générer une facture logicielle de matériaux pour chaque projet dans le monorepo. Ceci fournit un inventaire complet de toutes les dépendances, y compris les dépendances transitoires, qui est essentiel pour la gestion de la vulnérabilité et la réponse incidente. Des outils comme syft ou cyclonedx-bom peuvent être intégrés dans le pipeline de construction pour générer automatiquement ces documents.
Appliquer le principe de sécurité de la chaîne d'approvisionnement aux outils et aux extensions utilisés dans l'écosystème Nx. Installez uniquement les plugins et les générateurs Nx à partir de sources fiables. Revoyez les autorisations demandées par chaque plugin avant de l'ajouter à l'espace de travail. Enlever les plugins et dépendances inutilisés pour réduire la surface d'attaque. Le projet OWASP Supply Chain Security fournit des lignes directrices complètes pour gérer efficacement ces risques.
Crochets et balayages secrets pré-engagement
Empêcher l'entrée de données sensibles dans le dépôt est beaucoup plus facile que le nettoyer après qu'il ait été commis. L'historique Git contient chaque version de chaque fichier, de sorte qu'une seule commit accidentelle d'un fichier de reconnaissance peut exposer des secrets indéfiniment, même si le fichier est supprimé dans un commit ultérieur.
Mettre en œuvre des crochets pré-commit qui scannent des fichiers mis en scène pour des secrets potentiels, des clés API et des fichiers de configuration qui ne devraient pas être engagés. Des outils comme git-secrets, trufflehog, ou pre-commit avec des crochets axés sur la sécurité peuvent bloquer automatiquement les commits qui contiennent des modèles correspondant à des identifiants ou des clés privées.
Ces crochets sont particulièrement importants dans les espaces de travail Nx où les fichiers variables d'environnement (.env, .env.local[, .env.production) sont couramment utilisés. Bien que Nx fournisse un modèle .gitignore[ pour ces fichiers, l'erreur humaine peut encore les conduire à être commise.
En plus des crochets pré-engagement, exécutez des scans secrets réguliers contre l'historique complet Git pour détecter les identifiants qui ont pu être commis dans le passé. De nombreuses plateformes CI/CD offrent des scans secrets intégrés, et des outils dédiés peuvent être programmés pour fonctionner sur une base hebdomadaire ou mensuelle. Si des secrets sont trouvés, faites-les tourner immédiatement et étudiez la portée de l'exposition.
Vérification du parc et surveillance continue
La sécurité n'est pas statique. Elle nécessite une surveillance continue pour détecter les menaces et y répondre en temps réel. Activer la connexion de l'audit sur la plate-forme d'hébergement du dépôt et le système CI/CD pour suivre qui accède à l'espace de travail Nx et quelles actions ils effectuent.
Surveillez les modèles inhabituels tels que les suppressions massives de branches, les changements inattendus aux règles de protection des branches ou les tentatives d'authentification ratées. Configurez des alertes pour ces événements afin que l'équipe de sécurité puisse enquêter rapidement. Dans l'espace de travail Nx lui-même, surveillez les changements au fichier nx.json ou au répertoire .nx, car des modifications non autorisées pourraient indiquer ici une tentative de compromettre le processus de construction.
L'enregistrement centralisé est essentiel pour la corrélation entre les événements de différents systèmes. Faire passer les journaux du dépôt, du pipeline CI/CD et de l'infrastructure cloud vers une plate-forme de gestion des informations et des événements de sécurité. Cela permet à l'équipe de détecter des modèles d'attaque complexes qui pourraient impliquer plusieurs systèmes, comme un compte de développeur compromis utilisé pour pousser le code malveillant et exfiltrer les données cache.
Normes de chiffrement pour les données au repos et en transit
Le chiffrement protège les données même si d'autres contrôles de sécurité échouent. Toutes les données relatives à l'espace de travail Nx doivent être chiffrées à la fois au repos et en transit. Le dépôt Git sur la plateforme d'hébergement doit être chiffré au repos en utilisant les mécanismes de chiffrement standard de la plateforme.
Les données en transit sont protégées principalement par Transport Layer Security (TLS). Assurez-vous que toutes les connexions au dépôt, au cache à distance et au système CI/CD utilisent TLS 1.2 ou plus. Pour les solutions auto-portées, configurez les certificats TLS correctement et validez leur utilisation. Évitez d'autoriser les connexions non cryptées pour tout composant de l'infrastructure Nx.
Envisager de chiffrer le répertoire de cache local sur les postes de travail développeurs. Des solutions de chiffrement à disque complet comme BitLocker ou FileVault offrent une protection de base. Si l'espace de travail Nx contient des données très sensibles, rechercher des solutions pour chiffrer le répertoire .nx. Cela garantit que même si l'ordinateur portable d'un développeur est perdu ou volé, les artefacts en cache et les données de configuration restent inaccessibles aux parties non autorisées.
Planification de la réponse aux incidents pour les espaces de travail Nx
Malgré les meilleurs contrôles de sécurité, les incidents peuvent encore se produire. Un plan d'intervention efficace réduit les dommages et accélère la récupération. Le plan devrait être adapté aux caractéristiques uniques du Nx monorepo et devrait comprendre des procédures spécifiques pour différents types d'incidents.
Si une violation de données est suspectée, la première étape consiste à isoler les systèmes touchés. Cela peut consister à révoquer les jetons d'accès, à désactiver les pipelines CI/CD et à mettre le dépôt en mode lecture seule. La stratégie de sauvegarde devient critique à ce stade. L'équipe doit être en mesure de restaurer l'espace de travail à un bon état connu à partir de sauvegardes propres.
Après le confinement, mener une enquête approfondie pour déterminer la cause fondamentale de l'incident. Examiner les journaux de vérification pour déterminer quels comptes ont été compromis et quelles mesures ont été prises. Si l'attaque a impliqué la chaîne d'approvisionnement, analyser l'arborescence de dépendance pour déterminer si des paquets malveillants ont été introduits.
La récupération consiste à restaurer l'espace de travail à partir de la plus récente sauvegarde propre, à faire tourner tous les secrets et les références, et à reconstruire le cache. Après un incident, effectuer un postmortem irréprochable pour identifier les faiblesses qui ont permis l'incident et mettre en œuvre des mesures correctives.
Conclusion : Construire une culture de sécurité et de fiabilité
La sauvegarde et la sécurité des données ne sont pas des projets ponctuels mais des engagements continus qui nécessitent une attention et une adaptation continues. Pour les équipes utilisant Nx, la complexité de l'environnement monorepo exige une approche réfléchie et en couches qui tient compte des caractéristiques uniques de l'ensemble d'outils et des flux de travail qu'il permet.
La base de cette approche est une stratégie de sauvegarde robuste qui applique la règle 3-2-1 à toutes les sources de données critiques, y compris le dépôt Git, les fichiers de configuration de l'espace de travail, et le cache de calcul. L'automatisation garantit que les sauvegardes sont cohérentes et fiables, tandis que les tests réguliers vérifient que l'équipe peut restaurer les opérations rapidement en cas de défaillance.
Du côté de la sécurité, les contrôles de défense en profondeur protègent l'espace de travail contre les accès non autorisés, les attaques de la chaîne d'approvisionnement et l'exposition accidentelle aux données. Le contrôle de l'accès, la sécurité des pipelines, la gestion de la dépendance, les crochets pré-engagements et la surveillance continue travaillent ensemble pour créer de multiples couches de protection.
En investissant dans ces pratiques, les équipes de développement non seulement protègent leur propriété intellectuelle et maintiennent la vitesse du développeur, mais elles construisent également une culture de fiabilité qui profite à l'ensemble de l'organisation. La confiance qui vient de la connaissance de l'espace de travail Nx est sécurisée et récupérable permet aux équipes de se concentrer sur ce qui compte le plus : construire un excellent logiciel.