We are still cooking the magic in the way!
مشروع: تصليب بيئة سحابية و Kubernetes
مشروع: تصليب بيئة سحابية و Kubernetes
كل درس في هذا البرنامج التعليمي قدّم فئة من فئات التحكم بشكل منفصل — IAM، والشبكة، وأمان الـ Pod، وتصليب الكلاستر، وأمان وقت التشغيل، والثقة الصفرية، وCSPM، والاستجابة للحوادث. التحدي الحقيقي هو تطبيقها جميعًا بشكل متماسك على بنية إنتاج واحدة، وحل التعارضات، وترتيب العمل بحيث لا يتوقف النظام الحي، وإثبات للمراجعين وفريق SRE أن التصليب يصمد عبر الزمن.
يستعرض هذا المشروع الختامي بنية مرجعية واقعية — منصة تجارة إلكترونية تعمل على AWS مع كلاستر EKS في الإنتاج — ويطبّق عليها كل طبقة من طبقات قائمة التصليب. كل خطوة هي أمر حقيقي أو إعداد ستشغّله، وليس تمرينًا نظريًا. في النهاية ستمتلك دليل تشغيل قابلًا للتكرار لأي بيئة سحابية مع Kubernetes.
البنية المرجعية
تتكون البيئة النموذجية من:
- حساب AWS بثلاثة بيئات (dev وstaging وprod) في VPC منفصلة.
- كلاستر EKS 1.29 في VPC الإنتاج يشغّل عشرة خدمات مصغّرة، وقاعدة بيانات PostgreSQL على RDS، وكلاستر Redis على ElastiCache.
- دلو S3 للملفات التي يرفعها المستخدمون، وتوزيع CloudFront، وموازن حمل ALB أمام الكلاستر.
- ECR كسجل للحاويات، وGitHub Actions كنظام CI/CD، وTerraform Cloud لإدارة البنية التحتية.
- Prometheus وGrafana وLoki للمراقبة، وFalco لأمان وقت التشغيل.
المرحلة الأولى — أساس حساب AWS وIAM
قبل الاقتراب من الكلاستر، أحكم تأمين الحساب نفسه. شغّل فحوصات AWS Security Hub وConfig لتأسيس نقاط مرجعية:
فعّل CloudTrail مع التحقق من سلامة ملفات السجل عبر جميع المناطق، وأرسل الأحداث إلى دلو S3 في حساب تسجيل منفصل لا يملك المهندسون صلاحية الكتابة إليه أو حذف محتوياته. هذا هو سجل المراجعة غير القابل للتعديل الذي يعتمد عليه التحقيق في الحوادث.
المرحلة الثانية — تصليب الشبكة
راجع كل مجموعة أمان في VPC الإنتاج بحثًا عن دخول غير مقيّد (0.0.0.0/0) على منافذ غير HTTP. يجب أن تقبل مجموعات عقد EKS الحركة فقط من مجموعة أمان ALB على منفذ التطبيق، ومن مجموعة أمان المستوى التحكمي للكلاستر على منفذ Kubelet (10250). يجب أن يقبل RDS الحركة فقط من مجموعة أمان عقد EKS على المنفذ 5432.
المرحلة الثالثة — قائمة تصليب كلاستر EKS
اعمل بهذه القائمة على كلاسترك. كل بند يقابل ضابطًا في معيار CIS EKS Benchmark:
- وصول نقطة نهاية خادم API — عطّل النقطة العامة أو قيّدها بنطاق IP الشركة. فعّل النقطة الخاصة. استخدم
eksctl utils update-cluster-endpoints. - تشفير Secrets بمفاتيح KMS — تأكد من ضبط
--encryption-configبمفتاح KMS. تحقق:aws eks describe-cluster --name prod --query 'cluster.encryptionConfig'. - مراجعة RBAC — اسرد جميع ClusterRoleBindings لـ
cluster-admin. يجب ألا تكون هناك سوى إعدادات النظام الافتراضية وحساب الطوارئ. - معايير أمان Pod — ضع تسمية
pod-security.kubernetes.io/enforce: restrictedعلى جميع نطاقات الإنتاج. - IMDSv2 على مجموعات العقد — يجب أن تضبط جميع قوالب الإطلاق
HttpTokens: requiredوHttpPutResponseHopLimit: 1لمنع هجمات SSRF من مستوى Pod. - IRSA بدلًا من أدوار العقد — كل حساب خدمة يحتاج وصولًا لـ AWS يجب أن يستخدم IAM Roles for Service Accounts، وليس سياسة دور عقدة شاملة.
المرحلة الرابعة — إدارة الأسرار
استبدل جميع كائنات Secret في Kubernetes التي تخزّن بيانات اعتماد نصية بـ Vault Agent Injector أو Secrets Store CSI Driver المدعوم بـ AWS Secrets Manager. دوّر كل بيانات اعتماد طويلة الأمد وجدتها في المراجعة. اضبط حدًا أقصى لمدة صلاحية 90 يومًا لأي سر ثابت في Vault.
المرحلة الخامسة — أمان سلسلة التوريد والصور
يجب أن تكون كل صورة تعمل في الإنتاج موقّعة بـ Cosign ومُتحقَّق منها بواسطة سياسة OPA Gatekeeper عند الدخول. يجب أن تحذف سياسة دورة حياة ECR الصور غير المُوسَمة بعد 14 يومًا، ويجب أن يشغّل سير عمل GitHub Actions أداة Trivy على كل طلب سحب ويمنع الدمج عند وجود ثغرات CRITICAL.
المرحلة السادسة — الكشف في وقت التشغيل والامتثال المستمر
يجب أن يكون Falco يعمل بالفعل من درس أمان وقت التشغيل. تحقق من تفعيل هذه القواعد على الأقل: shell spawned in container، وwrite to /etc in container، وunexpected outbound connection، وprivilege escalation via sudo. أرسل تنبيهات Falco إلى PagerDuty عبر تكامل Falco Sidekick. أعدّ تقريرًا أسبوعيًا من Security Hub يُرسَل بالبريد الإلكتروني لقيادة الهندسة. جدوّل فحصًا ربع سنوي لمعيار CIS باستخدام Kube-bench كـ CronJob.
إثبات الصمود: التحقق المستمر من الضوابط
التصليب الذي يُطبَّق مرة واحدة يتدهور. يتناوب المهندسون، تنجرف حالة Terraform، وتُنشَر أعباء عمل جديدة دون المرور عبر القائمة. استخدم هذه الآليات لضمان بقاء الضوابط في مكانها:
- قيود OPA Gatekeeper لكل قاعدة أمان Pod وتوقيع صورة — تُرفض عند الدخول، لا تُكتشف بعد النشر.
- قواعد AWS Config لكل ضابط على مستوى الحساب — دوالّ Lambda للمعالجة التلقائية للقواعد منخفضة الخطورة، وتنبيهات للمراجعة البشرية للقواعد عالية الخطورة.
- Trivy Operator يعمل داخل الكلاستر، يفحص أعباء العمل الجارية باستمرار ويكتب النتائج في CRDs من نوع
VulnerabilityReport. أنشئ تنبيهًا في Grafana عند ظهور ثغرة CRITICAL في صورة جارية. - Terraform Sentinel أو Checkov في كل طلب سحب — يحظر أي تغيير بنية تحتية يفتح مجموعة أمان لـ
0.0.0.0/0، أو يعطّل التشفير، أو يحذف مسار المراجعة.
warn إلى enforce دون تشغيل kubectl label namespace production pod-security.kubernetes.io/warn=restricted لدورة نشر كاملة على الأقل، وقراءة كل تحذير في سجل مراجعة خادم API، وإصلاح جميع مواصفات Pod غير المتوافقة. تغيير وضع الفرض على نطاق به Deployments غير متوافقة يعني أن عملية الطرح التالية لا تستطيع إنشاء Pods — وهذا يعني انقطاعًا في ساعات العمل.
مخرجات التسليم
مشروع التصليب لا يكتمل حتى ينتج وثائق دائمة تصمد أمام تغيّر الفريق. سلّم: دليل تشغيل التصليب (هذه القائمة مع الأوامر)، ووثيقة نموذج التهديد (STRIDE مطبّق على مخطط البنية)، وحزمة أدلة لفريق الامتثال (تصدير Security Hub، تقرير kube-bench بصيغة HTML، SBOM من Trivy لكل صورة)، وقائمة بالنتائج مع أصحابها وتواريخ استحقاقها متتبَّعة في نظام إدارة المشاريع. جدوّل إعادة التشغيل بعد ستة أشهر.