الامتثال والحوكمة ونضج DevSecOps
أتمتة الامتثال (SOC2, HIPAA, PCI-DSS)
4 دقيقة للقراءة
الامتثال ليس مربع تأشير—إنه عملية مستمرة. DevSecOps يمكّن الامتثال المستمر من خلال أتمتة جمع الأدلة والتحقق من الضوابط ومسارات التدقيق عبر دورة حياة تطوير البرمجيات.
نظرة عامة على أطر الامتثال
| الإطار | التركيز | المتطلبات الرئيسية |
|---|---|---|
| SOC 2 | منظمات الخدمة | الأمان، التوفر، سلامة المعالجة، السرية، الخصوصية |
| HIPAA | بيانات الرعاية الصحية | حماية PHI، ضوابط الوصول، سجلات التدقيق |
| PCI-DSS | بيانات بطاقات الدفع | التشفير، التحكم في الوصول، إدارة الثغرات |
| ISO 27001 | أمان المعلومات | إدارة المخاطر، ضوابط الأمان |
| GDPR | حماية بيانات الاتحاد الأوروبي | خصوصية البيانات، الموافقة، حق المحو |
هندسة الامتثال المستمر
┌─────────────────────────────────────────────────────────┐
│ خط أنابيب الامتثال المستمر │
├─────────────────────────────────────────────────────────┤
│ │
│ الكود ──▶ البناء ──▶ الاختبار ──▶ النشر ──▶ المراقبة │
│ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ ▼ │
│ فحص توقيع فحوصات تدقيق مراقبة │
│ SAST القطع الامتثال التكوين وقت التشغيل │
│ │ │ │ │ │ │
│ └────────┴─────────┴──────────┴──────────┘ │
│ │ │
│ ▼ │
│ جمع الأدلة │
│ ومسار التدقيق │
│ │
└─────────────────────────────────────────────────────────┘
أتمتة امتثال SOC 2
تعيين معايير خدمة الثقة
| المعيار | ضابط DevSecOps | الأداة/التنفيذ |
|---|---|---|
| CC6.1 التحكم في الوصول | RBAC، MFA | GitHub Teams، Vault |
| CC6.6 التسجيل | سجلات التدقيق | CloudWatch، ELK |
| CC7.1 إدارة الثغرات | الفحص | Snyk، Trivy |
| CC7.2 إدارة التغيير | مراجعة الكود | GitHub PRs |
| CC8.1 الاستجابة للحوادث | التنبيه | PagerDuty، SIEM |
التحقق الآلي من الضوابط
# .github/workflows/soc2-controls.yml
name: SOC 2 Control Validation
on:
schedule:
- cron: '0 0 * * *' # يومياً
workflow_dispatch:
jobs:
access-control-audit:
runs-on: ubuntu-latest
steps:
- name: Audit GitHub Permissions
uses: actions/github-script@v7
with:
script: |
const collaborators = await github.rest.repos.listCollaborators({
owner: context.repo.owner,
repo: context.repo.repo
});
const admins = collaborators.data.filter(c =>
c.permissions.admin
);
console.log(`Admin users: ${admins.length}`);
// تنبيه إذا كان هناك مسؤولون كثر
if (admins.length > 3) {
core.setFailed('Too many admin users - review access');
}
- name: Verify Branch Protection
uses: actions/github-script@v7
with:
script: |
const protection = await github.rest.repos.getBranchProtection({
owner: context.repo.owner,
repo: context.repo.repo,
branch: 'main'
});
const required = protection.data.required_pull_request_reviews;
if (!required || required.required_approving_review_count < 1) {
core.setFailed('Branch protection requires at least 1 reviewer');
}
vulnerability-management:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Security Scan
uses: snyk/actions/node@master
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
with:
args: --severity-threshold=high
- name: Generate SBOM
uses: anchore/sbom-action@v0
with:
format: spdx-json
output-file: sbom.json
- name: Upload Evidence
uses: actions/upload-artifact@v4
with:
name: compliance-evidence-${{ github.run_id }}
path: |
sbom.json
snyk-results.json
ضوابط امتثال HIPAA
قائمة فحص حماية PHI
# hipaa-controls.yaml
controls:
access_control:
- name: "تحديد المستخدم الفريد"
requirement: "164.312(a)(2)(i)"
implementation: "حسابات مستخدمين فردية مع SSO"
evidence: "سجلات توفير المستخدمين"
- name: "تسجيل الخروج التلقائي"
requirement: "164.312(a)(2)(iii)"
implementation: "انتهاء الجلسة بعد 15 دقيقة"
evidence: "تكوين التطبيق"
audit_controls:
- name: "سجلات التدقيق"
requirement: "164.312(b)"
implementation: "تسجيل شامل للوصول إلى PHI"
evidence: "لوحة تجميع السجلات"
encryption:
- name: "التشفير في الراحة"
requirement: "164.312(a)(2)(iv)"
implementation: "تشفير AES-256 لقواعد البيانات"
evidence: "تدقيق تكوين قاعدة البيانات"
- name: "التشفير في النقل"
requirement: "164.312(e)(1)"
implementation: "TLS 1.3 لجميع الاتصالات"
evidence: "فحص شهادة SSL"
الكشف الآلي عن PHI
# فحص PHI في الكود/السجلات
- name: PHI Detection Scan
run: |
# أنماط PHI الشائعة
patterns=(
'[0-9]{3}-[0-9]{2}-[0-9]{4}' # SSN
'[0-9]{3}-[0-9]{3}-[0-9]{4}' # هاتف
'[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}' # بريد إلكتروني
)
for pattern in "${patterns[@]}"; do
if grep -rE "$pattern" --include="*.log" --include="*.txt" .; then
echo "::error::Potential PHI detected in logs"
exit 1
fi
done
أتمتة PCI-DSS
تعيين المتطلبات
| المتطلب | الوصف | الأتمتة |
|---|---|---|
| 1.x | تكوين جدار الحماية | فحص IaC (tfsec) |
| 2.x | التكوينات الآمنة | معايير CIS |
| 3.x | حماية البيانات المخزنة | التحقق من التشفير |
| 6.x | التطوير الآمن | فحص SAST/DAST |
| 10.x | تتبع الوصول | تسجيل التدقيق |
| 11.x | اختبار الأمان | فحص الثغرات |
ضوابط PCI الآلية
# .github/workflows/pci-compliance.yml
name: PCI-DSS Compliance
on:
push:
branches: [main]
schedule:
- cron: '0 0 * * 0' # أسبوعياً
jobs:
pci-requirement-6:
name: "التطوير الآمن (المتطلب 6)"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# المتطلب 6.3.2 - مراجعة الكود
- name: Verify Code Review
uses: actions/github-script@v7
with:
script: |
const prs = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'closed',
base: 'main',
per_page: 50
});
const unreviewed = prs.data.filter(pr =>
pr.merged_at && !pr.requested_reviewers?.length
);
if (unreviewed.length > 0) {
console.log(`Unreviewed PRs: ${unreviewed.length}`);
}
# المتطلب 6.5 - فحص الثغرات
- name: SAST Scan
uses: github/codeql-action/analyze@v3
# المتطلب 6.6 - أمان تطبيقات الويب
- name: DAST Scan
uses: zaproxy/action-baseline@v0.12.0
with:
target: 'https://staging.example.com'
pci-requirement-11:
name: "إدارة الثغرات (المتطلب 11)"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Container Vulnerability Scan
uses: aquasecurity/trivy-action@master
with:
image-ref: 'myapp:latest'
format: 'sarif'
output: 'trivy-results.sarif'
severity: 'CRITICAL,HIGH'
- name: Infrastructure Scan
run: |
checkov -d . --framework terraform \
--output-file-path checkov-report.json \
--output json
جمع الأدلة والتقارير
مستودع الأدلة المركزي
# evidence-collector.yml
name: Collect Compliance Evidence
on:
schedule:
- cron: '0 0 1 * *' # شهرياً
jobs:
collect-evidence:
runs-on: ubuntu-latest
steps:
- name: Collect Access Logs
run: |
aws cloudtrail lookup-events \
--start-time $(date -d '30 days ago' --iso-8601) \
--end-time $(date --iso-8601) \
> access-logs.json
- name: Collect Vulnerability Reports
run: |
snyk monitor --json > snyk-report.json
trivy image --format json myapp:latest > trivy-report.json
- name: Generate Compliance Report
run: |
python scripts/generate_compliance_report.py \
--framework soc2 \
--output compliance-report.pdf
- name: Upload to Evidence Store
uses: actions/upload-artifact@v4
with:
name: monthly-compliance-${{ github.run_id }}
path: |
access-logs.json
snyk-report.json
trivy-report.json
compliance-report.pdf
retention-days: 365 # الاحتفاظ للتدقيق
تكامل لوحة الامتثال
# إرسال المقاييس إلى لوحة الامتثال
- name: Report Compliance Status
run: |
curl -X POST https://compliance-dashboard.example.com/api/v1/report \
-H "Authorization: Bearer ${{ secrets.DASHBOARD_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{
"framework": "SOC2",
"date": "'$(date --iso-8601)'",
"controls": {
"CC6.1": {"status": "compliant", "evidence": "access-audit.json"},
"CC7.1": {"status": "compliant", "evidence": "vuln-scan.json"},
"CC7.2": {"status": "compliant", "evidence": "pr-reviews.json"}
}
}'
النقاط الرئيسية
| الممارسة | الفائدة |
|---|---|
| أتمت جمع الأدلة | يقلل وقت التحضير للتدقيق |
| التحقق المستمر من الضوابط | التقاط الانتهاكات مبكراً |
| السياسات المتحكم بها بالإصدارات | مسار تدقيق للتغييرات |
| الفحص المتكامل | الأمان + الامتثال في خط واحد |
بعد ذلك، سنستكشف لوحات الأمان وإدارة الثغرات. :::