Garden of KnowledgeApplied Sciences › Computer Science › Software › AWS
February 25, 2026

VPC — Virtual Private Cloud

Un VPC est un réseau virtuel privé dans AWS, logiquement isolé des autres réseaux AWS. Il fournit un contrôle total sur l’environnement réseau : plages d’adresses IP, sous-réseaux, tables de routage, passerelles.

Concepts de base réseau§

Notation CIDR§

CIDR (Classless Inter-Domain Routing) note un bloc d’adresses IP sous la forme adresse/préfixe.

10.0.0.0/16 → 65 536 adresses (10.0.0.0 à 10.0.255.255)
10.0.1.0/24 → 256 adresses (10.0.1.0 à 10.0.1.255)
10.0.1.0/28 → 16 adresses (10.0.1.0 à 10.0.1.15)

/préfixe → nombre d'adresses = 2^(32 - préfixe)
/16 → 2^16 = 65 536
/24 → 2^8  = 256
/28 → 2^4  = 16

AWS réserve 5 adresses par sous-réseau : réseau (.0), routeur VPC (.1), DNS (.2), futur (.3), broadcast (.255).

Plages d’adresses privées (RFC 1918)§

10.0.0.0/8      → 10.0.0.0 à 10.255.255.255
172.16.0.0/12   → 172.16.0.0 à 172.31.255.255
192.168.0.0/16  → 192.168.0.0 à 192.168.255.255

Recommandation AWS : utiliser 10.0.0.0/16 pour le VPC et /24 pour les sous-réseaux.

Composants d’un VPC§

Sous-réseaux (Subnets)§

Un sous-réseau est une subdivision du VPC dans une Availability Zone.

Public subnet : a une route vers Internet Gateway. Les ressources avec une IP publique sont accessibles depuis internet.

Private subnet : pas de route directe vers Internet Gateway. Les ressources n’ont pas d’IP publique et ne sont pas accessibles depuis internet (mais peuvent accéder à internet via NAT).

Isolated subnet : pas de route vers internet dans aucune direction. Pour les bases de données, les ressources les plus sensibles.

# Créer un VPC
aws ec2 create-vpc --cidr-block 10.0.0.0/16 \
    --tag-specifications 'ResourceType=vpc,Tags=[{Key=Name,Value=mon-vpc}]'

# Créer des sous-réseaux
aws ec2 create-subnet \
    --vpc-id vpc-12345 \
    --cidr-block 10.0.1.0/24 \
    --availability-zone eu-west-1a \
    --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=public-1a}]'

aws ec2 create-subnet \
    --vpc-id vpc-12345 \
    --cidr-block 10.0.10.0/24 \
    --availability-zone eu-west-1a \
    --tag-specifications 'ResourceType=subnet,Tags=[{Key=Name,Value=private-1a}]'

Internet Gateway (IGW)§

Permet la communication bidirectionnelle entre le VPC et internet. Hautement disponible et redondant par nature (géré par AWS).

aws ec2 create-internet-gateway
aws ec2 attach-internet-gateway --internet-gateway-id igw-12345 --vpc-id vpc-12345

NAT Gateway§

Permet aux ressources dans un subnet privé d’initier des connexions vers internet (mises à jour, téléchargements) sans être accessibles de l’extérieur.

# Allouer une IP Elastic (IP publique fixe)
aws ec2 allocate-address --domain vpc

# Créer le NAT Gateway dans un subnet PUBLIC
aws ec2 create-nat-gateway \
    --subnet-id subnet-public-1a \
    --allocation-id eipalloc-12345

NAT Gateway vs NAT Instance :

CritèreNAT GatewayNAT Instance
GestionEntièrement managé AWSAuto-géré
DisponibilitéHaute disponibilité nativeUne seule instance
PerformanceJusqu’à 100 Gbit/sLimité par le type d’instance
Prix~0.045$/h + transfertInstance EC2 + transfert

Préférer NAT Gateway sauf pour des besoins de contrôle très spécifiques.

Tables de routage§

Chaque sous-réseau a une table de routage qui détermine où le trafic est envoyé.

# Créer une table de routage pour les subnets publics
aws ec2 create-route-table --vpc-id vpc-12345

# Route par défaut vers internet via IGW
aws ec2 create-route \
    --route-table-id rtb-public \
    --destination-cidr-block 0.0.0.0/0 \
    --gateway-id igw-12345

# Associer au subnet public
aws ec2 associate-route-table \
    --route-table-id rtb-public \
    --subnet-id subnet-public-1a

# Table de routage pour subnets privés (via NAT Gateway)
aws ec2 create-route \
    --route-table-id rtb-private \
    --destination-cidr-block 0.0.0.0/0 \
    --nat-gateway-id nat-12345

Architecture 3 tiers typique§

Internet


