‫Codelab בנושא Prompt Encryption SDK

1. סקירה כללית

בשיעור Codelab הזה נסביר איך להשתמש ב-Prompt Encryption SDK כדי לתקשר בצורה מאובטחת עם מודל שמופעל בסביבת ביצוע מהימנה (TEE) ב-Google Cloud.

מה תלמדו

  • יצירת ערוץ מוצפן ומאומת קריפטוגרפית בין לקוח לבין שרת הסקה מרוחק.
  • אימות הזהות של השרת (גיבוב תוכנה, דגם חומרה, הגדרת הפעלה) באמצעות TLS מאומת.
  • שמירה על ריבונות הנתונים באמצעות הצפנת ההנחיות עד שהן מגיעות למתחם המאובטח המאומת.
  • שימוש ב-Prompt Encryption SDK כדי ליצור אינטראקציה עם vLLM שפועל ב-Confidential Space.

הדרישות

  • פרויקט ב-Google Cloud עם חיוב מופעל.
  • ה-SDK של Google Cloud‏ (gcloud) מותקן ומאומת.
  • סביבת Python 3.10 ואילך.
  • טוקן של Hugging Face להורדה של מודלים של Gemma.
  • היכרות עם חומות אש של VPC ומכסת כתובות IP חיצוניות.
  • כדי ליצור את ה-SDK באופן מקומי, צריך לקמפל את התוסף _ekm.c C. השלב הזה ייכשל אם כותרות Python C לא מותקנות. כדי לפתור את הבעיה, צריך להתקין את python3-dev (למשל, sudo apt-get install python3-dev ב-Debian/Ubuntu).

2. הגדרת משאבים בענן

לפני שמתחילים, חשוב לוודא שהפעלתם את ממשקי ה-API הנדרשים והגדרתם את הסביבה.

1. מפעילים את ממשקי ה-API הנדרשים:

gcloud services enable compute.googleapis.com \
    confidentialcomputing.googleapis.com \
    logging.googleapis.com \
    artifactregistry.googleapis.com \
    cloudbuild.googleapis.com

2. מגדירים את Docker:

gcloud auth configure-docker gcr.io

3. הגדרת טוקן של Hugging Face:

export HF_TOKEN="your_token"

4. משכפלים את המאגר:

git clone https://github.com/google/prompt-encryption-sdk && cd prompt-encryption-sdk

3. תרחיש

אנחנו נשתמש ב:

  • לקוח: סביבת Python מקומית או מכונה וירטואלית רגילה.
  • שרת: מופע vLLM שמפרסם מודל בקוד פתוח (לדוגמה, Gemma) בתוך Confidential Space (TDX/SEV-SNP).
  • SDK: ספריית Python‏ prompt_encryption_sdk.

4. שלב 0: הגדרת השרת

לפני שהלקוח יכול לאמת משהו, אנחנו צריכים שרת שפועל ב-Confidential Space. סקריפט bash שסופק מטפל בהקצאת ההרשאות.

./codelabs/setup.sh --project-id <PROJECT_ID>

הסקריפט setup.sh מבצע את הפעולות הבאות:

  1. מפעיל את ממשקי ה-API הנדרשים (Compute, ‏ Confidential Computing, ‏ Logging, ‏ Artifact Registry, ‏ Cloud Build).
  2. יוצר את קובץ האימג' של Docker ומעביר אותו בדחיפה (עוטף את vLLM עם תוכנת ביניים מאומתת של TLS).
  3. הכלי מקצה חשבון שירות עם ההרשאות הנדרשות.
  4. יצירת Confidential VM (מופע A3 עם GPU מסוג H100 ו-TDX מופעל).
  5. הגדרה של רשתות ואיזון עומסים (מאזן עומסי רשת להעברת סיגנל ללא שינוי).
  6. שמירת הפלט (גיבוב תמונה וכתובת IP של איזון עומסים) בקבצים מקומיים.

5. שלב 1: מריצים את הלקוח המאומת

עכשיו, כשהשרת פועל בצורה מאובטחת, צריך ליצור חיבור מאומת.

python3 -m venv venv
source venv/bin/activate
pip install -r examples/requirements.txt
pip install -e .
./codelabs/run_client.sh <PROJECT_ID>

הסקריפט run_client.sh קורא את פרטי הפריסה ומבצע בקשת Python באמצעות ConfidentialSDKClient. אם האימות נכשל, מופעל AttestationError וההנחיה אף פעם לא נשלחת.

6. שלב 2: ניקוי

כדי להימנע מחיובים, בסיום השימוש במשאבים מומלץ למחוק אותם.

./codelabs/cleanup.sh --project-id <PROJECT_ID>

7. טיפול יסודי

מה קורה במהלך http.post?

  1. TCP/TLS: נוצר חיבור רגיל.
  2. יירוט של לחיצת היד: ה-SDK מושהה לפני שליחת הגוף.
  3. AttestConnection RPC: ערכת ה-SDK שולחת ערך חד-פעמי לשרת.
  4. יצירת הצעת מחיר: השרת שולח בקשה להצעת מחיר לחומרה של סביבת TEE.
  5. אימות: ה-SDK מאמת את חתימת הקידוד ואת המדיניות.
  6. קישור: ערכת ה-SDK מאמתת ש'חומר המפתח המיוצא' של הערוץ תואם לקישור של הסשן בהצעת המחיר.
  7. העברת נתונים: הגוף נשלח רק אם כל הבדיקות עוברות.

8. פתרון בעיות

  • האימות נכשל: צריך לוודא שערך הגיבוב (hash) של התמונה במדיניות זהה לערך הגיבוב של הקונטיינר.
  • החיבור נדחה: מוודאים שאפשר להגיע לשרת ושיציאה 8000 פתוחה.
  • פסק זמן: יצירת הצעת מחיר של TEE יכולה לקחת זמן, לכן חשוב לוודא שהזמן הקצוב לתפוגה מספיק.

9. מזל טוב

סיימתם בהצלחה את ה-Codelab בנושא ערכת ה-SDK להצפנת הנחיות. למדתם איך ליצור ערוץ מוצפן ומאומת קריפטוגרפית בין הלקוח לבין שרת הסקת מסקנות שמבוסס על TEE.

מה השלב הבא?

  • כדאי לעיין בהגדרות מתקדמות של AttestationPolicy.
  • משלבים את ה-SDK עם אפליקציות קיימות בסביבת הייצור.
  • מידע נוסף על Confidential Space ועל מודלים של חומרה מסוג TEE

קריאה נוספת