Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
| eadl:bloc4:fm4:td4 [2026/06/25 02:36] – jcheron | eadl:bloc4:fm4:td4 [2026/06/25 13:14] (Version actuelle) – [8. Pourquoi systemd plutôt que nohup] jcheron | ||
|---|---|---|---|
| Ligne 60: | Ligne 60: | ||
| <WRAP round question> | <WRAP round question> | ||
| - | Questions de compréhension : | + | Ce fichier sera commité dans Git avec le reste du code source. |
| - | * Pourquoi le mot de passe en clair dans ce fichier | + | * Quelles sont les conséquences concrètes si un dépôt contenant |
| - | * Que se passe-t-il si ce fichier est commité dans Git ? | + | * Un attaquant qui récupère ce fichier a-t-il accès à la base de données directement ? Quels autres éléments lui manquent-il |
| - | * Quel service AWS permet de corriger cette situation | + | * Pourquoi externaliser ce secret dans Secrets Manager ne suffit pas si le code qui le récupère est lui-même mal sécurisé |
| </ | </ | ||
| ===== 2. Build de l' | ===== 2. Build de l' | ||
| - | Le build se fait sur le poste de travail. L'EC2 ne reçoit que le jar final. | + | Le fichier Maven minimal pour construire |
| Fichier : '' | Fichier : '' | ||
| Ligne 118: | Ligne 118: | ||
| <WRAP round todo> | <WRAP round todo> | ||
| - | Compiler l' | + | Compiler l' |
| <sxh bash> | <sxh bash> | ||
| Ligne 129: | Ligne 129: | ||
| <WRAP round question> | <WRAP round question> | ||
| - | Pourquoi utilise-t-on | + | Dans un pipeline CI/CD en production, ignorer les tests avec '' |
| - | Dans quel cas ne faudrait-il pas ignorer les tests ? | + | * Dans quelle situation précise serait-il acceptable de l' |
| + | * Quels types de tests seraient les plus critiques à conserver pour une application qui manipule une base de données | ||
| </ | </ | ||
| Ligne 137: | Ligne 138: | ||
| Avant d' | Avant d' | ||
| - | |||
| - | Le jar est compilé sur le poste de travail. Avant de le copier sur l'EC2, il faut s' | ||
| <WRAP round todo> | <WRAP round todo> | ||
| - | Étape 1 : Vérifier que Java est installé sur l' | + | Copier le jar sur l' |
| - | + | ||
| - | <sxh bash> | + | |
| - | ssh -i ~/ | + | |
| - | + | ||
| - | # Sur l' | + | |
| - | java -version | + | |
| - | </ | + | |
| - | + | ||
| - | Si Java n'est pas installé : | + | |
| - | + | ||
| - | <sxh bash> | + | |
| - | # Sur l' | + | |
| - | sudo yum install -y java-17-amazon-corretto | + | |
| - | + | ||
| - | # Vérifier l' | + | |
| - | java -version | + | |
| - | + | ||
| - | # Quitter la session | + | |
| - | exit | + | |
| - | </ | + | |
| - | + | ||
| - | Étape 2 : Copier le jar sur l' | + | |
| <sxh bash> | <sxh bash> | ||
| Ligne 171: | Ligne 148: | ||
| </ | </ | ||
| - | Étape 3 : Se connecter à l' | + | Se connecter à l' |
| <sxh bash> | <sxh bash> | ||
| Ligne 185: | Ligne 162: | ||
| <WRAP round question> | <WRAP round question> | ||
| - | Questions d'analyse : | + | Sur un système Linux, les arguments passés à un processus sont visibles via ''ps aux'' |
| - | * Quels sont les problèmes concrets | + | * Quelle est la conséquence concrète |
| - | * Que se passe-t-il si l' | + | * Cette méthode de déploiement crée une dépendance forte entre le déploiement et la présence d'un opérateur humain. Quels risques cela introduit-il à l' |
| - | * Pourquoi | + | |
| </ | </ | ||
| Ligne 201: | Ligne 177: | ||
| <WRAP round question> | <WRAP round question> | ||
| - | Analysez l' | + | Avant de chercher la solution |
| - | * Pourquoi l'application ne peut-elle pas se connecter à '' | + | * L'erreur indique |
| - | * Quelle valeur devrait remplacer | + | * Listez les couches réseau à vérifier |
| - | * Comment | + | |
| - | Commande utile pour tester la connectivité réseau : | + | Commande utile pour tester la connectivité réseau |
| <sxh bash> | <sxh bash> | ||
| - | # Depuis l' | ||
| nc -zv RDS_HOST 5432 | nc -zv RDS_HOST 5432 | ||
| </ | </ | ||
| Ligne 220: | Ligne 194: | ||
| On automatise maintenant le déploiement pour qu'il soit reproductible. | On automatise maintenant le déploiement pour qu'il soit reproductible. | ||
| - | |||
| - | Ansible se connecte à l'EC2 via SSH depuis le poste de travail. Il installe Java si nécessaire, | ||
| Fichier : '' | Fichier : '' | ||
| - | < | + | < |
| [web] | [web] | ||
| EC2_IP ansible_user=ec2-user ansible_ssh_private_key_file=~/ | EC2_IP ansible_user=ec2-user ansible_ssh_private_key_file=~/ | ||
| Ligne 230: | Ligne 202: | ||
| Fichier : '' | Fichier : '' | ||
| - | < | + | < |
| [defaults] | [defaults] | ||
| host_key_checking = False | host_key_checking = False | ||
| Ligne 278: | Ligne 250: | ||
| Lancer le playbook : | Lancer le playbook : | ||
| - | <sxh bash> | + | <sxh bash; |
| ansible-playbook -i ansible/ | ansible-playbook -i ansible/ | ||
| </ | </ | ||
| Ligne 284: | Ligne 256: | ||
| Vérifier que le jar est bien présent sur l' | Vérifier que le jar est bien présent sur l' | ||
| - | <sxh bash> | + | <sxh bash; |
| ssh -i ~/ | ssh -i ~/ | ||
| </ | </ | ||
| - | </ | ||
| - | |||
| - | <WRAP round question> | ||
| - | Ansible installe Java automatiquement via la tâche dédiée. Ce comportement est idempotent. | ||
| - | |||
| - | * Que se passe-t-il si on rejoue le playbook alors que Java est déjà installé ? | ||
| - | * Pourquoi l' | ||
| </ | </ | ||
| Ligne 303: | Ligne 268: | ||
| Avant de regarder la section suivante : | Avant de regarder la section suivante : | ||
| - | * Quel élément manque dans le playbook | + | * Le playbook |
| - | * Comment | + | * Ansible peut exécuter des commandes |
| - | * Pourquoi ne doit-on pas mettre | + | * Quelle différence y a-t-il entre stocker |
| </ | </ | ||
| Ligne 406: | Ligne 371: | ||
| <WRAP round question> | <WRAP round question> | ||
| - | Questions de compréhension : | + | |
| - | + | * Le service systemd démarre l' | |
| - | | + | * Si Secrets Manager retourne |
| - | * Pourquoi le fichier '' | + | |
| - | * Pourquoi ne jamais stocker ce secret dans le dépôt Git, même dans un fichier | + | |
| </ | </ | ||
| Ligne 416: | Ligne 379: | ||
| <WRAP round question> | <WRAP round question> | ||
| - | Comparez les deux approches : | + | Comparez les deux approches |
| - | <sxh bash> | + | <sxh bash; |
| # Approche nohup – à ne pas utiliser en production | # Approche nohup – à ne pas utiliser en production | ||
| nohup java -jar demo.jar & | nohup java -jar demo.jar & | ||
| </ | </ | ||
| - | * Que se passe-t-il | + | * Un processus lancé |
| - | * Que se passe-t-il avec '' | + | * systemd expose des métriques sur les redémarrages successifs d'un service. En quoi cette information est-elle utile pour distinguer un bug applicatif d'un problème d'infrastructure |
| - | * Comment systemd résout-il ces deux problèmes ? | + | |
| - | * Quelle option du service systemd gère le redémarrage automatique | + | |
| </ | </ | ||
| Ligne 432: | Ligne 393: | ||
| On automatise maintenant le build et le déploiement via GitHub Actions. | On automatise maintenant le build et le déploiement via GitHub Actions. | ||
| - | |||
| - | Le runner GitHub Actions joue le même rôle que le poste de travail : il compile le jar avec Maven et Java, puis lance Ansible pour déployer sur l'EC2. | ||
| Fichier : '' | Fichier : '' | ||
| Ligne 495: | Ligne 454: | ||
| Identifiez les problèmes avant de passer à la section suivante : | Identifiez les problèmes avant de passer à la section suivante : | ||
| - | * Quels secrets GitHub doivent être configurés pour que le pipeline fonctionne ? | + | * Le runner GitHub Actions |
| - | * Pourquoi le runner GitHub Actions | + | * L' |
| - | * Quel fichier | + | * Si la vérification de la clé SSH hôte est active, le pipeline se bloque |
| - | * Pourquoi la valeur | + | |
| </ | </ | ||
| Ligne 531: | Ligne 489: | ||
| <WRAP round question> | <WRAP round question> | ||
| - | Questions sur la sécurité des secrets | + | * Les secrets |
| - | + | * Ce pipeline | |
| - | * Pourquoi ne faut-il jamais mettre une clé AWS dans un fichier commité dans Git ? | + | |
| - | * Quelle est la différence entre un secret GitHub et une variable GitHub Actions ? | + | |
| - | * Comment s' | + | |
| </ | </ | ||
| Ligne 561: | Ligne 516: | ||
| <WRAP round question> | <WRAP round question> | ||
| - | * Que doit retourner la commande | + | * L'accès direct |
| - | * Quelle différence y a-t-il entre accéder | + | * Dans une architecture avec plusieurs instances EC2 derrière |
| - | * Pourquoi vaut-il mieux exposer uniquement | + | |
| </ | </ | ||
| Ligne 620: | Ligne 574: | ||
| Tester la connexion sans clé SSH : | Tester la connexion sans clé SSH : | ||
| - | <sxh bash> | + | <sxh bash; |
| aws ssm start-session --target INSTANCE_ID | aws ssm start-session --target INSTANCE_ID | ||
| </ | </ | ||
| Ligne 628: | Ligne 582: | ||
| <WRAP round question> | <WRAP round question> | ||
| - | Comparez les deux méthodes | + | * SSH ouvre un port entrant sur l' |
| - | + | * Un administrateur se connecte via SSM et exécute des commandes sensibles. Où ces actions sont-elles enregistrées, | |
| - | * Quelle différence y a-t-il entre une session SSH et une session SSM du point de vue réseau | + | * SSM améliore la traçabilité, |
| - | * Où sont enregistrées les sessions | + | |
| - | * Quel service | + | |
| </ | </ | ||
| Ligne 645: | Ligne 597: | ||
| Vérifier qu'une connexion SSH directe est bien refusée : | Vérifier qu'une connexion SSH directe est bien refusée : | ||
| - | <sxh bash> | + | <sxh bash; |
| ssh -i ~/ | ssh -i ~/ | ||
| # Attendu : Connection refused ou timeout | # Attendu : Connection refused ou timeout | ||
| Ligne 652: | Ligne 604: | ||
| Vérifier que Session Manager fonctionne toujours : | Vérifier que Session Manager fonctionne toujours : | ||
| - | <sxh bash> | + | <sxh bash; |
| aws ssm start-session --target INSTANCE_ID | aws ssm start-session --target INSTANCE_ID | ||
| </ | </ | ||
| Ligne 660: | Ligne 612: | ||
| <WRAP round question> | <WRAP round question> | ||
| - | Réflexion sur la limite de l' | + | |
| - | + | * Dans une architecture sans SSH, deux alternatives à Ansible | |
| - | | + | * Plus largement, |
| - | * Ansible | + | |
| - | * Pourquoi | + | |
| - | * Dans une architecture sans SSH, quelle alternative | + | |
| </ | </ | ||
| Ligne 689: | Ligne 638: | ||
| Questions de synthèse : | Questions de synthèse : | ||
| - | * Quels sont les points faibles restants dans cette architecture | + | * La rotation automatique du secret en point 1 résout un problème de sécurité, mais crée un risque opérationnel. Lequel, et comment le playbook Ansible doit-il être adapté pour y faire face ? |
| - | * Si l' | + | * Si l' |
| - | * Comment garantir qu'un déploiement raté ne met pas l' | + | * Ce pipeline déploie en continu sur la branche |
| </ | </ | ||
| Ligne 697: | Ligne 646: | ||
| <WRAP round todo> | <WRAP round todo> | ||
| - | Mettre en place un déploiement sans interruption de service | + | Mettre en place un déploiement sans interruption de service. |
| Modifier le playbook Ansible pour : | Modifier le playbook Ansible pour : | ||
| Ligne 749: | Ligne 698: | ||
| <WRAP round question> | <WRAP round question> | ||
| - | * Pourquoi | + | * Ce déploiement réduit l' |
| - | * Comment modifier | + | * Le lien symbolique est basculé avant le redémarrage du service. Si le redémarrage échoue, dans quel état se trouve l' |
| - | * Quelle est la différence entre ce déploiement et un vrai Blue/ | + | * Sans politique de nettoyage, les répertoires de releases s' |
| </ | </ | ||