[Internet Gateway]

    ├── Subnet Public 1a (10.0.1.0/24)       ├── Subnet Public 1b (10.0.2.0/24)
    │   [ALB]  [NAT GW]  [Bastion]            │   [ALB]  [NAT GW]

    ├── Subnet Private 1a (10.0.10.0/24)      ├── Subnet Private 1b (10.0.11.0/24)
    │   [EC2 App Servers]                      │   [EC2 App Servers]

    └── Subnet Isolated 1a (10.0.20.0/24)     └── Subnet Isolated 1b (10.0.21.0/24)
        [RDS Primary]                              [RDS Standby]

NACL vs Security Groups§

DimensionNACLSecurity Group
NiveauSous-réseauInstance (ENI)
StatefulNon (stateless)Oui (stateful)
Règles AllowOuiOui
Règles DenyOuiNon
ÉvaluationNuméro de règle croissantToutes les règles
Par défautTout autoriséTout refusé

Stateless NACL : les règles entrantes et sortantes doivent être définies séparément. Ex : pour une connexion HTTP entrante sur le port 80, il faut une règle entrante (port 80) ET une règle sortante pour les ports éphémères (1024-65535).

# Exemple NACL : bloquer une IP malveillante
aws ec2 create-network-acl-entry \
    --network-acl-id acl-12345 \
    --rule-number 50 \
    --protocol -1 \  # tout trafic
    --rule-action deny \
    --cidr-block 192.0.2.100/32 \
    --ingress

VPC Peering§

Connexion réseau privée entre deux VPCs (même ou comptes différents, même ou régions différentes).

aws ec2 create-vpc-peering-connection \
    --vpc-id vpc-local \
    --peer-vpc-id vpc-distant \
    --peer-region eu-west-2  # si cross-region

# Accepter la demande (côté destinataire)
aws ec2 accept-vpc-peering-connection --vpc-peering-connection-id pcx-12345

# Ajouter les routes dans chaque table de routage
aws ec2 create-route \
    --route-table-id rtb-12345 \
    --destination-cidr-block 10.1.0.0/16 \  # CIDR du VPC distant
    --vpc-peering-connection-id pcx-12345

Limitation : le peering n’est pas transitif. Si A est peeré avec B et B avec C, A ne voit pas C.

Transit Gateway§

Solution au problème de transitivité. Un hub central connecte plusieurs VPCs, réseaux on-premise et VPNs.

VPC-A ──┐
VPC-B ──┤── Transit Gateway ──── VPN Site-to-Site ──── Datacenter
VPC-C ──┘

VPN Site-to-Site§

Connecte un datacenter ou bureau on-premise à AWS via un tunnel VPN chiffré (IPsec).

# Créer un Customer Gateway (représente votre routeur on-premise)
aws ec2 create-customer-gateway \
    --type ipsec.1 \
    --public-ip 203.0.113.10 \
    --bgp-asn 65000

# Créer une Virtual Private Gateway
aws ec2 create-vpn-gateway --type ipsec.1
aws ec2 attach-vpn-gateway --vpn-gateway-id vgw-12345 --vpc-id vpc-12345

# Créer la connexion VPN
aws ec2 create-vpn-connection \
    --type ipsec.1 \
    --customer-gateway-id cgw-12345 \
    --vpn-gateway-id vgw-12345

VPC Endpoints§

Connexion privée aux services AWS sans passer par internet. Le trafic reste dans le réseau AWS.

Gateway Endpoint (gratuit) : S3 et DynamoDB.

aws ec2 create-vpc-endpoint \
    --vpc-id vpc-12345 \
    --service-name com.amazonaws.eu-west-1.s3 \
    --route-table-ids rtb-private-1a rtb-private-1b

Interface Endpoint (payant) : tous les autres services AWS (SQS, SNS, ECR, Secrets Manager, SSM…). Crée une ENI avec une IP privée dans votre subnet.

aws ec2 create-vpc-endpoint \
    --vpc-id vpc-12345 \
    --vpc-endpoint-type Interface \
    --service-name com.amazonaws.eu-west-1.secretsmanager \
    --subnet-ids subnet-private-1a subnet-private-1b \
    --security-group-ids sg-endpoint

Flow Logs§

Capturent les informations sur le trafic IP dans le VPC. Stockés dans CloudWatch Logs ou S3.

aws ec2 create-flow-logs \
    --resource-type VPC \
    --resource-ids vpc-12345 \
    --traffic-type ALL \  # ACCEPT, REJECT ou ALL
    --log-destination-type cloud-watch-logs \
    --log-group-name /vpc/flow-logs

Format d’un log : version account-id interface-id srcaddr dstaddr srcport dstport protocol packets bytes start end action log-status

2 123456789012 eni-abc123 10.0.0.5 10.0.1.100 54321 443 6 20 4000 1705316400 1705316460 ACCEPT OK
—The Gardener