DevOps Elastic Hayway
Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

AWSLesson 7 / 479 min readUpdated October 7, 2026

EC2 : lancer une instance, Security Group et SSM

À la fin de ce tutoriel, vous aurez une instance EC2 Free Tier joignable sans ouvrir SSH sur 0.0.0.0/0, via SSM Session Manager, avec un Security Group minimal et le rôle IAM du tuto précédent.

Niveau : Débutant · Temps estimé : 60–70 min · Versions testées : EC2 Console 2026, Amazon Linux 2023, AWS CLI v2, SSM Agent préinstallé · Dernière vérification : 2026-09-11 · Region lab : ca-central-1

← Précédent : IAM AWS · Hub : Démarrer avec AWS

Publish : HOLD

Prérequis

  • Compte lab + admin-lab + CLI profil lab (Démarrer avec AWS)
  • Rôle lab-ec2-role + instance profile lab-ec2-profile (IAM)
  • Region de lab fixe : ca-central-1 (Canada — Centre)
  • Budget d’alerte actif (Billing → Budgets)
export AWS_PROFILE=lab
export AWS_DEFAULT_REGION=ca-central-1
# PowerShell : $env:AWS_PROFILE='lab'; $env:AWS_DEFAULT_REGION='ca-central-1'

Coût estimé lab (ca-central-1, 2026) :

Ressource Ordre de grandeur Remarque
t3.micro / t2.micro ~0 € Free Tier (750 h/mois, 12 premiers mois) Hors Free Tier ≈ 0,01–0,015 USD/h
Stockage root 8 Go gp3 Inclus / cents Surveillez volumes orphelins
Session Manager Gratuit pour le shell Logs CloudWatch optionnels = coût
Elastic IP non associée Facturée Ne pas créer sauf besoin explicite

Terminez l’instance après le lab. Une IP Elastic oubliée ou une instance laissée running = facture.

Ce que nous allons construire

VPC par défaut (lab rapide) — ca-central-1
├── Security Group sg-lab-web
│   ├── Ingress : aucun SSH public (0.0.0.0/0:22 interdit)
│   └── Egress : HTTPS 443 (SSM endpoints / dnf / yum)
├── Instance EC2 Amazon Linux 2023 (t3.micro)
│   ├── IAM instance profile : lab-ec2-profile
│   └── SSM Session Manager (shell console / CLI)
└── (Option) règle SSH limitée à VOTRE IP /32 seulement

(Schéma Excalidraw — alt : « EC2 + SG sans SSH public + SSM ».)

Pourquoi SSM plutôt que SSH ouvert ? Moins de surface d’attaque, pas de gestion de .pem sur le laptop, audit CloudTrail des sessions — pattern recommandé en 2026 pour les labs et la prod. Piège fréquent : lancer l’EC2 sans instance profile, puis découvrir que Session Manager reste gris. Attachez lab-ec2-profile à la création (ou attachez-le ensuite, puis attendez le refresh agent).

Étape 1 — Vérifier le Free Tier et le type d’instance

Dans ca-central-1 :

  1. Console EC2 → Instance types : cherchez t3.micro (ou t2.micro si t3 indisponible en Free Tier dans votre compte).
  2. AMI : Amazon Linux 2023 (SSM Agent inclus — pas d’install manuelle).

CLI utile :

aws ec2 describe-instance-types 
  --filters Name=free-tier-eligible,Values=true 
  --query 'InstanceTypes[].InstanceType' 
  --output text 
  --region ca-central-1 
  --profile lab

Étape 2 — Security Group minimal

Créer le SG

VPC_ID=$(aws ec2 describe-vpcs 
  --filters Name=isDefault,Values=true 
  --query 'Vpcs[0].VpcId' --output text 
  --region ca-central-1 --profile lab)

SG_ID=$(aws ec2 create-security-group 
  --group-name sg-lab-web 
  --description "Lab EC2 SSM - no public SSH" 
  --vpc-id "$VPC_ID" 
  --region ca-central-1 --profile lab 
  --query 'GroupId' --output text)

echo "SG créé : $SG_ID"

Notez le GroupId (sg-…). Si le nom existe déjà : InvalidGroup.Duplicate — réutilisez l’existant ou changez le nom.

Par défaut, egress autorise tout (0.0.0.0/0). Pour un lab simple, laissez l’egress all. Ingress : n’ajoutez pas encore SSH. SSM n’a pas besoin d’une règle ingress 22 : l’agent initie des connexions sortantes HTTPS vers les endpoints Systems Manager.

Vérifier l’absence de SSH public

aws ec2 describe-security-groups 
  --group-ids "$SG_ID" 
  --region ca-central-1 --profile lab 
  --query 'SecurityGroups[0].IpPermissions'

