
# שילוב ציות מבוסס AI בתהליכי CI/CD

בעולם SaaS תחרותי של היום, **מהירות** ו‑**אמון** אינם עוד מטרות נפרדות—הן חייבות ללכת יחד. צוותי פיתוח משחררים קוד פעמים רבות ביום, בעוד צוותי האבטחה והציות עדיין נדרשים להפיק מסמכי אודיט מקיפים לאחר כל שחרור משמעותי. החיכוך שנוצר יוצר צוֹק, מעכב עסקאות ומגדיל את הסיכון לאי‑ציות.

היכרות עם **Procurize**, הפלטפורמה המונעת ב‑AI שמרכזת שאלונים, מסמכי מדיניות והוכחות ציות. בעוד שהרבה לקוחות כבר משתמשים ב‑Procurize לאוטומציית תשובות לאודיטים חיצוניים, קו מרחב חדש מתגלה: **הטמעת האוטומציה הזו ישירות בצינורות CI/CD (אינטגרציה מתמשכת / פריסה מתמשכת)**. באמצעות טיפול בציות כתודף קוד וניצול סיוע AI בזמן אמת, ארגונים יכולים להשיג **הבטחת אבטחה מתמשכת** — בדיוק כפי שהם משיגים פריסה מתמשכת היום.

מאמר זה מסביר מדוע אינטגרציית ציות עם CI/CD חשובה, מפרט את תבניות הארכיטקטורה שמאפשרות זאת, ומספק מדריך שלב‑אחר‑שלב עם קטעי קוד. בין אם אתה מוביל **DevSecOps**, **CISO**, או מנהל מוצר, תצא עם מפת דרכים פרקטית להפיכת הציות מרשימת בדיקה לאחר שחרור ל**רקמת הגנה מתמשכת**.

---

## למה הציות המסורתי הוא צוֹק

| גישה מסורתית | CI/CD משולב AI |
|---------------|----------------|
| מילוי ידני של שאלונים לאחר שחרור | תשובות אוטומטיות, מונעות מדיניות שנוצרות בזמן הבנייה |
| עדכוני מחסן מרכזי רבעוניים | עדכוני מדיניות בזמן אמת מתפזרים באופן מיידי |
| מבקשי האודיט מבקשים הוכחות שבועות אחרי שחרור | תיעוד הוכחות מצורף לכל ארטיפקט של בנייה |
| צוות הציות משמש כשוער, מאט את ההפצה | הציות הופך למשימה משותפת המוטמעת בצינור |

**נקודות כאב מרכזיות**:

1. **שיהוי** – הוכחות האבטחה נוצרות לעיתים שבועות אחרי השחרור, מה שמעלה סיכון לרגרסיה.  
2. **שגיאות אנוש** – תעתוק ידני של תשובות המדיניות גורם לחוסר עקביות.  
3. **שכפול** – צוותים מקיימים מסמכי מדיניות שונים לאודיט ולשימוש פנימי.  
4. **חוסר נראות** – מהנדסים כמעט אינם רואים את מצב הציות עד לבקשת אודיט.

בהעברת הציות לתוך זרימת CI/CD, אתה ממזער את הבעיות הללו, והופך את הציות ל**פונקציה חזויה, מונעת נתונים**.

---

## מושגים מרכזיים: מדיניות כתודף קוד, תשובות שנוצרו בעזרת AI, והוכחה כתוצר

