eadl:bloc4:fm4:td2

Ceci est une ancienne révision du document !


TD2 – Sécurisation réseau AWS (VPC, Subnets, Security Groups, flux applicatifs)

  • Comprendre l’architecture réseau AWS (VPC, subnets, routage)
  • Identifier des failles réseau dans une infrastructure existante
  • Mettre en place une segmentation réseau (public / privé)
  • Contrôler les flux entre services (web, backend, base de données)
  • Appliquer le principe du moindre accès réseau avec Terraform

Vous intervenez dans une startup.

Une application a été déployée rapidement pour un MVP.

Architecture actuelle :

  • un serveur web accessible depuis Internet
  • un backend applicatif
  • une base de données

Tout fonctionne, mais aucun design réseau n’a été pensé.

Un audit de sécurité impose :

  • isolation des composants
  • suppression des accès inutiles
  • contrôle strict des flux réseau

Reconcevoir l’architecture réseau pour :

  • exposer uniquement le serveur web
  • isoler le backend
  • sécuriser la base de données
  • contrôler précisément les flux entre les composants
  • Le serveur web doit rester accessible en HTTP
  • Le backend ne doit pas être accessible depuis Internet
  • La base de données ne doit jamais être exposée
  • Chaque flux doit être justifié
  • Toute la configuration doit être faite avec Terraform

Fichier : `network/main.tf`

provider "aws" {
  region = "eu-west-1"
}

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}

resource "aws_subnet" "main" {
  vpc_id     = aws_vpc.main.id
  cidr_block = "10.0.1.0/24"
}

resource "aws_instance" "web" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
  subnet_id     = aws_subnet.main.id
}

resource "aws_instance" "backend" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
  subnet_id     = aws_subnet.main.id
}

resource "aws_instance" "db" {
  ami           = "ami-123456"
  instance_type = "t2.micro"
  subnet_id     = aws_subnet.main.id
}

resource "aws_security_group" "all_open" {
  name   = "all-open"
  vpc_id = aws_vpc.main.id

  ingress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}

Commandes utiles :

Fichier : `commandes/terraform.txt`

terraform init
terraform plan
terraform apply
terraform destroy

Identifier les problèmes de sécurité présents dans cette infrastructure.

Indiquer :

  • les problèmes critiques
  • les problèmes de conception

Quels sont les flux nécessaires au fonctionnement ?

Lister précisément :

  • Internet → Web
  • Web → Backend (port ?)
  • Backend → DB (port ?)

Quels flux doivent être interdits ?

Modifier l’infrastructure pour créer :

  • 1 subnet public (web)
  • 1 subnet privé (backend + db)

Permettre :

  • accès Internet au serveur web
  • accès sortant pour le backend (updates)

Ajouter les composants nécessaires.

Pourquoi le backend ne doit-il pas avoir d’IP publique ?

Créer 3 Security Groups :

  • web-sg
  • backend-sg
  • db-sg

Définir les règles suivantes :

  • web :
    1. HTTP depuis Internet
  • backend :
    1. accessible uniquement depuis web
  • db :
    1. accessible uniquement depuis backend

Un développeur propose la règle suivante pour le backend :

  • autoriser le port 8080 depuis 0.0.0.0/0

Pourquoi cette règle est dangereuse ?

Dans quel cas peut-elle sembler fonctionner correctement ?

Après mise en place des règles :

  • le site web fonctionne
  • mais l’application ne répond plus correctement

Que vérifier en priorité ?

  • Security Groups ?
  • ports ?
  • flux autorisés ?

Corriger les règles pour :

  • restaurer la communication web → backend
  • restaurer backend → DB

Ajouter :

  • un NAT Gateway
  • permettre au backend de faire des mises à jour sans être exposé

Quelle différence entre :

  • Internet Gateway
  • NAT Gateway ?

Pourquoi utiliser :

  • un Security Group par service ?
  • des règles basées sur des Security Groups plutôt que des IP ?

Objectif :

  • Web accessible depuis Internet (port 80)
  • Backend inaccessible depuis Internet
  • DB inaccessible depuis Internet
  • Backend accessible uniquement depuis Web
  • DB accessible uniquement depuis Backend

Implémenter l’architecture complète.

Vérifier que :

  • aucun flux inutile n’est autorisé
  • chaque règle est justifiée

Ajouter :

  • un second serveur web
  • un Load Balancer

Pourquoi un Load Balancer améliore aussi la sécurité ?

  • eadl/bloc4/fm4/td2.1781434766.txt.gz
  • Dernière modification : il y a 6 semaines
  • de jcheron