Le résultat doit être [] (ou sans FromPort=22 vers 0.0.0.0/0).

(Option) SSH depuis votre IP uniquement

Si vous tenez au .pem :

MY_IP=$(curl -s https://checkip.amazonaws.com)
# sous PowerShell : (Invoke-RestMethod https://checkip.amazonaws.com)

aws ec2 authorize-security-group-ingress 
  --group-id "$SG_ID" 
  --protocol tcp --port 22 
  --cidr "${MY_IP}/32" 
  --region ca-central-1 --profile lab

Jamais 0.0.0.0/0 sur le port 22 pour un lab durable. Votre IP change (box/4G) → timeout SSH ; d’où l’intérêt de SSM.

Étape 3 — Lancer l’instance (console)

  1. EC2 → Instances → Launch instances.
  2. Name : lab-ec2-01.
  3. AMI : Amazon Linux 2023.
  4. Instance type : t3.micro (Free Tier).
  5. Key pair : Proceed without a key pair si vous utilisez uniquement SSM ; sinon créez/sélectionnez une clé et stockez le .pem hors Git.
  6. Network : VPC par défaut, subnet public (auto-assign public IP = Enable) — nécessaire pour atteindre les endpoints SSM sans VPC endpoints privés.
  7. Firewall : Select existing → sg-lab-web.
  8. Advanced → IAM instance profile : lab-ec2-profile (critique pour SSM).
  9. Storage : 8 Go gp3 suffisent ; chiffrement root activé si proposé.
  10. Launch.

Attendez Instance state = Running et Status check = 2/2 (system + instance). Comptez 1–3 minutes avant que l’agent SSM soit Online.

Étape 4 — Même chose en CLI (reproductible)

Récupérez l’AMI Amazon Linux 2023 de ca-central-1 :

AMI_ID=$(aws ssm get-parameters 
  --names /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64 
  --query 'Parameters[0].Value' --output text 
  --region ca-central-1 --profile lab)

echo "$AMI_ID"

Lancement :

INSTANCE_ID=$(aws ec2 run-instances 
  --image-id "$AMI_ID" 
  --instance-type t3.micro 
  --security-group-ids "$SG_ID" 
  --iam-instance-profile Name=lab-ec2-profile 
  --count 1 
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=lab-ec2-01}]' 
  --region ca-central-1 
  --profile lab 
  --query 'Instances[0].InstanceId' --output text)

echo "Instance : $INSTANCE_ID"

(Ajoutez --key-name VOTRE_KEY seulement si SSH optionnel. Ajoutez --associate-public-ip-address si le subnet ne l’assigne pas par défaut.)

Attendre le running + checks :

aws ec2 wait instance-running --instance-ids "$INSTANCE_ID" 
  --region ca-central-1 --profile lab
aws ec2 wait instance-status-ok --instance-ids "$INSTANCE_ID" 
  --region ca-central-1 --profile lab

Étape 5 — Droits SSM sur le rôle (si Session Manager refuse)

Le rôle lab-ec2-role avait surtout S3 en démo. Pour SSM, attachez la politique gérée :

aws iam attach-role-policy 
  --role-name lab-ec2-role 
  --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore 
  --profile lab

Vérifiez les politiques attachées :

aws iam list-attached-role-policies 
  --role-name lab-ec2-role 
  --profile lab

Attendez 1–2 minutes que l’instance apparaisse comme Managed instance (Systems Manager → Fleet Manager), ou :

aws ssm describe-instance-information 
  --region ca-central-1 --profile lab 
  --query 'InstanceInformationList[].{Id:InstanceId,Ping:PingStatus,Agent:AgentVersion}'

PingStatus doit être Online. Si la liste est vide : instance profile manquant, egress bloqué, ou Region incorrecte.

Étape 6 — Ouvrir un shell via Session Manager

Console

EC2 → instance lab-ec2-01 → Connect → onglet Session Manager → Connect.

CLI (plugin Session Manager requis sur le laptop)

aws ssm start-session 
  --target "$INSTANCE_ID" 
  --region ca-central-1 
  --profile lab

Dans la session :

uname -a
# IMDSv2 (Amazon Linux 2023 — n’utilisez plus IMDSv1 en lab propre)
TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" 
  -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
curl -s -H "X-aws-ec2-metadata-token: $TOKEN" 
  http://169.254.169.254/latest/meta-data/instance-id

Vous êtes bien sur l’instance, sans port 22 public. Optionnel : vérifier le rôle via IMDS (…/meta-data/iam/security-credentials/).

Étape 7 — Vérification

