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:td2 [2026/06/14 16:07] – [3. Introduction d’un ALB] jcheron | eadl:bloc4:fm4:td2 [2026/06/14 17:07] (Version actuelle) – [6. Correction – restriction du backend] jcheron | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== TD2 – Sécurisation réseau | + | ====== TD2 – Sécurisation réseau AWS (VPC, Security Groups, ALB) ====== |
| ===== Objectifs ===== | ===== Objectifs ===== | ||
| - | - Comprendre la segmentation réseau dans AWS | + | * Comprendre la segmentation réseau dans AWS avec VPC et subnets |
| - | - Mettre en place une architecture sécurisée (ALB + backend + DB) | + | * Identifier les mauvaises pratiques de sécurité réseau |
| - | - Manipuler | + | |
| - | - Identifier et corriger une mauvaise exposition réseau | + | * Contrôler les flux réseau avec les Security Groups |
| - | - Appliquer le principe du moindre privilège | + | |
| ===== Contexte ===== | ===== Contexte ===== | ||
| - | Vous travaillez | + | Vous intervenez en tant qu' |
| - | L’infrastructure actuelle | + | L' |
| - | Problème : | + | Le déploiement a été fait rapidement pour respecter un délai. |
| - | - le backend est directement accessible depuis Internet | + | Résultat : |
| - | - la base de données est mal isolée | + | |
| - | - aucune réelle segmentation réseau | + | |
| - | Objectif métier : | + | * l' |
| + | * mais toute l' | ||
| - | Sécuriser l’infrastructure sans casser le fonctionnement | + | Un audit de sécurité interne a identifié trois problèmes critiques : |
| - | ===== 1. Analyse | + | * le port applicatif du backend est ouvert à Internet |
| + | * le port de la base de données est ouvert à Internet | ||
| + | * aucun point d' | ||
| - | <WRAP round todo> | + | Votre mission : transformer l' |
| - | Lire la configuration Terraform ci-dessous | + | |
| - | Identifier les problèmes de sécurité | + | |
| - | </ | + | |
| - | Fichier | + | ===== Architecture cible ===== |
| + | |||
| + | L' | ||
| + | |||
| + | Internet → Backend (port 80 ouvert partout) | ||
| + | Internet → DB (port 5432 ouvert partout) | ||
| + | |||
| + | L'architecture cible : | ||
| + | |||
| + | Internet → ALB (port 80) → Backend (port 80, privé) → DB (port 5432, isolée) | ||
| + | |||
| + | ===== Contraintes ===== | ||
| + | |||
| + | * L' | ||
| + | * Le backend ne doit plus être accessible directement depuis Internet | ||
| + | * La base de données ne doit être accessible que depuis le backend | ||
| + | * Tout le code est en Terraform | ||
| + | |||
| + | ===== Pré-requis ===== | ||
| + | |||
| + | * Terraform installé et configuré | ||
| + | * Credentials AWS valides | ||
| + | * Notions de base : VPC, subnet, Security Group | ||
| + | |||
| + | ===== Infrastructure de départ ===== | ||
| + | |||
| + | L' | ||
| + | |||
| + | Lire le code attentivement avant de l' | ||
| + | |||
| + | Fichier : `td2/ | ||
| <sxh js> | <sxh js> | ||
| provider " | provider " | ||
| - | region = " | + | region = " |
| } | } | ||
| + | # VPC principal | ||
| + | resource " | ||
| + | cidr_block | ||
| + | enable_dns_hostnames = true | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | # Passerelle Internet | ||
| + | resource " | ||
| + | vpc_id = aws_vpc.main.id | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | # Subnet public – AZ a | ||
| + | resource " | ||
| + | vpc_id | ||
| + | cidr_block | ||
| + | availability_zone | ||
| + | map_public_ip_on_launch = true | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | # Subnet public – AZ b (requis par l'ALB) | ||
| + | resource " | ||
| + | vpc_id | ||
| + | cidr_block | ||
| + | availability_zone | ||
| + | map_public_ip_on_launch = true | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | # Subnet privé – DB | ||
| + | resource " | ||
| + | vpc_id | ||
| + | cidr_block | ||
| + | availability_zone = " | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | # Table de routage publique | ||
| + | resource " | ||
| + | vpc_id = aws_vpc.main.id | ||
| + | |||
| + | route { | ||
| + | cidr_block = " | ||
| + | gateway_id = aws_internet_gateway.igw.id | ||
| + | } | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | resource " | ||
| + | subnet_id | ||
| + | route_table_id = aws_route_table.public.id | ||
| + | } | ||
| + | |||
| + | resource " | ||
| + | subnet_id | ||
| + | route_table_id = aws_route_table.public.id | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Fichier : `td2/ | ||
| + | <sxh js> | ||
| + | # Security Group backend – PROBLEME VOLONTAIRE | ||
| + | # Ce fichier sera modifié au cours du TD | ||
| resource " | resource " | ||
| - | name = "backend_sg" | + | name |
| + | vpc_id = aws_vpc.main.id | ||
| ingress { | ingress { | ||
| + | description = "HTTP depuis Internet" | ||
| from_port | from_port | ||
| to_port | to_port | ||
| protocol | protocol | ||
| cidr_blocks = [" | cidr_blocks = [" | ||
| + | } | ||
| + | |||
| + | egress { | ||
| + | from_port | ||
| + | to_port | ||
| + | protocol | ||
| + | cidr_blocks = [" | ||
| + | } | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| } | } | ||
| } | } | ||
| + | # Security Group DB – PROBLEME VOLONTAIRE | ||
| resource " | resource " | ||
| - | name = "db_sg" | + | name |
| + | vpc_id = aws_vpc.main.id | ||
| ingress { | ingress { | ||
| + | description = " | ||
| from_port | from_port | ||
| to_port | to_port | ||
| protocol | protocol | ||
| cidr_blocks = [" | cidr_blocks = [" | ||
| + | } | ||
| + | |||
| + | egress { | ||
| + | from_port | ||
| + | to_port | ||
| + | protocol | ||
| + | cidr_blocks = [" | ||
| + | } | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| } | } | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | Fichier : `td2/ | ||
| + | <sxh js> | ||
| + | resource " | ||
| + | ami = " | ||
| + | instance_type | ||
| + | subnet_id | ||
| + | vpc_security_group_ids = [aws_security_group.backend_sg.id] | ||
| + | |||
| + | user_data = << | ||
| + | #!/bin/bash | ||
| + | yum install -y python3 | ||
| + | python3 -m http.server 80 & | ||
| + | EOF | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | resource " | ||
| + | identifier | ||
| + | engine | ||
| + | engine_version | ||
| + | instance_class | ||
| + | allocated_storage | ||
| + | username | ||
| + | password | ||
| + | db_subnet_group_name | ||
| + | vpc_security_group_ids = [aws_security_group.db_sg.id] | ||
| + | skip_final_snapshot | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | resource " | ||
| + | name = " | ||
| + | subnet_ids = [aws_subnet.private.id, | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Commandes Terraform ===== | ||
| + | |||
| + | Fichier : `td2/ | ||
| + | <sxh bash> | ||
| + | # Initialiser le projet | ||
| + | terraform init | ||
| + | |||
| + | # Vérifier le plan sans appliquer | ||
| + | terraform plan | ||
| + | |||
| + | # Appliquer la configuration | ||
| + | terraform apply | ||
| + | |||
| + | # Récupérer les outputs | ||
| + | terraform output | ||
| + | |||
| + | # Détruire l' | ||
| + | terraform destroy | ||
| + | </ | ||
| + | |||
| + | ===== 1. Lecture du code ===== | ||
| + | |||
| + | Lire les trois fichiers avant toute manipulation. | ||
| <WRAP round question> | <WRAP round question> | ||
| - | Quels sont les deux problèmes majeurs | + | Lister |
| - | Pourquoi sont-ils critiques ? | + | |
| + | Pour chaque ressource, indiquer : | ||
| + | * son rôle | ||
| + | * le subnet dans lequel elle est placée | ||
| + | * les ports ouverts en entrée | ||
| </ | </ | ||
| - | ===== 2. Mise en pratique – Déploiement | + | <WRAP round question> |
| + | Pourquoi l'ALB nécessite-t-il deux subnets dans deux zones de disponibilité différentes ? | ||
| + | |||
| + | Quelle contrainte AWS cela reflète-t-il ? | ||
| + | </ | ||
| + | |||
| + | <WRAP round question> | ||
| + | La base de données est une instance RDS et non une instance EC2. | ||
| + | |||
| + | Quelle est la différence en termes de gestion et de sécurité ? | ||
| + | </ | ||
| + | |||
| + | ===== 2. Identification des problèmes | ||
| <WRAP round todo> | <WRAP round todo> | ||
| - | Appliquer la configuration Terraform | + | Identifier dans `security_groups.tf` |
| - | Observer | + | |
| + | Pour chaque règle : | ||
| + | * expliquer ce qu' | ||
| + | * expliquer ce qu'un attaquant pourrait faire avec cet accès | ||
| </ | </ | ||
| - | - Accéder au backend via son IP publique | + | <WRAP round question> |
| - | - Vérifier que le port 5432 est accessible | + | Le mot de passe de la base de données |
| - | <WRAP round help> | + | Quel problème cela pose-t-il ? |
| - | Pourquoi est-il dangereux que la base de données soit accessible publiquement | + | |
| + | Ce problème sera traité dans un TD ultérieur sur la gestion des secrets. | ||
| </ | </ | ||
| - | ===== 3. Introduction d’un ALB ===== | + | <WRAP round question> |
| + | La base de données RDS est placée dans un subnet group qui inclut le subnet `public_b`. | ||
| - | Objectif | + | Est-ce un problème ? Pourquoi ? |
| + | </ | ||
| + | |||
| + | ===== 3. Déploiement de l' | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Appliquer la configuration telle quelle | ||
| + | |||
| + | terraform apply | ||
| + | |||
| + | Relever les outputs suivants : | ||
| + | * IP publique de l' | ||
| + | * endpoint de la base RDS | ||
| + | </ | ||
| + | |||
| + | Fichier : `td2/ | ||
| + | <sxh js> | ||
| + | output " | ||
| + | value = aws_instance.backend.public_ip | ||
| + | description = "IP publique du backend" | ||
| + | } | ||
| + | |||
| + | output " | ||
| + | value = aws_db_instance.db.endpoint | ||
| + | description = " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Tester l' | ||
| + | |||
| + | curl http://< | ||
| + | |||
| + | Tenter une connexion à la base de données depuis votre poste : | ||
| + | |||
| + | psql -h < | ||
| + | |||
| + | Noter le résultat de chaque test. | ||
| + | </ | ||
| + | |||
| + | <WRAP round question> | ||
| + | Le backend répond-il ? | ||
| + | |||
| + | La connexion à la base de données est-elle possible depuis votre poste ? | ||
| + | |||
| + | Pourquoi ce comportement est-il problématique dans un contexte de production ? | ||
| + | </ | ||
| - | - Introduire un point d’entrée unique | + | ===== 4. Mise en place de l'ALB ===== |
| - | - Ne plus exposer directement le backend | + | |
| <WRAP round todo> | <WRAP round todo> | ||
| - | Ajouter un Application Load Balancer | + | Créer le fichier suivant sans modifier les Security Groups existants. |
| </ | </ | ||
| - | Fichier : 'alb.tf' | + | Fichier : `td2/ |
| <sxh js> | <sxh js> | ||
| + | # Security Group de l'ALB | ||
| resource " | resource " | ||
| - | name = "alb_sg" | + | name |
| + | vpc_id = aws_vpc.main.id | ||
| ingress { | ingress { | ||
| + | description = "HTTP depuis Internet" | ||
| from_port | from_port | ||
| to_port | to_port | ||
| protocol | protocol | ||
| cidr_blocks = [" | cidr_blocks = [" | ||
| + | } | ||
| + | |||
| + | egress { | ||
| + | from_port | ||
| + | to_port | ||
| + | protocol | ||
| + | cidr_blocks = [" | ||
| + | } | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| } | } | ||
| } | } | ||
| - | </ | ||
| - | <WRAP round help> | + | # Application Load Balancer |
| - | Pourquoi l’ALB peut-il être exposé publiquement contrairement au backend ? | + | resource " |
| - | </ | + | name = "td2-alb" |
| + | internal | ||
| + | load_balancer_type = " | ||
| + | security_groups | ||
| + | | ||
| - | ===== 4. Erreur volontaire – Faux sentiment de sécurité ===== | + | tags = { |
| + | Name = " | ||
| + | } | ||
| + | } | ||
| - | L’ALB a été ajouté. | + | # Target Group |
| + | resource " | ||
| + | name = " | ||
| + | port = 80 | ||
| + | protocol = " | ||
| + | vpc_id | ||
| - | Mais rien n’a été modifié côté | + | health_check { |
| + | path = "/" | ||
| + | healthy_threshold | ||
| + | unhealthy_threshold = 2 | ||
| + | interval | ||
| + | } | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| + | } | ||
| + | } | ||
| + | |||
| + | # Attachement du backend au Target Group | ||
| + | resource " | ||
| + | target_group_arn = aws_lb_target_group.backend.arn | ||
| + | target_id | ||
| + | port = 80 | ||
| + | } | ||
| + | |||
| + | # Listener HTTP | ||
| + | resource " | ||
| + | load_balancer_arn = aws_lb.main.arn | ||
| + | port = 80 | ||
| + | protocol | ||
| + | |||
| + | default_action { | ||
| + | type = " | ||
| + | target_group_arn = aws_lb_target_group.backend.arn | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| <WRAP round todo> | <WRAP round todo> | ||
| - | Tester les accès | + | Ajouter l' |
| - | - via ALB | + | |
| - | - directement | + | output " |
| + | value = aws_lb.main.dns_name | ||
| + | description = "DNS public de l'ALB" | ||
| + | } | ||
| + | |||
| + | Appliquer : | ||
| + | |||
| + | terraform apply | ||
| + | |||
| + | Tester l' | ||
| + | |||
| + | curl http://< | ||
| + | |||
| + | Tester également l' | ||
| + | |||
| + | curl http://< | ||
| </ | </ | ||
| - | <WRAP round help> | + | <WRAP round question> |
| - | Peut-on toujours accéder directement au backend | + | Les deux accès fonctionnent-ils ? |
| - | Pourquoi | + | |
| + | Qu'est-ce | ||
| + | |||
| + | L'ALB est-il suffisant seul pour sécuriser le backend | ||
| </ | </ | ||
| - | ===== 5. Correction | + | ===== 5. Erreur courante |
| - | Objectif : | + | L'ALB est en place mais le Security Group du backend n'a pas été modifié. |
| - | - autoriser uniquement le trafic venant de l’ALB | + | Le port 80 du backend est toujours ouvert sur `0.0.0.0/ |
| - | Fichier | + | <WRAP round question> |
| - | < | + | Pourquoi ajouter un ALB ne suffit-il pas à protéger le backend ? |
| + | |||
| + | Quel composant contrôle réellement les accès réseau sur une instance AWS ? | ||
| + | </ | ||
| + | |||
| + | ===== 6. Correction – restriction du backend ===== | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Modifier `security_groups.tf`. | ||
| + | |||
| + | Remplacer la règle ingress du Security Group `backend_sg` | ||
| + | * supprimer l'accès depuis `0.0.0.0/0` | ||
| + | * autoriser uniquement le trafic depuis le Security Group de l'ALB | ||
| + | </ | ||
| + | |||
| + | Fichier : `td2/ | ||
| + | < | ||
| resource " | resource " | ||
| - | name = "backend_sg" | + | name |
| + | vpc_id = aws_vpc.main.id | ||
| ingress { | ingress { | ||
| + | description | ||
| from_port | from_port | ||
| to_port | to_port | ||
| Ligne 143: | Ligne 508: | ||
| security_groups = [aws_security_group.alb_sg.id] | security_groups = [aws_security_group.alb_sg.id] | ||
| } | } | ||
| - | } | ||
| - | </ | ||
| - | <WRAP round todo> | + | egress { |
| - | Appliquer la correction | + | |
| - | Tester les accès | + | |
| - | </WRAP> | + | |
| + | cidr_blocks = [" | ||
| + | } | ||
| - | <WRAP round help> | + | tags = { |
| - | Pourquoi utilise-t-on un Security Group comme source plutôt qu’une IP ? | + | Name = " |
| - | </ | + | } |
| - | + | } | |
| - | ===== 6. Correction – Isolation de la base de données ===== | + | |
| - | + | ||
| - | Objectif : | + | |
| - | + | ||
| - | - autoriser uniquement le backend à accéder à la DB | + | |
| - | Fichier : ' | ||
| - | <sxh hcl> | ||
| resource " | resource " | ||
| - | name = "db_sg" | + | name |
| + | vpc_id = aws_vpc.main.id | ||
| ingress { | ingress { | ||
| + | description | ||
| from_port | from_port | ||
| to_port | to_port | ||
| protocol | protocol | ||
| security_groups = [aws_security_group.backend_sg.id] | security_groups = [aws_security_group.backend_sg.id] | ||
| + | } | ||
| + | |||
| + | egress { | ||
| + | from_port | ||
| + | to_port | ||
| + | protocol | ||
| + | cidr_blocks = [" | ||
| + | } | ||
| + | |||
| + | tags = { | ||
| + | Name = " | ||
| } | } | ||
| } | } | ||
| Ligne 176: | Ligne 547: | ||
| <WRAP round todo> | <WRAP round todo> | ||
| - | Appliquer | + | Appliquer |
| - | Tester | + | |
| + | terraform apply | ||
| + | |||
| + | Tester | ||
| + | |||
| + | # Via l'ALB – doit fonctionner | ||
| + | curl http://< | ||
| + | |||
| + | # Direct – doit échouer | ||
| + | curl http://< | ||
| </ | </ | ||
| - | <WRAP round help> | + | <WRAP round question> |
| - | Pourquoi ne doit-on jamais exposer une base de données sur Internet | + | L' |
| + | |||
| + | L' | ||
| + | |||
| + | Que se passe-t-il si le Health Check de l'ALB échoue ? | ||
| + | Comment vérifier l' | ||
| </ | </ | ||
| - | ===== 7. Réflexion globale | + | ===== 7. Problème potentiel – Health Check ===== |
| - | <WRAP round help> | + | Après modification des Security Groups, l'ALB peut afficher le backend comme " |
| - | Décrire les flux réseau | + | |
| - | Quels flux sont explicitement interdits | + | <WRAP round question> |
| + | Expliquer ce qu'est un Health Check d' | ||
| + | |||
| + | Quel flux réseau | ||
| + | |||
| + | Depuis quelle source arrive ce flux sur le backend | ||
| </ | </ | ||
| - | ===== 8. Extension ===== | + | <WRAP round question> |
| + | Si le backend est " | ||
| + | |||
| + | Le service devient indisponible même si le backend fonctionne. | ||
| + | |||
| + | Quelle règle dans le Security Group du backend pourrait causer ce blocage ? | ||
| + | </ | ||
| <WRAP round todo> | <WRAP round todo> | ||
| - | Ajouter une règle HTTPS (port 443) sur l’ALB | + | Vérifier dans la console AWS : |
| + | * aller dans EC2 > Target Groups | ||
| + | * vérifier le statut de l' | ||
| + | * lire le message d' | ||
| </ | </ | ||
| - | <WRAP round help> | + | ===== 8. Diagnostic et correction ===== |
| - | Pourquoi HTTPS est indispensable en production | + | |
| + | <WRAP round todo> | ||
| + | Si le Health Check échoue, identifier la cause : | ||
| + | |||
| + | * le port 80 est-il bien ouvert depuis le Security Group de l' | ||
| + | * le service python3 est-il démarré sur l' | ||
| + | * la règle egress de l'ALB permet-elle les réponses ? | ||
| + | |||
| + | Corriger la règle manquante et réappliquer. | ||
| </ | </ | ||
| - | ===== Challenge final ===== | + | ===== 9. Vérification finale |
| - | Objectif | + | <WRAP round todo> |
| + | Réaliser les tests suivants et noter les résultats dans un tableau | ||
| - | - vérifier que toute l’architecture respecte | + | * accès HTTP via l'ALB → attendu : 200 |
| + | * accès HTTP direct au backend → attendu : timeout ou refus | ||
| + | * connexion PostgreSQL depuis votre poste → attendu : timeout ou refus | ||
| + | * connexion PostgreSQL depuis | ||
| + | </ | ||
| + | |||
| + | <WRAP round question> | ||
| + | Comment vérifier qu'un flux est bien bloqué et non juste lent ? | ||
| + | |||
| + | Quelle différence entre un timeout et un Connection refused en termes de Security Group ? | ||
| + | </ | ||
| + | |||
| + | ===== 10. Extension – déplacement | ||
| + | |||
| + | Le backend a une IP publique car il est dans un subnet public. | ||
| + | |||
| + | Ce n'est pas nécessaire si l'ALB gère tout le trafic entrant. | ||
| <WRAP round todo> | <WRAP round todo> | ||
| - | Vérifier | + | Modifier `instances.tf` pour déplacer le backend dans le subnet privé |
| - | - aucun accès direct Internet → backend | + | subnet_id = aws_subnet.private.id |
| - | - aucun accès direct Internet → DB | + | |
| - | - seuls les flux nécessaires sont autorisés | + | Supprimer également le `map_public_ip_on_launch` implicite. |
| + | |||
| + | Appliquer et vérifier que l'ALB continue de fonctionner. | ||
| </ | </ | ||
| - | <WRAP round help> | + | <WRAP round question> |
| - | Si un attaquant compromet | + | Le backend n'a plus d'IP publique. |
| - | Pourquoi | + | |
| + | Est-il encore accessible depuis Internet ? | ||
| + | |||
| + | Comment | ||
| + | |||
| + | Quel composant réseau manque pour que le backend puisse faire des appels sortants (mises | ||
| + | </ | ||
| + | |||
| + | ===== Challenge final ===== | ||
| + | |||
| + | Objectif : valider l' | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Dessiner l' | ||
| + | * les subnets (public_a, public_b, private) | ||
| + | * les composants dans chaque subnet | ||
| + | * les Security Groups et leurs règles | ||
| + | * les flux autorisés avec les ports | ||
| + | </ | ||
| + | |||
| + | <WRAP round todo> | ||
| + | Répondre aux questions suivantes par écrit : | ||
| + | |||
| + | * Quel composant est le seul point d' | ||
| + | * Quelles ressources ne sont plus accessibles directement depuis Internet ? | ||
| + | * Quel principe | ||
| + | * Que se passe-t-il si l'ALB est supprimé ? L' | ||
| </ | </ | ||
| Ligne 223: | Ligne 675: | ||
| <WRAP round todo> | <WRAP round todo> | ||
| - | Ajouter | + | Ajouter |
| + | |||
| + | resource " | ||
| + | ami = " | ||
| + | instance_type | ||
| + | subnet_id | ||
| + | vpc_security_group_ids = [aws_security_group.backend_sg.id] | ||
| + | ... | ||
| + | } | ||
| + | |||
| + | Attacher cette instance au même Target Group. | ||
| </ | </ | ||
| - | <WRAP round help> | + | <WRAP round question> |
| - | Quel est l’intérêt | + | Quels sont les avantages d' |
| + | |||
| + | Répondre selon deux axes : | ||
| + | * disponibilité : que se passe-t-il si une instance tombe ? | ||
| + | * sécurité : l' | ||
| </ | </ | ||