أمان التطبيقات
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؟"
الإجابة:
- لا تلتزم الأسرار أبداً - استخدم .gitignore، خطافات pre-commit
- استخدم مديري الأسرار - AWS Secrets Manager، HashiCorp Vault، GitHub Secrets
- قم بالتدوير بانتظام - تدوير آلي مع الإصدارات
- راقب الوصول - سجل من يصل للأسرار، متى
- أقل الصلاحيات - احقن فقط الأسرار المطلوبة لكل وظيفة
- افحص التسريبات - 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 /app /app
COPY . /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 يتعلق بالثقافة، وليس الأدوات فقط. ناقش كيف ستبني برامج أبطال الأمان وتمكين المطورين من إصلاح المشاكل بشكل مستقل.
في الوحدة التالية، سنغطي أمان السحابة والبنية التحتية. :::