עומס עבודה נוצר על ידי יוצר עומס העבודה, והוא מעבד את הנתונים הסודיים שמשתפי פעולה רוצים לעבוד איתם.
כדי ליצור עומס עבודה, המחבר של עומס העבודה צריך להכין את המשאבים הבאים:
אפליקציה לעיבוד הנתונים הסודיים. אתם יכולים לכתוב את האפליקציה בכל שפה שתבחרו, בתנאי שתיצרו תמונה מבוססת-קונטיינר שתומכת בה.
קובץ אימג' בקונטיינר לאריזת האפליקציה באמצעות Docker.
מאגר ב-Artifact Registry לאחסון קובץ האימג' של Docker.
מדיניות ההפעלה מוגדרת בקובץ אימג' של קונטיינר ושולטת באופן שבו אפשר להריץ עומס עבודה, וגם מגבילה את היכולת של מפעיל עומס עבודה זדוני.
כדי לפרוס את עומס העבודה, מפעיל של עומס עבודה מריץ מכונה וירטואלית מסוג Confidential VM על סמך תמונה של Confidential Space. הפעולה הזו מאחזרת את התמונה בקונטיינר מ-Artifact Registry ומריצה אותה.
כדי שמשתפי פעולה עם נתונים יוכלו לגשת לנתונים שלהם, הם צריכים לאמת את האישורים של עומס העבודה.
לפני שמתחילים
כתיבת עומס עבודה ל-Confidential Space היא יותר מכתיבת קוד וניפוי באגים. בנוסף, צריך לדבר עם משתפי הפעולה כדי להעריך את הצרכים שלהם, להגדיר את הסביבה, לארוז את הקוד בקובץ אימג' בקונטיינר ולעבוד עם מפעיל עומסי עבודה כדי לוודא שהפריסה מתבצעת בצורה נכונה.
שיחה עם שותפי העריכה של הנתונים
לפני שמתחילים לכתוב את האפליקציה, צריך לנהל שיחה עם משתפי הפעולה שלכם בנוגע לנתונים הפרטיים שאתם רוצים לעבוד איתם. דוגמאות לשאלות שאפשר לשאול:
מהם מזהי הארגונים שמעורבים?
מה מספרי הפרויקטים שקשורים לאירוע?
מהם Google Cloud המשאבים שאני צריך לגשת אליהם, ומהם המזהים והשמות שלהם?
האם יש משאבים שאני צריך לגשת אליהם שלא מנוהלים על ידי Google Cloud IAM?
באיזה שירות אימות רוצים להשתמש – Google Cloud Attestation או Intel Trust Authority?
איך האפליקציה צריכה להשוות ולעבד את הנתונים הפרטיים?
באיזה פורמט צריך להיות הפלט?
איפה צריך לאחסן את הפלט, והאם צריך להצפין אותו?
האם כל שותפי העריכה של הנתונים רואים את אותה תוצאה, או שהפלט ייחודי לכל אחד מהם?
בנוסף, לכל שותף נתונים עשויות להיות הדרישות בנושא פרטיות ייחודיות שאתם צריכים לעמוד בהן. חשוב מאוד לוודא ששום נתון פרטי לא ייחשף כתוצאה מעומס העבודה.
בניית פתרון Confidential Space
מומלץ להגדיר שני פרויקטים (או יותר) עם הרשאות מתאימות כסביבת בדיקה, כמו במאמר יצירת סביבת Confidential Space ראשונה. כדאי לנסות לשחזר את הגדרות הפרויקט של משתפי הפעולה בנתונים ככל האפשר. כך תוכלו לצבור ניסיון בהרשאות בין פרויקטים ובאחזור הנתונים שאתם צריכים ממשאבי Google Cloud ספציפיים. הוא גם יכול לעזור לכם להבין את התפקידים של מפעיל עומס העבודה ושל משתף הנתונים ואת האחריות שלהם.
בשלב הראשוני של בניית האתר, מומלץ לפעול לפי השיטות הבאות:
כשעובדים כמשתפי פעולה בנתונים, מומלץ להשתמש באימות הצהרות כמה שפחות כדי לא להאט את תהליך הפיתוח.
כשעובדים כמפעילים של עומסי עבודה, כדאי להשתמש באימג' לניפוי באגים של Confidential Space במקום באימג' של סביבת ייצור כשפורסים את עומס העבודה. כך יש לכם יותר דרכים לפתור בעיות בעומס העבודה.
ככל שהאפליקציה מתפתחת והמצב שלה הופך לצפוי יותר, אפשר להגביר את האבטחה של הפתרון באמצעות אימות אישור ומדיניות הפעלה, ולעבור לתמונה של Confidential Space בסביבת ייצור.
אחרי שמוודאים שעומס העבודה פועל בצורה תקינה בסביבת הבדיקה, אפשר לעבור לבדיקה בפרויקטים של שותפי הנתונים עם משאבים אמיתיים, אבל עם נתונים פיקטיביים, כדי להדגים לשותפי הנתונים איך הכול עובד. בשלב הזה, יכול להיות שתתחילו לעבוד עם מפעיל עומסי עבודה עצמאי.
אחרי שמוודאים שהכול פועל והפלט הוא כמו שציפיתם, אפשר להתחיל לבדוק את הנתונים של הסביבה הפרודקטיבית. אחרי שהבדיקה מסתיימת וכל הצדדים מאשרים את התוצאות, עומס העבודה מוכן להעברה לסביבת הייצור.
כדאי להיזהר מהפלט
במהלך בדיקת הקוד, יכול להיות שתתפתו לנפות באגים באמצעות הדפסה ב-STDOUT או ב-STDERR. אם תבחרו לעשות זאת, הקפידו לא לחשוף נתונים פרטיים שצדדים אחרים יוכלו לקרוא על ידי גישה ליומנים. לפני שהקוד מתחיל לפעול בסביבת הייצור, צריך לוודא שהוא לא מוציא פלט של שום דבר חוץ ממה שנדרש.
אותו עיקרון נכון גם לגבי הפלט הסופי. צריך לספק רק תוצאה סופית שלא פוגעת בפרטיות ובסודיות של הנתונים המקוריים.
יצירת תמונה בקונטיינר באמצעות Docker
צריך לארוז את האפליקציות בקובץ אימג' של קונטיינר שנבנה על ידי Docker, שמאוחסן ב-Artifact Registry. כשפורסים עומס עבודה, התמונה של Confidential Space מושכת את קובץ האימג' של Docker ממאגר Artifact Registry, מפעילה אותו והאפליקציה יכולה להתחיל לעבוד על משאבי הפרויקט המתאימים.
כשיוצרים קובץ אימג' של Docker, חשוב לקחת בחשבון את הנקודות הבאות:
יכולות נוספות של Linux
עומס העבודה של Confidential Space פועל במאגר Linux באמצעות containerd. הקונטיינר הזה פועל באמצעות יכולות ברירת המחדל של Linux.
כדי להוסיף יכולות, אפשר להשתמש ב-tee-added-capabilities.
מגבלות על הדיסק והזיכרון
ב-Confidential Space, המערכת משנה את הגודל של מחיצת ה-stateful בדיסק האתחול באופן אוטומטי כשמשתמשים בגדלים גדולים יותר של דיסק אתחול. גודל המחיצה הוא בערך גודל דיסק האתחול פחות 5 GB.
כחלק מההגנות של מערכת הקבצים על השלמות ב-Confidential Space, המערכת מאחסנת בזיכרון תגי שלמות של הדיסק. השימוש בזיכרון הוא בערך 1% תקורה לכל בייט בדיסק. לדוגמה, דיסק בנפח 100GB דורש זיכרון בנפח 1GB, ודיסק בנפח 10TB דורש זיכרון בנפח 100GB.
חשוב לוודא שלא חורגים ממגבלות הזיכרון של המכונה הווירטואלית. הזיכרון הווירטואלי מושבת ב-Confidential Space VMs, ולכן שימוש מוגזם בזיכרון עלול לגרום לקריסת עומס העבודה. מוודאים שהמכונה שבחרתם תומכת בשימוש בזיכרון של עומס העבודה, בנוסף לתקורה של תקינות הדיסק.
כיבויים מבוקרים
כשמפעיל מבקש לכבות מכונה וירטואלית ב-Confidential Space, הכלי Confidential Space Launcher מנסה לכבות את עומס העבודה בצורה מסודרת על ידי שליחת אות SIGTERM. עם קבלת ההודעה, לעומס העבודה יש עד 120 שניות לבצע ניקוי לפני שהכלי להפעלת סביבות חסויות מתחיל בתהליך הכיבוי. עומסי עבודה שלא מטמיעים טיפול באות SIGTERM מסתיימים באופן מיידי עם קבלת האות.
מעמדים זמניים בזיכרון
ב-Confidential Space אפשר להוסיף שטחי אחסון זמניים בזיכרון. הפעולה הזו משתמשת בזיכרון שזמין במכונה הווירטואלית של Confidential Space. מכיוון שהזיכרון הזמני משתמש בזיכרון של Confidential VM, יש לו את אותן תכונות של יושרה וסודיות כמו Confidential VM.
אפשר להשתמש ב-tee-dev-shm-size כדי להגדיל את הגודל של נקודת הטעינה של הזיכרון המשותף /dev/shm עבור עומס העבודה.
הגודל /dev/shm מצוין ב-KB.
אפשר להשתמש ב-tee-mount כדי לציין נקודות הרכבה של tmpfs בקונטיינר הפועל באמצעות הגדרות מופרדות בפסיקים.
הקבצים של type וsource תמיד tmpfs. destination הוא נקודת הגישה, שפועלת בהתאם למדיניות ההפעלה של tee.launch_policy.allow_mount_destinations. אפשר גם לציין את הגודל בבייטים של tmpfs. גודל ברירת המחדל הוא 50% מזיכרון ה-VM.
יציאות לדואר נכנס
כברירת מחדל, מכונות וירטואליות של Confidential Space פועלות עם כלל חומת אש שחוסם את כל היציאות הנכנסות. כשמשתמשים בגרסת תמונה של Confidential Space מגרסה 230600 ואילך, אפשר לציין יציאות נכנסות שיישארו פתוחות ב-Dockerfile כשיוצרים את תמונת עומס העבודה.
כדי לפתוח יציאות, מוסיפים את מילת המפתח EXPOSE ל-Dockerfile, יחד עם מספר היציאה שרוצים להשאיר פתוחה ופרוטוקול אופציונלי של tcp או udp. אם לא מציינים את הפרוטוקול של יציאה, מותרים גם TCP וגם UDP. דוגמה Dockerfile לחשיפת יציאות נכנסות:
FROM alpine:latest
EXPOSE 80
EXPOSE 443/tcp
EXPOSE 81/udp
WORKDIR /test
COPY salary /test
ENTRYPOINT ["/test/salary"]
CMD []
יכול להיות שחלק מהיציאות כבר חשופות, בהתאם לתמונת הבסיס שבה אתם משתמשים. ה-Dockerfile חושף רק יציאות נוספות, הוא לא יכול לחסום יציאות שכבר נפתחו על ידי תמונת הבסיס.
מפעילים של עומסי עבודה צריכים לוודא שהיציאות שנחשפות פתוחות בחומת האש של ה-VPC לפני שמריצים את עומס העבודה. מספרי היציאות יכולים להיות מסופקים על ידי יוצר עומס העבודה, או להימשך מפרטי קובץ אימג' של Docker.
היציאות שנחשפות נרשמות ביומן במסוף ומופנות ל-Cloud Logging כשמשתמשים במשתנה המטא-נתונים tee-container-log-redirect.
מדיניות ההשקה
מדיניות ההפעלה מבטלת את משתני המטא-נתונים של המכונה הווירטואלית שהוגדרו על ידי מפעילים של עומסי עבודה כדי להגביל פעולות זדוניות. מחבר של עומס עבודה יכול להגדיר מדיניות עם תווית כחלק מהיצירה של קובץ אימג' של קונטיינר.
לדוגמה, ב-Dockerfile:
LABEL "tee.launch_policy.allow_cmd_override"="true"
בקובץ BUILD של Bazel:
container_image(
...
labels={"tee.launch_policy.allow_cmd_override":"true"}
...
)
הטבלה הבאה מפרטת את מדיניות ההשקה הזמינה:
| מדיניות | סוג | תיאור |
|---|---|---|
|
אינטראקציה עם:
|
ערך בוליאני (ברירת המחדל היא false) |
ההגדרה קובעת אם האופרטור של עומס העבודה יכול להוסיף יכולות של Linux לקונטיינר של עומס העבודה. |
|
אינטראקציה עם:
|
ערך בוליאני (ברירת המחדל היא false) |
המדיניות קובעת אם מותר לקונטיינר של עומס העבודה לכלול נקודת טעינה של
cgroup עם מרחב שמות בנתיב /sys/fs/cgroup.
|
|
אינטראקציה עם:
|
ערך בוליאני (ברירת המחדל היא false) |
ההגדרה קובעת אם אפשר לבטל את
CMD
שמוגדר ב-Dockerfile של קונטיינר עומס העבודה באמצעות ערך המטא-נתונים
tee-cmd של אופרטור עומס העבודה.
|
|
אינטראקציה עם:
|
מחרוזת מופרדת בפסיקים |
מחרוזת מופרדת בפסיקים של שמות מותרים של משתני סביבה שמפעיל עומס עבודה יכול להגדיר עם ערכי מטא-נתונים של
tee-env-ENVIRONMENT_VARIABLE_NAME.
|
|
אינטראקציה עם:
|
מחרוזת מופרדת באמצעות נקודתיים |
מחרוזת של ספריות הרכבה מותרות, שמופרדות באמצעות נקודתיים, שאליהן מותר למפעיל של עומס העבודה לבצע הרכבה באמצעות לדוגמה: |
|
אינטראקציה עם:
|
מחרוזת מוגדרת |
המדיניות קובעת איך הרישום ביומן פועל אם
הערכים התקינים הם:
|
|
אינטראקציה עם:
|
מחרוזת מוגדרת |
המדיניות קובעת איך יתבצע מעקב אחרי השימוש בזיכרון של עומס העבודה אם
הערכים התקינים הם:
|
הרצות מרובות של עומסי עבודה
כדי להריץ מחדש עומס עבודה, האופרטור של עומס העבודה צריך להפעיל מחדש את מופע ה-VM. הפעולה הזו מפעילה את עומס העבודה בסביבה הכי נקייה שאפשר, ומצפינה את הדיסק של מכונת ה-VM באמצעות מפתח זמני חדש.
הפעלה מחדש מטפלת בווקטור התקיפה של שינוי תמונה של עומס עבודה בדיסק אחרי שהיא הורדה ונמדדה. עם זאת, הוא גם מוסיף תקורה כמו זמן אתחול ושליפת תמונת עומס העבודה לכל הפעלה של עומס העבודה. אם התקורה הזו משפיעה יותר מדי על הביצועים של עומס העבודה, אפשר לקודד הפעלה מחדש של עומס העבודה בתוך עומס העבודה עצמו, אבל זה עלול להגדיל את פרופיל הסיכון.
קבוצות cgroup עם מרחב שמות
עומס העבודה של Confidential Space פועל בלי הרכבה של cgroup כברירת מחדל.
כדי לנהל cgroups בתוך קונטיינר של עומס עבודה, אפשר להשתמש ב-tee-cgroup-ns. מפתח המטא-נתונים הזה מורה למופע של המכונה הווירטואלית ליצור נקודת הרכבה בנתיב /sys/fs/cgroup במערכת הקבצים של הקונטיינר.
קובצי אימג' של קונטיינרים שניתן לשחזר
פיתוח קובץ אימג' של קונטיינר בצורה שניתנת לשחזור יכול לעזור להגביר את האמון בין הצדדים. אתם יכולים ליצור תמונות שניתן לשחזר באמצעות Bazel.
משאבים שלא מנוהלים על ידי Google Cloud IAM
כדי לגשת למשאבים שלא מנוהלים על ידי Google Cloud IAM, עומס העבודה צריך לציין קהל בהתאמה אישית.
מידע נוסף מופיע במאמר גישה למשאבים שלא מנוהלים על ידי Google Cloud IAM.
קובצי אימג' חתומים של קונטיינרים
אפשר לחתום על קובץ אימג' של קונטיינר באמצעות מפתח ציבורי, שמשתף פעולה עם נתונים יכול להשתמש בו לצורך אימות (attestation) במקום לציין תקציר (digest) של תמונה במדיניות WIP שלו.
המשמעות היא שמשתפי הפעולה בנתונים לא צריכים לעדכן את מדיניות ה-WIP שלהם בכל פעם שמעדכנים עומס עבודה, ועומס העבודה יכול להמשיך לגשת למשאבים מוגנים ללא הפרעה.
אפשר להשתמש ב-Sigstore Cosign כדי לחתום על קובץ אימג' של קונטיינר. כדי ש-Confidential Space יאחזר את החתימות, מפעילים של עומס העבודה צריכים להוסיף את פרטי החתימה למשתנה המטא-נתונים tee-signed-image-repos לפני פריסת עומס העבודה.
במהלך זמן הריצה, החתימות נשלחות לשירות אימות לצורך אימות. שירות האימות מחזיר אסימון הצהרות אימות שמכיל את הצהרות החתימה המאומתות. דוגמה לטענה לגבי חתימה:
"image_signatures": [
{
"key_id": "hexadecimal-sha256-fingerprint-public-key1",
"signature": "base64-encoded-signature",
"signature_algorithm": "RSASSA_PSS_SHA256"
},
{
"key_id": "hexadecimal-sha256-fingerprint-public-key2",
"signature": "base64-encoded-signature",
"signature_algorithm": "RSASSA_PSS_SHA256",
},
{
"key_id": "hexadecimal-sha256-fingerprint-public-key3",
"signature": "base64-encoded-signature",
"signature_algorithm": "RSASSA_PSS_SHA256",
}
]
הוראות להגדרת חתימה על קובץ אימג' של קונטיינר מופיעות במאמר שיעור Codelab בנושא קובץ אימג' חתום של קונטיינר.