انتقل إلى المحتوى الرئيسي

مجموعات الأمان

ما هي مجموعة الأمان؟​

مجموعة الأمان (SG) هي جدار ناري افتراضي يتحكم في حركة المرور الواردة والصادرة من مثيلات EC2 الخاصة بك. إنها خط الدفاع الأول لتأمين موارد AWS الخاصة بك.

┌─────────────────────────────────────────────────────────────┐
│ SECURITY GROUP │
├─────────────────────────────────────────────────────────────┤
│ │
│ Internet │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ SECURITY GROUP │ │
│ │ (Pare-feu au niveau instance) │ │
│ │ │ │
│ │ RÈGLES ENTRANTES (Inbound) │ │
│ │ ┌─────────────────────────────────────────┐ │ │
│ │ │ Port 22 (SSH) ← Admin uniquement │ │ │
│ │ │ Port 80 (HTTP) ← Tout le monde │ │ │
│ │ │ Port 443 (HTTPS) ← Tout le monde │ │ │
│ │ └─────────────────────────────────────────┘ │ │
│ │ │ │
│ │ RÈGLES SORTANTES (Outbound) │ │
│ │ ┌─────────────────────────────────────────┐ │ │
│ │ │ Tout le trafic → Autorisé par défaut │ │ │
│ │ └─────────────────────────────────────────┘ │ │
│ │ │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────┐ │
│ │ Instance EC2 │ │
│ └───────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘

الخصائص الرئيسية​

1. Stateful (حفظ الحالة)​

┌─────────────────────────────────────────────────────────────┐
│ STATEFUL │
├─────────────────────────────────────────────────────────────┤
│ │
│ Si une connexion ENTRANTE est autorisée, │
│ la réponse SORTANTE est automatiquement autorisée. │
│ │
│ Exemple : │
│ ┌─────────┐ ┌─────────────┐ │
│ │ Client │ ──── Requête HTTP ────► │ EC2 │ │
│ │ │ (Port 80) │ (SG) │ │
│ │ │ ◄─── Réponse ──────── │ │ │
│ └─────────┘ (Automatique) └─────────────┘ │
│ │
│ Vous n'avez PAS besoin de créer une règle sortante │
│ pour la réponse ! │
│ │
└─────────────────────────────────────────────────────────────┘

2. Deny par Défaut (Inbound)​

Par défaut :
• INBOUND : Tout est BLOQUÉ ❌
• OUTBOUND : Tout est AUTORISÉ ✅

Vous devez explicitement autoriser le trafic entrant.

3. Règles ALLOW Uniquement​

Security Groups = Règles ALLOW seulement

✅ Vous POUVEZ : Autoriser SSH depuis 10.0.0.0/8
❌ Vous ne POUVEZ PAS : Bloquer une IP spécifique

Pour bloquer des IP → Utilisez les NACLs (niveau VPC)

هيكل القاعدة​

┌─────────────────────────────────────────────────────────────┐
│ STRUCTURE D'UNE RÈGLE │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────┬───────────┬─────────────┬───────────────┐ │
│ │ Type │ Protocole │ Port │ Source │ │
│ ├────────────┼───────────┼─────────────┼───────────────┤ │
│ │ SSH │ TCP │ 22 │ 203.0.113.0/24│ │
│ │ HTTP │ TCP │ 80 │ 0.0.0.0/0 │ │
│ │ HTTPS │ TCP │ 443 │ 0.0.0.0/0 │ │
│ │ Custom │ TCP │ 3306 │ sg-xxxxx │ │
│ │ All ICMP │ ICMP │ All │ 10.0.0.0/16 │ │
│ └────────────┴───────────┴─────────────┴───────────────┘ │
│ │
│ Source peut être : │
│ • CIDR : 0.0.0.0/0 (tout), 10.0.0.0/8 (privé) │
│ • Security Group : sg-xxxxxxxx │
│ • Prefix List : pl-xxxxxxxx │
│ │
└─────────────────────────────────────────────────────────────┘

المصادر الشائعة​

ترميز CIDR​

