الدرس 17 من 24

أمان الحاويات و Kubernetes

أساسيات أمان الحاويات

4 دقيقة للقراءة

الحاويات أحدثت ثورة في النشر لكنها قدمت تحديات أمنية جديدة. فهم عزل الحاويات وأمان الصور وحماية وقت التشغيل ضروري لأمان السحابة الأصلية.

مشهد تهديدات الحاويات

متجهات الهجوم الشائعة

متجه الهجومالوصفالتأثير
صور أساسية ضعيفةحزم قديمة مع CVEs معروفةاختراق الحاوية
أسرار في الصوربيانات اعتماد مشفرة في الطبقاتكشف بيانات الاعتماد
حاويات ذات صلاحياتالتشغيل كـ root مع وصول للمضيفالهروب للمضيف
سجلات غير آمنةالسحب من مصادر غير موثوقةهجوم سلسلة التوريد
استغلال وقت التشغيلاستغلال الذاكرة، حقن الكودكسر الحاوية

نموذج عزل الحاوية

┌────────────────────────────────────────────────┐
│                  نواة نظام المضيف               │
├────────────────────────────────────────────────┤
│  حاوية 1        │  حاوية 2        │  حاوية 3   │
│  ┌──────────┐   │  ┌──────────┐   │  ┌────────┐│
│  │ التطبيق  │   │  │ التطبيق  │   │  │ التطبيق││
│  │ المكتبات │   │  │ المكتبات │   │  │ المكتبات││
│  └──────────┘   │  └──────────┘   │  └────────┘│
│  Namespace      │  Namespace      │  Namespace │
│  cgroups        │  cgroups        │  cgroups   │
└────────────────────────────────────────────────┘

الحاويات تشارك نواة المضيف—العزل يعتمد على:

  • Namespaces: عزل العمليات، الشبكة، التثبيت، المستخدم
  • cgroups: حدود الموارد (CPU، الذاكرة)
  • seccomp: تصفية استدعاءات النظام
  • AppArmor/SELinux: التحكم الإلزامي في الوصول

تكوين Docker آمن

أفضل ممارسات Dockerfile

# استخدم صورة أساسية بسيطة مع إصدار محدد
FROM python:3.12-slim-bookworm AS builder

# إنشاء مستخدم غير root
RUN groupadd -r appuser && useradd -r -g appuser appuser

# تعيين دليل العمل
WORKDIR /app

# نسخ المتطلبات أولاً (تخزين مؤقت أفضل)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# مرحلة الإنتاج
FROM python:3.12-slim-bookworm

# نسخ الملفات الضرورية فقط من builder
COPY --from=builder /usr/local /usr/local
COPY --chown=appuser:appuser . /app

# لا تشغل أبداً كـ root
USER appuser

# استخدم ENTRYPOINT للأوامر الثابتة
ENTRYPOINT ["python", "app.py"]

المبادئ الرئيسية:

  • البناء متعدد المراحل لتقليل حجم الصورة
  • علامات إصدار محددة (أبداً latest)
  • تنفيذ مستخدم غير root
  • صور أساسية بسيطة (alpine، distroless، slim)

أمان Docker Daemon

# /etc/docker/daemon.json
{
  "userns-remap": "default",
  "no-new-privileges": true,
  "seccomp-profile": "/etc/docker/seccomp/default.json",
  "icc": false,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "live-restore": true
}
الإعدادالغرض
userns-remapيربط root الحاوية بمستخدم غير ذي صلاحيات على المضيف
no-new-privilegesيمنع تصعيد الصلاحيات
icc: falseيعطل الاتصال بين الحاويات
seccomp-profileيقيد استدعاءات النظام

أمان الصور

فحص الثغرات

Trivy - الماسح القياسي في الصناعة:

# فحص صورة محلية
trivy image myapp:latest

# فحص مع تصفية الخطورة
trivy image --severity HIGH,CRITICAL myapp:latest

# فحص وفشل خط CI إذا وجدت ثغرات
trivy image --exit-code 1 --severity CRITICAL myapp:latest

# فحص نظام الملفات (لأخطاء تكوين IaC)
trivy fs --scanners vuln,misconfig .

الفحص السحابي الأصلي:

# فحص AWS ECR
aws ecr start-image-scan \
    --repository-name myapp \
    --image-id imageTag=latest

# GCP Artifact Registry
gcloud artifacts docker images scan \
    gcr.io/project/myapp:latest

# Azure Container Registry
az acr repository show-manifests \
    --name myregistry \
    --repository myapp \
    --query "[].{tag:tags[0],vulnerabilities:changeableAttributes.vulnerabilityAssessment}"

توقيع الصور والتحقق

Cosign لتوقيع صور الحاويات:

# توليد زوج مفاتيح
cosign generate-key-pair

# توقيع الصورة
cosign sign --key cosign.key myregistry/myapp:latest

# التحقق من التوقيع قبل النشر
cosign verify --key cosign.pub myregistry/myapp:latest

أمان وقت التشغيل

أفضل ممارسات وقت تشغيل الحاوية

# تشغيل الحاوية مع خيارات الأمان
docker run \
    --read-only \
    --no-new-privileges \
    --cap-drop ALL \
    --cap-add NET_BIND_SERVICE \
    --security-opt="no-new-privileges:true" \
    --pids-limit 100 \
    --memory="512m" \
    --cpus="0.5" \
    myapp:latest
العلمالفائدة الأمنية
--read-onlyيمنع الكتابة على نظام الملفات
--cap-drop ALLيزيل جميع قدرات Linux
--cap-addيضيف فقط القدرات المطلوبة
--no-new-privilegesيحظر تصعيد الصلاحيات
--pids-limitيمنع fork bombs
--memory/--cpusحدود الموارد

إدارة الأسرار

لا تضمن الأسرار في الصور أبداً:

# سيء - السر في متغير البيئة مرئي في طبقات الصورة
ENV API_KEY=secret123

# جيد - تثبيت الأسرار في وقت التشغيل
docker run -v /secrets/api_key:/run/secrets/api_key:ro myapp

# أفضل - استخدم أسرار Docker (Swarm) أو مدير أسرار خارجي
docker secret create api_key ./api_key.txt
docker service create --secret api_key myapp

قائمة تحقق أمان الحاويات

الفئةالضابطالتنفيذ
الصوراستخدم صور أساسية بسيطةdistroless، alpine، slim
الصورافحص الثغراتTrivy، Snyk، سحابي أصلي
الصوروقع وتحققCosign، Notary
وقت التشغيلشغل كغير rootتوجيه USER
وقت التشغيلأسقط القدرات--cap-drop ALL
وقت التشغيلنظام ملفات للقراءة فقط--read-only
الأسرارإدارة خارجيةVault، أسرار السحابة
التسجيلتسجيل مركزيFluentd، تسجيل السحابة

التالي، سنؤمن مجموعات Kubernetes مع RBAC وسياسات الشبكة وأمان الـ pods. :::

مراجعة سريعة: كيف تجد هذا الدرس؟

اختبار

الوحدة 5: أمان الحاويات و Kubernetes

خذ الاختبار
نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.