Check Commande / lieu Attendu
État instance describe-instances State running
SG describe-security-groups Pas de 0.0.0.0/0:22
Instance profile console / IamInstanceProfile lab-ec2-profile
Agent SSM describe-instance-information Online
Shell start-session Prompt interactif
Metadata rôle curl IMDS ci-dessus Nom du rôle visible
aws ec2 describe-instances 
  --instance-ids "$INSTANCE_ID" 
  --region ca-central-1 --profile lab 
  --query 'Reservations[0].Instances[0].{State:State.Name,Profile:IamInstanceProfile.Arn,SG:SecurityGroups[0].GroupId,PublicIp:PublicIpAddress}'

Nettoyage (obligatoire)

aws ec2 terminate-instances 
  --instance-ids "$INSTANCE_ID" 
  --region ca-central-1 --profile lab

aws ec2 wait instance-terminated 
  --instance-ids "$INSTANCE_ID" 
  --region ca-central-1 --profile lab
  • Ne créez une Elastic IP que si le prochain lab l’exige ; sinon évitez.
  • Le SG sg-lab-web peut rester pour le tuto EBS/EFS/ALB, ou être supprimé :
aws ec2 delete-security-group --group-id "$SG_ID" 
  --region ca-central-1 --profile lab

(Suppression impossible tant qu’une ENI/instance l’utilise — attendez la terminaison.)

Contrôle anti-facture :

aws ec2 describe-instances 
  --filters Name=instance-state-name,Values=running,pending,stopping 
  --region ca-central-1 --profile lab 
  --query 'Reservations[].Instances[].InstanceId'
# doit être vide (ou seulement vos labs volontaires)

Erreurs fréquentes

Symptôme Cause probable Correction
Session Manager gris / indisponible Manque AmazonSSMManagedInstanceCore ou pas d’instance profile Attacher policy + profile ; reboot soft / attendre 2 min
TargetNotConnected Agent offline ; subnet privé sans endpoints SSM ; pas d’IP publique Attendre boot ; activer public IP ou VPC endpoints ssm, ssmmessages, ec2messages
UnauthorizedOperation sur run-instances User sans droit EC2 Revenir sur groupe lab-admins / politiques IAM
Facture surprise Instance laissée on + EIP orpheline terminate-instances + release-address
SSH timeout SG sans votre /32 ou IP publique changée Préférer SSM ; sinon MAJ règle SG avec nouvelle IP
Liste SSM vide alors que Running Mauvaise Region CLI vs console Forcer --region ca-central-1 partout
InvalidGroup.Duplicate SG sg-lab-web déjà créé describe-security-groups et réutiliser l’ID

Lab bonus (5 min) — tags et stop/start

aws ec2 create-tags --resources "$INSTANCE_ID" 
  --tags Key=Project,Value=lab Key=Owner,Value=admin-lab 
  --region ca-central-1 --profile lab
aws ec2 stop-instances --instance-ids "$INSTANCE_ID" 
  --region ca-central-1 --profile lab
# Horloge EC2 s’arrête ; EBS continue. Puis start + re-vérifier PingStatus Online.
aws ec2 start-instances --instance-ids "$INSTANCE_ID" 
  --region ca-central-1 --profile lab

Après stop/start, l’IP publique change (sauf EIP). SSM cible toujours l’InstanceId — avantage vs SSH sur IP fixe.

Quiz (5 questions)

1. Quel est l’intérêt principal de Session Manager pour un lab EC2 ? – A. Remplacer CloudWatch
– B. Administrer l’instance sans exposer SSH à Internet
– C. Augmenter automatiquement la taille du disque

2. Une règle SG TCP 22 depuis 0.0.0.0/0 signifie : – A. SSH seulement depuis AWS
– B. SSH ouvert à tout Internet
– C. SSH désactivé

3. Pourquoi attacher AmazonSSMManagedInstanceCore au rôle d’instance ? – A. Pour facturer SSM
– B. Pour autoriser l’agent SSM à parler aux endpoints Systems Manager
– C. Pour ouvrir le port 22

4. En ca-central-1, vous lancez une EC2 sans IP publique, sans VPC endpoints SSM. Que se passe-t-il le plus souvent ? – A. SSM fonctionne quand même via le DNS public
– B. L’agent ne peut pas joindre SSM → TargetNotConnected
– C. Le Security Group ouvre automatiquement le port 443 ingress

5. Après un stop puis start (sans EIP), quelle affirmation est vraie ? – A. L’InstanceId change toujours
– B. L’IP publique peut changer ; SSM cible toujours l’InstanceId
– C. Le volume EBS root est effacé

Réponses : 1‑B · 2‑B · 3‑B · 4‑B · 5‑B

Pour aller plus loin

Maillage série AWS (P1)

← Précédent IAM
→ Suivant EBS volumes & snapshots
Aussi EFS · VPC fondations · ALB

Retour parcours AWS — hub de la série et leçons sœurs.

Share your love

Leave a Reply

Your email address will not be published. Required fields are marked *