┌─────────────────────────────────────────────────────────────┐
│ NOTATION CIDR │
├─────────────────────────────────────────────────────────────┤
│ │
│ 0.0.0.0/0 = Tout Internet (ATTENTION !) │
│ ::/0 = Tout IPv6 │
│ │
│ 10.0.0.0/8 = Réseau privé classe A │
│ 172.16.0.0/12 = Réseau privé classe B │
│ 192.168.0.0/16 = Réseau privé classe C │
│ │
│ 203.0.113.25/32 = Une seule IP (votre bureau) │
│ 10.0.1.0/24 = 256 adresses (un subnet) │
│ │
│ Le /XX indique combien de bits sont fixes : │
│ /32 = 1 IP, /24 = 256 IPs, /16 = 65536 IPs, /0 = tout │
│ │
└─────────────────────────────────────────────────────────────┘

الإشارة إلى مجموعة أمان أخرى​

┌─────────────────────────────────────────────────────────────┐
│ RÉFÉRENCE ENTRE SECURITY GROUPS │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ sg-web │ │ sg-database │ │
│ │ │ │ │ │
│ │ Inbound: │ │ Inbound: │ │
│ │ HTTP 80 0.0.0.0/0 │ MySQL 3306 │ │
│ │ │ │ Source: sg-web │◄─────┐ │
│ │ │ │ │ │ │
│ │ ┌──────────┐ │ │ ┌──────────┐ │ │ │
│ │ │ Web App │──┼─────────┼─►│ MySQL │ │ │ │
│ │ └──────────┘ │ │ └──────────┘ │ │ │
│ │ │ │ │ │ │
│ └─────────────────┘ └─────────────────┘ │ │
│ │ │
│ Seules les instances dans sg-web peuvent accéder ─────┘ │
│ à MySQL. Pas besoin de gérer les IPs ! │
│ │
└─────────────────────────────────────────────────────────────┘
نصيحة

قم بالإشارة إلى مجموعات الأمان بدلاً من عناوين IP عندما يكون ذلك ممكنًا. إنه أكثر ديناميكية وأكثر أمانًا!

المنافذ الشائعة​

PortServiceQuand l'ouvrir
22SSHوصول الإدارة (تقييد إلى عنوان IP الخاص بك)
80HTTPمواقع الويب العامة
443HTTPSمواقع الويب الآمنة
3306MySQLقاعدة بيانات (داخلي فقط)
5432PostgreSQLقاعدة بيانات (داخلي فقط)
3389RDPسطح المكتب البعيد لنظام Windows
8080HTTP Altالتطبيقات، Tomcat
27017MongoDBقاعدة بيانات (داخلي فقط)

أمثلة على التكوين​

خادم ويب عام​

┌─────────────────────────────────────────────────────────────┐
│ SG : sg-webserver-public │
├─────────────────────────────────────────────────────────────┤
│ │
│ INBOUND RULES : │
│ ┌──────────┬──────────┬──────────┬─────────────────────┐ │
│ │ Type │ Protocol │ Port │ Source │ │
│ ├──────────┼──────────┼──────────┼─────────────────────┤ │
│ │ HTTP │ TCP │ 80 │ 0.0.0.0/0 │ │
│ │ HTTPS │ TCP │ 443 │ 0.0.0.0/0 │ │
│ │ SSH │ TCP │ 22 │ 203.0.113.50/32 │ │
│ └──────────┴──────────┴──────────┴─────────────────────┘ │
│ │
│ OUTBOUND RULES : │
│ ┌──────────┬──────────┬──────────┬─────────────────────┐ │
│ │ All │ All │ All │ 0.0.0.0/0 │ │
│ └──────────┴──────────┴──────────┴─────────────────────┘ │
│ │
│ ⚠️ SSH restreint à l'IP du bureau (203.0.113.50) │
│ │
└─────────────────────────────────────────────────────────────┘

قاعدة بيانات (داخلية)​

┌─────────────────────────────────────────────────────────────┐
│ SG : sg-database-private │
├─────────────────────────────────────────────────────────────┤
│ │
│ INBOUND RULES : │
│ ┌──────────┬──────────┬──────────┬─────────────────────┐ │
│ │ Type │ Protocol │ Port │ Source │ │
│ ├──────────┼──────────┼──────────┼─────────────────────┤ │
│ │ MySQL │ TCP │ 3306 │ sg-webserver │ │
│ └──────────┴──────────┴──────────┴─────────────────────┘ │
│ │
│ OUTBOUND RULES : │
│ ┌──────────┬──────────┬──────────┬─────────────────────┐ │
│ │ All │ All │ All │ 0.0.0.0/0 │ │
│ └──────────┴──────────┴──────────┴─────────────────────┘ │
│ │
│ ✅ Seulement accessible depuis le SG des serveurs web │
│ ❌ Pas d'accès direct depuis Internet │
│ │
└─────────────────────────────────────────────────────────────┘

