أمان التطبيقات

DevSecOps وأمان CI/CD

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

يدمج DevSecOps الأمان في كل مرحلة من مراحل تطوير البرمجيات. يغطي هذا الدرس ممارسات وأدوات أمان خط الأنابيب التي ستناقشها في المقابلات.

نهج التحول لليسار

الأمان التقليدي:                         أمان التحول لليسار:

التصميم → التطوير → الاختبار → النشر → الأمان    الأمان → التصميم → التطوير → الاختبار → النشر
              ↑                           |              ↓           ↓        ↓          ↓
              └──── إصلاحات مكلفة ────────┘       اكتشاف مبكر عبر خط الأنابيب

تكلفة إصلاح الأخطاء حسب المرحلة

المرحلة التكلفة النسبية مثال
التصميم 1x نمذجة التهديدات تحدد الخلل
التطوير 5x مراجعة الكود تلتقط المشكلة
الاختبار 10x DAST يجد الثغرة
الإنتاج 100x الاستجابة للاختراق والمعالجة

خط أنابيب CI/CD آمن

# .github/workflows/security.yaml
name: Security Pipeline

on: [push, pull_request]

jobs:
  security-scan:
    runs-on: ubuntu-latest
    steps:
      # 1. فحص الأسرار
      - name: Secret Detection
        uses: trufflesecurity/trufflehog@main
        with:
          path: ./
          base: ${{ github.event.repository.default_branch }}

      # 2. SAST - التحليل الثابت
      - name: Run Semgrep
        uses: returntocorp/semgrep-action@v1
        with:
          config: >-
            p/security-audit
            p/owasp-top-ten

      # 3. SCA - فحص التبعيات
      - name: Dependency Check
        uses: snyk/actions/node@master
        with:
          args: --severity-threshold=high

      # 4. فحص الحاويات
      - name: Scan Docker Image
        uses: aquasecurity/trivy-action@master
        with:
          image-ref: '${{ github.repository }}:${{ github.sha }}'
          severity: 'CRITICAL,HIGH'

      # 5. البنية التحتية ككود
      - name: Terraform Security
        uses: aquasecurity/tfsec-action@v1.0.0

بوابات الأمان

إيقاف البناء

# security_gate.py - تطبيق أمان CI/CD

class SecurityGate:
    def __init__(self, config):
        self.severity_threshold = config.get('severity_threshold', 'HIGH')
        self.max_vulnerabilities = config.get('max_vulnerabilities', 0)

    def evaluate(self, scan_results):
        critical = scan_results.get('critical', 0)
        high = scan_results.get('high', 0)

        # دائماً افشل عند النتائج الحرجة
        if critical > 0:
            return {
                'pass': False,
                'reason': f'{critical} critical vulnerabilities found'
            }

        # عتبة قابلة للتكوين للشدة العالية
        if self.severity_threshold == 'HIGH' and high > self.max_vulnerabilities:
            return {
                'pass': False,
                'reason': f'{high} high severity issues exceed threshold'
            }

        return {'pass': True, 'reason': 'Security checks passed'}

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

ما لا يجب فعله

# لا تفعل هذا أبداً
env:
  DATABASE_URL: "postgres://admin:password123@db.example.com/prod"
  API_KEY: "sk-live-abc123xyz789"

التعامل الآمن مع الأسرار

# GitHub Actions مع الأسرار
jobs:
  deploy:
    steps:
      - name: Configure AWS
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: ${{ secrets.AWS_ROLE_ARN }}

      - name: Get Secrets
        uses: aws-actions/aws-secretsmanager-get-secrets@v2
        with:
          secret-ids: |
            DB_CREDENTIALS,prod/database
            API_KEYS,prod/api-keys

سؤال المقابلة

س: "كيف ستتعامل مع الأسرار في خط أنابيب CI/CD؟"

الإجابة:

  1. لا تلتزم الأسرار أبداً - استخدم .gitignore، خطافات pre-commit
  2. استخدم مديري الأسرار - AWS Secrets Manager، HashiCorp Vault، GitHub Secrets
  3. قم بالتدوير بانتظام - تدوير آلي مع الإصدارات
  4. راقب الوصول - سجل من يصل للأسرار، متى
  5. أقل الصلاحيات - احقن فقط الأسرار المطلوبة لكل وظيفة
  6. افحص التسريبات - TruffleHog، GitLeaks في pre-commit

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

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

# سيء: استخدام root، صورة كبيرة، لا فحص
FROM ubuntu:latest
RUN apt-get update && apt-get install -y python3
COPY . /app
CMD ["python3", "/app/main.py"]

# جيد: غير root، صورة صغيرة، إصدارات مثبتة
FROM python:3.12-slim-bookworm AS builder

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

FROM gcr.io/distroless/python3-debian12
COPY --from=builder /app /app
COPY --chown=nonroot:nonroot . /app

USER nonroot
ENTRYPOINT ["python", "/app/main.py"]

خط أنابيب فحص الحاويات

- name: Build and Scan
  run: |
    docker build -t myapp:${{ github.sha }} .

    # فحص الثغرات
    trivy image --exit-code 1 --severity HIGH,CRITICAL myapp:${{ github.sha }}

    # فحص الأسرار
    docker run --rm -v $(pwd):/path trufflehog filesystem /path

    # التحقق من الصورة الأساسية
    docker run --rm aquasec/trivy image python:3.12-slim

أمان البنية التحتية ككود

فحص أمان Terraform

# سيء: دلو S3 متساهل جداً
resource "aws_s3_bucket" "data" {
  bucket = "company-data"
  acl    = "public-read"  # tfsec سيعلم هذا
}

# جيد: دلو خاص مع تشفير
resource "aws_s3_bucket" "data" {
  bucket = "company-data"
}

resource "aws_s3_bucket_public_access_block" "data" {
  bucket = aws_s3_bucket.data.id

  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

resource "aws_s3_bucket_server_side_encryption_configuration" "data" {
  bucket = aws_s3_bucket.data.id

  rule {
    apply_server_side_encryption_by_default {
      sse_algorithm = "aws:kms"
    }
  }
}

مقاييس الأمان

تتبع هذه في لوحة معلومات الأمان:

المقياس الهدف لماذا يهم
متوسط وقت المعالجة (MTTR) < 7 أيام (حرج) سرعة الاستجابة
كثافة الثغرات < 1 لكل 1000 سطر جودة الكود
معدل الإيجابيات الكاذبة < 10% فعالية الأداة
معدل حظر خط الأنابيب تتبع الاتجاه ثقافة الأمان
الأسرار المكتشفة 0 في الإنتاج حماية البيانات

نصيحة المقابلة: أكد أن DevSecOps يتعلق بالثقافة، وليس الأدوات فقط. ناقش كيف ستبني برامج أبطال الأمان وتمكين المطورين من إصلاح المشاكل بشكل مستقل.

في الوحدة التالية، سنغطي أمان السحابة والبنية التحتية. :::

اختبار

الوحدة 3: أمان التطبيقات

خذ الاختبار