1. **מדיניות כתודף קוד** – שמור את מדיניות האבטחה (לדוגמה **[SOC 2](https://secureframe.com/hub/soc-2/what-is-soc-2)**, **[ISO 27001](https://www.iso.org/standard/27001)**, **[GDPR](https://gdpr.eu/)**) במאגר מבוקר גרסאות (Git). כל מדיניות מתוארת בפורמט מכונה (YAML/JSON) שניתן לנתח בעזרת כלים.  

2. **תשובות שנוצרו בעזרת AI** – מנוע ה‑LLM של Procurize יכול לעבד את הגדרות המדיניות וליצור תשובות תמציתיות מוכנות לאודיט לשאלות השאלון. ה‑AI גם מעניק רמת ביטחון, ומסמן היכן נדרש סקירה אנושית.  

3. **הוכחות כתוצר** – כחלק מהבנייה, הצינור מייצר הוכחות בלתי ניתנות לשינוי (למשל, צילומי תצורת מערכת, יומני גישה, דוחות מבחן). Procurize מקשר הוכחות אלו לתשובות שנוצרו, ובכך יוצר **מקור אמת יחיד** לאודיטורים.

שלושה שכבות אלו מרכיבים **לולאת משוב ציות מתמשכת**:

```
git push → צינור CI → יצירת תשובות AI → צירוף הוכחה → עדכון לוח בקרה ציות
```

---

## תכנית ארכיטקטורה

להלן תרשים ברמה גבוהה של האינטראקציה בין המרכיבים. התרשים כתוב ב‑Mermaid כך שהמאמר נשאר נייד.

```mermaid
graph LR
    A[מפתח מחויב קוד] --> B["שרת CI (Jenkins/GitHub Actions)"]
    B --> C["מאגר מדיניות (Git)"]
    B --> D["שלב בנייה ובדיקה"]
    D --> E["יצירת הוכחות כתוצר"]
    C --> F["מנוע מדיניות Procurize (API)"]
    E --> G["שירות תשובות AI של Procurizer (API)"]
    F --> G
    G --> H[מאגר מטא‑נתוני ציות]
    H --> I[לוח בקרה ציות / אודיטורים]
    style A fill:#f9f,stroke:#333,stroke-width:2px
    style I fill:#bbf,stroke:#333,stroke-width:2px
```

**רכיבים**:

- **מאגר מדיניות** – מאגר Git מרכזי עם הגדרות מדיניות (`policies/`).  
- **שרת CI** – מריץ בנייה, בדיקות, ניתוח סטטי, ומפעיל שלבי ציות.  
- **מחולל הוכחות** – סקריפטים המייצרים קובצי JSON/YAML של הוכחות (למשל `evidence/aws-iam.json`).  
- **API של Procurize** – שני קצוות:  
  - `/policies` להעלאת או שליפת סט המדיניות העדכני.  
  - `/answers` להגשת הוכחות וקבלת תשובות שאלון שנוצרו ב‑AI.  
- **מאגר מטא‑נתוני ציות** – DB קל (למשל DynamoDB) המתעד את מצב הציות של כל בנייה.  
- **לוח בקרה** – ממשק UI של Procurize או תצוגה מותאמת המציגה ציות לפי גרסה.

---

## מדריך יישום שלב‑אחר‑שלב

### 1. הכנת מאגר המדיניות

צור מאגר Git (או sub‑module) שבו תוגדר כל מסגרת ציות כקובץ YAML.

```yaml
# policies/soc2.yaml
framework: SOC 2
controls:
  - id: CC6.1
    description: "הצפנת נתונים במנוחה"
    requirement: "כל הנתונים בייצור חייבים להיות מוצפנים באמצעות AES‑256."
    evidence_type: "תצורת הצפנה"
  - id: CC6.2
    description: "הצפנת נתונים בתעבורה"
    requirement: "TLS 1.2+ חייב להיות מגובה לכל תקשורת חיצונית."
    evidence_type: "תצורת TLS"
```

המחויב את המאגר והגדר הגנת סניף `main`; רק צוות הציות יכול למזג שינויים. המפתחים משכו את המדיניות העדכנית כחלק מהצינור.

### 2. הוספת שלב CI לאיסוף הוכחות

בקובץ קונפיגורציית CI (לדוגמה GitHub Actions) הוסיפו משימה לאחר הבדיקות.

```yaml
name: CI
on:
  push:
    branches: [main]

jobs:
  build-and-test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: הרצת בדיקות יחידה
        run: npm test

  collect-evidence:
    needs: build-and-test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: יצוא צילומי מדיניות IAM של AWS
        run: |
          aws iam get-account-authorization-details > evidence/aws-iam.json
      - name: יצוא תצורת TLS
        run: |
          grep -i 'tls' /etc/nginx/nginx.conf > evidence/tls-config.txt
      - name: העלאת הוכחות כארטיפקט
        uses: actions/upload-artifact@v3
        with:
          name: compliance-evidence
          path: evidence/
```

המשימה יוצרת תיקייה `evidence/` עם קבצי JSON או טקסט התואמים ל‑`evidence_type` שהוגדר במדיניות.

### 3. קריאה לשירות תשובות AI של Procurize

צור סקריפט קטן (`procurize-submit.sh`) הקורא את ההוכחות, פונה ל‑API של Procurize, ושומר את התשובות בקובץ JSON.

```bash
#!/usr/bin/env bash
set -euo pipefail

API_KEY="${PROCURIZE_API_KEY}"
POLICY_REPO="https://github.com/yourorg/compliance-policies.git"
EVIDENCE_DIR="evidence"

# משיכת מדיניות עדכנית (אופציונלי אם המדיניות כבר משוכתבת)
git clone "$POLICY_REPO" policies_tmp
tar -czf policies.tar.gz -C policies_tmp .

# קריאה ל‑API של תשובות
curl -s -X POST "https://api.procurize.com/v1/answers" \
  -H "Authorization: Bearer $API_KEY" \
  -F "policies=@policies.tar.gz" \
  -F "evidence=@${EVIDENCE_DIR}" \
  -o answers.json

# שמירת תשובות כארטיפקט CI לשלבי המשך
jq . answers.json > compliance/answers-${GITHUB_SHA}.json
```

הוסיפו שלב CI להרצת הסקריפט והעלאת קובץ `answers-*.json` כארטיפקט.

```yaml
  generate-answers:
    needs: collect-evidence
    runs-on: ubuntu-latest
    env:
      PROCURIZE_API_KEY: ${{ secrets.PROCURIZE_API_KEY }}
    steps:
      - uses: actions/checkout@v3
      - name: הורדת ארטיפקט הוכחות
        uses: actions/download-artifact@v3
        with:
          name: compliance-evidence
          path: evidence/
      - name: הרצת סקריפט שליחת Procurize
        run: ./procurize-submit.sh
      - name: העלאת ארטיפקט תשובות
        uses: actions/upload-artifact@v3
        with:
          name: compliance-answers
          path: compliance/
```

### 4. שמירת מטא‑נתוני ציות

פרסו פונקציית Lambda (או פונקציית Serverless) שנקראת באירוע העלאת ארטיפקט, מפרשת `answers.json`, וכותבת רשומה ל‑DynamoDB:

```python
import json, boto3, os

ddb = boto3.resource('dynamodb')
table = ddb.Table(os.getenv('COMPLIANCE_TABLE'))

def handler(event, context):
    s3 = boto3.client('s3')
    bucket = event['Records'][0]['s3']['bucket']['name']
    key = event['Records'][0]['s3']['object']['key']
    obj = s3.get_object(Bucket=bucket, Key=key)
    answers = json.loads(obj['Body'].read())

    record = {
        'build_id': answers['metadata']['build_id'],
        'status': 'COMPLIANT' if answers['overall_confidence'] > 0.9 else 'REVIEW_NEEDED',
        'timestamp': answers['metadata']['timestamp'],
        'summary': answers['summary']
    }
    table.put_item(Item=record)
    return {'statusCode': 200}
```

כעת לכל בנייה יש רשומת ציות נגישה דרך לוח בקרה של Procurize או UI מותאם.

### 5. הגדרת שער ציות (אופציונלי)

אם ברצונכם שהצינור **כשל** כאשר הביטחון נמוך, הוסיפו שלב סופי שבודק את DynamoDB ומפסיק את ההמשך אם המצב `REVIEW_NEEDED`.

```yaml
  compliance-gate:
    needs: generate-answers
    runs-on: ubuntu-latest
    steps:
      - name: בדיקת מצב ציות
        run: |
          STATUS=$(aws dynamodb get-item \
            --table-name ${{ secrets.COMPLIANCE_TABLE }} \
            --key '{"build_id": {"S": "${{ github.sha }}"}}' \
            --query 'Item.status.S')
          if [[ "$STATUS" != "COMPLIANT" ]]; then
            echo "שער הציות נכשל: $STATUS"
            exit 1
          fi
```

כאשר השער חוצה, הארטיפקט מתקדם לייצור. אם הוא נכשל, המפתחים מקבלים משוב מיידי ויכולים לתקן פערי מדיניות לפני השחרור.

---

## היתרונות המשוערים

| מדד | תהליך מסורתי | תהליך משולב CI/CD |
|-----|---------------|---------------------|
| משך ממוצע לענות על שאלון | 10–14 ימים | 2–4 שעות |
| מאמץ ידני (שעות) לכל שחרור | 12–20 שעות | ≤ 2 שעות (בעיקר סקירה) |
| שלמות הוכחות לאודיט | 70‑80 % | 95‑100 % |
| תדירות חסימות שחרור הקשורות לציות | 1 לכל ספרינט | < 0.1 לכל ספרינט |

מעבר למהירות, האינטגרציה **מאיצה את הסיכון** על‑ידי וידוא שכל קומיט נבחן מול גרסת המדיניות העדכנית, ומשפרת את היכולת לאודיט דרך הוכחות בלתי ניתנות לשינוי המקושרות לכל בנייה.

---

## בעיות נפוצות וכיצד למנוע אותן

1. **מטמון מדיניות ישן** – ודאו כי משימת ה‑CI תמיד מושכת את המאגר העדכני. השתמשו בקובץ נעילה או checksum לאימות.  
2. **תלות יתר ב‑AI** – קבעו רף ביטחון (למשל 85 %) שבו ה‑AI מסמן צורך בסקירה אנושית.  
3. **פיצוץ גודל הוכחות** – אחסנו הוכחות בארכיונים מכווצים והמציאו חוקים למחיקת ארטיפקטים ישנים בהתאם למדיניות שלכם.  
4. **אבטחת מפתחות API** – שמרו את פרטי הגישה של Procurize במאגר סוד של ה‑CI (GitHub Secrets, Azure Key Vault) וגלגלו אותם באופן קבוע.

---

## הרחבת התבנית: מצרך מצרך מה‑CI לממשק CD ומעקב בזמן ריצה

לאחר שהציות מוטמע ב‑**CI**, ניתן להרחיב את המשמרות לאותו צינור **CD** (פריסה) ולמעקב בזמן ריצה:

- **אימות מדיניות בזמן פריסה** – לפני שחרור Helm, הריצו בדיקת מדיניות‑as‑code שמוודאת RBAC של Kubernetes, מדיניות רשת וניהול סודות לפי אותם קבצי YAML.  
- **זרימת הוכחות בזמן ריצה** – השתמשו במצלמות (Falco, OpenTelemetry) כדי לשדר אירועי אבטחה אל מאגר הוכחות של Procurize, ולסגור את הלולאה לציות **מתמשך**.  
- **פורטל ציות לשירות עצמי** – פתחו תצוגה לקריאה בלבד של לוח הבקרה לציבור הלקוחות, והפכו את רמת הציות לנקודת מכירה.

---

## TL;DR

- שמרו את כל מדיניות האבטחה ב‑Git כ‑**policy‑as‑code** (YAML/JSON).  
- הוסיפו שלבי CI שמייצרים **הוכחות בלתי ניתנות לשינוי** ושולחים אותן לשירות **AI Answer API** של Procurize.  
- שמרו את התשובות והדירוגים במאגר מטא‑נתונים.  
- השתמשו ב‑**שער ציות** לחסום שחרורים שלא עומדים ברף הביטחון.  
- קבלו מוכנות לאודיט בזמן אמת, הפחיתו מאמץ ידני, ותאיצו את זמן השוק.

באמצעות אינטגרציית פלטפורמת הציות המונעת AI של Procurize בתהליכי CI/CD, הציות מתוורר מרק נקודת ביקורת תקופתית ל**מערך הגנה מתמשך**, בדיוק כמו DevOps מתייחס לבדיקות, אבטחה ותצפיות.

---

## ראו גם

- [אינטגרציית NIST CSF עם צינורות CI/CD (NIST SP 800‑53)](https://csrc.nist.gov/publications/detail/sp/800-53/rev-5/final)  
- [GitHub Actions עבור שרשראות אספקת תוכנה מאובטחת](https://github.com/github/securitylab)  
- [מדריך Microsoft Azure למדיניות כקוד](https://learn.microsoft.com/azure/governance/policy/)