الأخطاء الشائعة​

1. SSH مفتوح للجميع ❌​

MAUVAIS :
SSH (22) - Source: 0.0.0.0/0
↓
⚠️ N'importe qui peut tenter de se connecter !
Attaques brute-force garanties.

BON :
SSH (22) - Source: 203.0.113.50/32 (votre IP)
ou
SSH (22) - Source: 10.0.0.0/8 (réseau privé + VPN)

2. قاعدة بيانات مكشوفة ❌​

MAUVAIS :
MySQL (3306) - Source: 0.0.0.0/0
↓
⚠️ Base de données accessible publiquement !
Risque majeur de sécurité.

BON :
MySQL (3306) - Source: sg-application
↓
✅ Seulement accessible depuis les serveurs d'application

3. الكثير من القواعد ❌​

MAUVAIS :
Un SG avec 50 règles différentes
↓
⚠️ Difficile à auditer et maintenir
Risque d'erreurs

BON :
Plusieurs SG avec des rôles clairs :
- sg-web-public (HTTP/HTTPS)
- sg-admin (SSH/RDP)
- sg-database (MySQL interne)

الممارسات الجيدة​

1. مبدأ الأقل امتيازًا​

N'autorisez QUE ce qui est nécessaire.

✅ Bon : Port 443 depuis 0.0.0.0/0 (HTTPS public requis)
❌ Mauvais : Tous les ports depuis 0.0.0.0/0

2. استخدم أسماء وصفية​

Noms recommandés :
• sg-web-public-prod
• sg-database-internal-prod
• sg-admin-ssh-restricted
• sg-loadbalancer-public

3. وثق قواعدك​

Ajoutez des descriptions à chaque règle :

Port 443 - "HTTPS public pour le site web"
Port 22 - "SSH admin depuis bureau Paris uniquement"
Port 3306 - "MySQL pour backend uniquement"

4. قم بالمراجعة بانتظام​

Questions à se poser :
• Y a-t-il des règles avec 0.0.0.0/0 non nécessaires ?
• Des ports de BDD sont-ils exposés publiquement ?
• Les règles SSH sont-elles trop permissives ?
• Y a-t-il des règles obsolètes ?

Security Group مقابل NACL​

┌─────────────────────────────────────────────────────────────┐
│ SECURITY GROUP vs NACL │
├─────────────────────────────────────────────────────────────┤
│ │
│ Critère Security Group NACL │
│ ────────────────────────────────────────────────────── │
│ Niveau Instance Subnet │
│ État Stateful Stateless │
│ Règles ALLOW seulement ALLOW et DENY │
│ Évaluation Toutes les règles Ordre de priorité │
│ Défaut Deny entrant Allow tout │
│ Changement Immédiat Immédiat │
│ │
│ Utilisez SG pour : Contrôle fin par instance │
│ Utilisez NACL pour : Bloquer des IPs, défense en profondeur│
│ │
└─────────────────────────────────────────────────────────────┘

ملخص​

ConceptDescription
Security GroupPare-feu niveau instance
StatefulRéponses automatiquement autorisées
InboundBloqué par défaut
OutboundAutorisé par défaut
ALLOW onlyPas de règles DENY
Référence SGUtiliser un SG comme source

اختبار التحقق​

  1. ماذا يعني "stateful" بالنسبة لمجموعة الأمان؟
  2. ما هي السياسة الافتراضية لحركة المرور الواردة؟
  3. هل يمكن حظر عنوان IP محدد باستخدام مجموعة الأمان؟
  4. ماذا يعني 0.0.0.0/0 كمصدر؟
  5. لماذا تشير إلى SG بدلاً من IP؟
  6. ما هو المنفذ الافتراضي لـ SSH؟

القسم التالي: مختبر: بنية EC2