אבטחת נתונים משותפים בשימוש באמצעות Confidential Space

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

Confidential Space מאפשר שיתוף נתונים ושיתוף פעולה מאובטח בין כמה צדדים, תוך שמירה על סודיות הנתונים של הארגונים. המשמעות היא שארגונים יכולים לשתף פעולה ביניהם ועדיין לשמור על שליטה בנתונים שלהם ולהגן עליהם מפני גישה לא מורשית.

בעזרת Confidential Space אפשר לנתח נתונים רגישים, שלעתים קרובות כפופים לרגולציה, ולקבל מהם ערך משותף, תוך שמירה על שליטה מלאה בהם. בעזרת Confidential Space, ארגונים יכולים להפיק ערך משותף מצבירה וניתוח של נתונים רגישים כמו פרטים אישיים מזהים (PII), מידע רפואי מוגן (PHI), קניין רוחני וסודות קריפטוגרפיים – תוך שמירה על שליטה מלאה בנתונים.

מה תצטרכו

מה תלמדו

  • איך מגדירים את משאבי הענן הנדרשים להרצת Confidential Space
  • איך מריצים את עומס העבודה במכונה וירטואלית חסויה שמופעלת באמצעות תמונת מכונה וירטואלית של Confidential Space
  • איך מאשרים גישה למשאבים מוגנים על סמך מאפייני קוד עומס העבודה (מה), סביבת Confidential Space (איפה) והחשבון שמריץ את עומס העבודה (מי).

ב-codelab הזה תגדירו מרחב סודי בין Primus Bank לבין Secundus Bank כדי לזהות את הלקוחות המשותפים שלהם בלי לשתף ביניהם רשימות מלאות של חשבונות. התהליך כולל את השלבים הבאים:

  • שלב 1: מגדירים את משאבי הענן הנדרשים עבור Primus Bank ו-Secundus Bank. המשאבים האלה בענן כוללים קטגוריות של Cloud Storage, מפתחות KMS, מאגרי זהויות של עומסי עבודה וחשבונות שירות של Primus Bank ו-Secundus Bank. בנק Primus ובנק Secundus מאחסנים את נתוני הלקוחות שלהם בדלי Cloud Storage, והם מצפינים את הנתונים באמצעות מפתחות של Cloud Key Management Service.
  • שלב 2: יוצרים חשבון שירות של עומס עבודה שישמש את המכונה הווירטואלית של עומס העבודה. בנק סקונדוס, שיפעיל את עומס העבודה, יפעיל את מכונת ה-VM של עומס העבודה. במקרה הזה, Primus Bank יכתוב את קוד עומס העבודה.
  • שלב 3: יוצרים עומס עבודה שכולל שתי פקודות CLI, אחת לספירת הלקוחות מהמיקום שצוין ואחת למציאת לקוחות משותפים של Primus Bank ו-Secundus Bank. עומס העבודה ייכתב על ידי Primus Bank והוא ייארז כקובץ אימג' של Docker. תמונת ה-Docker הזו תפורסם ב-Artifact Registry.
  • שלב 4: מאשרים עומס עבודה. ב-Primus Bank משתמשים במאגר זהויות של עומסי עבודה כדי להעניק לעומסי עבודה הרשאה לגשת לנתוני הלקוחות שלהם על סמך מאפיינים של מי שמריץ את עומס העבודה, מה עומס העבודה עושה ואיפה הוא פועל.
  • שלב 5: כשעומס העבודה יפעל, הוא יבקש גישה למשאבי הענן של משתפי הפעולה (Primus Bank ו-Secundus Bank) על ידי הצעת טוקן של שירות לאימות אישורים עם טענות לגבי עומס העבודה והסביבה. אם ההצהרות לגבי מדידת עומס העבודה באסימון תואמות לתנאי המאפיין במאגרי הזהויות של עומסי העבודה בבנק Primus ובבנק Secundus, המערכת מחזירה את אסימון הגישה לחשבון השירות שיש לו הרשאה לגשת למשאבי הענן המתאימים. הגישה למשאבי הענן תהיה רק לעומס העבודה שפועל בתוך Confidential Space.
  • שלב 5א: מריצים את עומס העבודה הראשון שסופר את הלקוחות של Primus Bank ממיקומים ספציפיים. בעומס העבודה הזה, Primus Bank היא שותפה לנתונים ויוצרת עומס עבודה, והיא מספקת את רשימת הלקוחות המוצפנת לעומס העבודה שפועל ב-Confidential Space. במקרה הזה, Secundus Bank הוא המפעיל של עומס העבודה, והוא יפעיל את עומס העבודה ב-Confidential Space.
  • שלב 5ב: מריצים את עומס העבודה השני שמוצא את הלקוחות המשותפים של בנק פרימוס ובנק סקונדוס. בעומס העבודה הזה, גם Primus Bank וגם Secundus Bank יהיו שותפים לנתונים. הם יספקו את רשימות הלקוחות המוצפנות לעומס העבודה שפועל במרחב הסודי. במקרה כזה, Secundus Bank יהיה שוב מפעיל עומסי עבודה. גם Secundus Bank יאשר את עומס העבודה הזה, כי עומס העבודה צריך לגשת לרשימות הלקוחות המוצפנות של Secundus Bank כדי למצוא את הלקוחות המשותפים. במקרה הזה, Secundus Bank תאשר לעומס העבודה לגשת לנתוני הלקוחות שלה על סמך מאפיינים של מי שמריץ את עומס העבודה, מה עומס העבודה עושה ואיפה הוא פועל, כמו שצוין בשלב 4 לגבי Primus Bank.

fdef93a6868a976.png

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

לפני שמתחילים

  • משכפלים את המאגר הזה באמצעות הפקודה שלמטה כדי לקבל את הסקריפטים הנדרשים שמשמשים כחלק מה-codelab הזה.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
  • שינוי הספרייה של ה-codelab הזה.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
  • מוודאים שהגדרתם את משתני הסביבה הנדרשים של הפרויקט כמו שמוצג בהמשך. מידע נוסף על יצירת פרויקט ב-GCP זמין ב סדנת התכנות הזו. כאן אפשר לקבל פרטים על אופן האחזור של מזהה הפרויקט ועל ההבדלים בינו לבין שם הפרויקט ומספר הפרויקט.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
  • מפעילים את החיוב בפרויקטים.
  • מפעילים את Confidential Computing API ואת ממשקי ה-API הבאים בשני הפרויקטים.
gcloud services enable \
    cloudapis.googleapis.com \
    cloudkms.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudshell.googleapis.com \
    container.googleapis.com \
    containerregistry.googleapis.com \
    iam.googleapis.com \
    confidentialcomputing.googleapis.com
  • מגדירים את המשתנים לשמות המשאבים באמצעות הפקודה הזו, כמו שמתואר בהמשך. אפשר לשנות את שמות המשאבים באמצעות המשתנים האלה (למשל, export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket')
  • אפשר להגדיר את המשתנים הבאים עם שמות קיימים של משאבי ענן בפרויקט Primus. אם המשתנה מוגדר, ייעשה שימוש במשאב הענן הקיים התואם מהפרויקט Primus. אם המשתנה לא מוגדר, שם משאב הענן ייווצר משם הפרויקט ומשאב הענן החדש ייווצר כחלק מהפעולות הבאות:

$PRIMUS_INPUT_STORAGE_BUCKET

הקטגוריה שבה מאוחסן קובץ נתוני הלקוחות של Primus Bank.

$PRIMUS_WORKLOAD_IDENTITY_POOL

מאגר הזהויות של עומסי העבודה (WIP) של Primus Bank שמאמת את הטענות.

$PRIMUS_WIP_PROVIDER

ספק מאגר הזהויות של עומסי העבודה של Primus Bank, שכולל את תנאי ההרשאה לשימוש באסימונים שנחתמו על ידי שירות אימות (Attestation).

$PRIMUS_SERVICE_ACCOUNT

חשבון השירות של Primus Bank שבו $PRIMUS_WORKLOAD_IDENTITY_POOL משתמשת כדי לגשת למשאבים המוגנים. בשלב הזה יש לו הרשאה לצפות בנתוני הלקוחות שמאוחסנים בדלי $PRIMUS_INPUT_STORAGE_BUCKET.

$PRIMUS_ENC_KEY

מפתח ה-KMS שמשמש להצפנת הנתונים שמאוחסנים ב-$PRIMUS_INPUT_STORAGE_BUCKET עבור Primus Bank.

$PRIMUS_ENC_KEYRING

מחזיק המפתחות של KMS שבו ייעשה שימוש ליצירת מפתח ההצפנה $PRIMUS_ENC_KEY עבור Primus Bank.

$PRIMUS_ARTIFACT_REPOSITORY

מאגר הארטיפקטים שאליו תתבצע דחיפה של תמונת Docker של עומס העבודה.

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

$SECUNDUS_INPUT_STORAGE_BUCKET

קטגוריית היעד שבה מאוחסן קובץ נתוני הלקוחות של Secundus Bank

$SECUNDUS_WORKLOAD_IDENTITY_POOL

מאגר הזהויות של עומסי העבודה (WIP) של Secundus Bank שמאמת את הטענות.

$SECUNDUS_WIP_PROVIDER

ספק מאגר הזהויות של עומסי עבודה של Secundus Bank, שכולל את תנאי ההרשאה לשימוש באסימונים שנחתמו על ידי שירות אימות (Attestation).

$SECUNDUS_SERVICE_ACCOUNT

חשבון השירות של Secundus Bank שבו $SECUNDUS_WORKLOAD_IDENTITY_POOL משתמש כדי לגשת למשאבים המוגנים. בשלב הזה יש לו הרשאה לצפות בנתוני הלקוחות שמאוחסנים בדלי $SECUNDUS_INPUT_STORAGE_BUCKET.

$SECUNDUS_ENC_KEY

מפתח ה-KMS שמשמש להצפנת הנתונים שמאוחסנים ב-$SECUNDUS_INPUT_STORAGE_BUCKET עבור Secundus Bank.

$SECUNDUS_ENC_KEYRING

מחזיק המפתחות של KMS שמשמש ליצירת מפתח ההצפנה $SECUNDUS_ENV_KEY עבור Secundus Bank.

$SECUNDUS_RESULT_STORAGE_BUCKET

המאגר שבו מאוחסנות התוצאות של עומס העבודה.

$WORKLOAD_IMAGE_NAME

השם של קובץ האימג' בקונטיינר של עומס העבודה.

$WORKLOAD_IMAGE_TAG

התג של תמונת הקונטיינר של עומס העבודה.

$WORKLOAD_SERVICE_ACCOUNT

חשבון השירות שיש לו הרשאה לגשת למכונה הווירטואלית Confidential VM שמריצה את עומס העבודה.

  • ב-codelab הזה נעשה שימוש בכמה ארטיפקטים, כמו שמתואר בהמשך:
  • primus_customer_list.csv: הקובץ שמכיל את נתוני הלקוחות של Primus Bank. כאן אפשר לראות את קובץ הדוגמה שמשמש במעבדת הקוד הזו.
  • secundus_customer_list.csv: הקובץ שמכיל את נתוני הלקוחות של Secundus Bank. כאן אפשר לראות את קובץ הדוגמה שמשמש במעבדת הקוד הזו.
  • תצטרכו הרשאות מסוימות לשני הפרויקטים האלה:
  • בשביל $PRIMUS_PROJECT_ID, תצטרכו את התפקידים הבאים: אדמין Cloud KMS, אדמין אחסון, אדמין Artifact Registry, אדמין חשבון שירות ואדמין מאגר זהויות של כוח עבודה ב-IAM.
  • בשביל $SECUNDUS_PROJECT_ID, תצטרכו את ההרשאות הבאות: אדמין של Compute, אדמין של Storage, אדמין של חשבון שירות, אדמין של Cloud KMS, אדמין של מאגר זהויות של עומסי עבודה ב-IAM ואדמין לענייני אבטחה (אופציונלי).
  • מריצים את הסקריפט הבא כדי להגדיר את שמות המשתנים שנותרו לערכים שמבוססים על מזהה הפרויקט שלכם עבור שמות משאבים.
source config_env.sh

הגדרת משאבי ענן עבור Primus Bank

המשאבים הבאים בענן נדרשים עבור Primus Bank. מריצים את הסקריפט הזה כדי להגדיר את המשאבים של Primus Bank:

  • קטגוריה של Cloud Storage‏ ($PRIMUS_INPUT_STORAGE_BUCKET) לאחסון קובץ נתוני הלקוחות המוצפנים של Primus Bank.
  • מפתח הצפנה ($PRIMUS_ENC_KEY) וצרור מפתחות ($PRIMUS_ENC_KEYRING) ב-KMS להצפנת קובץ נתוני הלקוחות של Primus Bank.
  • מאגר זהויות של עומסי עבודה ($PRIMUS_WORKLOAD_IDENTITY_POOL) כדי לאמת טענות על סמך תנאי מאפיינים שהוגדרו בספק שלו.
  • לחשבון השירות ($PRIMUS_SERVICE_ACCOUNT) שמצורף למאגר הזהויות של עומס העבודה ($PRIMUS_WORKLOAD_IDENTITY_POOL) שצוין למעלה יש גישה לפענוח נתונים באמצעות מפתח KMS (באמצעות התפקיד roles/cloudkms.cryptoKeyDecrypter), לקריאת נתונים מהקטגוריה של Cloud Storage (באמצעות התפקיד objectViewer) ולקישור חשבון השירות למאגר הזהויות של עומס העבודה (באמצעות roles/iam.workloadIdentityUser).
./setup_primus_bank_resources.sh

הגדרת משאבי ענן עבור Secundus Bank

בשביל Secundus Bank, נדרשים משאבי הענן הבאים. מריצים את הסקריפט הזה כדי להגדיר את המשאבים של Secundus Bank. במסגרת השלבים האלה, ייעשה שימוש במשאבים הבאים:

  • קטגוריה ב-Cloud Storage‏ ($SECUNDUS_INPUT_STORAGE_BUCKET) לאחסון קובץ הנתונים המוצפנים של לקוחות Secundus Bank.
  • מפתח הצפנה ($SECUNDUS_ENC_KEY) וצרור מפתחות ($SECUNDUS_ENC_KEYRING) ב-KMS כדי להצפין את קובץ הנתונים של Secundus Bank.
  • מאגר זהויות של עומסי עבודה ($SECUNDUS_WORKLOAD_IDENTITY_POOL) כדי לאמת טענות על סמך תנאי מאפיינים שהוגדרו בספק שלו.
  • לחשבון השירות ($SECUNDUS_SERVICE_ACCOUNT) שמצורף למאגר הזהויות של עומס העבודה ($SECUNDUS_WORKLOAD_IDENTITY_POOL) שצוין למעלה יש גישה לפענוח נתונים באמצעות מפתח ה-KMS (באמצעות התפקיד roles/cloudkms.cryptoKeyDecrypter), לקריאת נתונים מהקטגוריה של Cloud Storage (באמצעות התפקיד objectViewer) ולקישור חשבון השירות למאגר הזהויות של עומס העבודה (באמצעות התפקיד roles/iam.workloadIdentityUser).
  • קטגוריה של Cloud Storage‏ ($SECUNDUS_RESULT_STORAGE_BUCKET) לאחסון התוצאה של ביצוע עומס העבודה על ידי Secundus Bank.
./setup_secundus_bank_resources.sh

3. יצירת עומס עבודה

יצירת חשבון שירות לעומס עבודה

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

לחשבון השירות של עומס העבודה הזה ($WORKLOAD_SERVICE_ACCOUNT) יהיו התפקידים הבאים:

  • מקצים את התפקיד confidentialcomputing.workloadUser לחשבון השירות של עומס העבודה . כך חשבון המשתמש יוכל ליצור אסימון אימות.
  • מקצים את התפקיד logging.logWriter להרשאה של חשבון השירות של עומס העבודה. כך סביבת Confidential Space יכולה לכתוב יומנים ב-Cloud Logging בנוסף למסוף הטורי, כדי שהיומנים יהיו זמינים אחרי שהמכונה הווירטואלית מסיימת את הפעולה.
  • objectViewer כדי לקרוא נתונים מקטגוריית אחסון בענן $PRIMUS_INPUT_STORAGE_BUCKET.
  • objectViewer כדי לקרוא נתונים מקטגוריית אחסון בענן $SECUNDUS_INPUT_STORAGE_BUCKET.
  • objectAdmin כדי לכתוב את תוצאת עומס העבודה לקטגוריית Cloud Storage‏ $SECUNDUS_RESULT_STORAGE_BUCKET.
./create_workload_service_account.sh

יצירת עומס עבודה

במסגרת השלב הזה, תיצרו קובץ אימג' של Docker עבור עומס העבודה שמשמש בשיעור הזה. עומס העבודה הוא אפליקציית GoLang פשוטה ש:

  • ספירת הלקוחות במיקום גיאוגרפי ספציפי.
  • הפונקציה מוצאת לקוחות משותפים של Primus ושל Secundus Bank מתוך רשימות הלקוחות שמאוחסנות בקטגוריות Cloud Storage שלהם.

מריצים את הסקריפט הבא כדי ליצור עומס עבודה שבו מתבצעים השלבים הבאים:

  • יוצרים את Artifact Registry ‏ ($PRIMUS_ARTIFACT_REPOSITORY) בבעלות Primus Bank, שבו יפורסם עומס העבודה.
  • יוצרים את הקוד ומעדכנים אותו בשמות המשאבים הנדרשים. קוד העומס שמשמש ב-codelab הזה זמין כאן.
  • יוצרים את הקוד ואורזים אותו בקובץ אימג' של Docker. אפשר למצוא את קובץ ה-Dockerfile המתאים כאן.
  • פרסום קובץ האימג' של Docker ב-Artifact Registry‏ ($PRIMUS_ARTIFACT_REGISTRY) שבבעלות Primus Bank.
  • נותנים לחשבון השירות $WORKLOAD_SERVICE_ACCOUNT הרשאת קריאה ל-Artifact Registry ‏ ($PRIMUS_ARTIFACT_REGISTRY).
./create_workload.sh

4. אישור והפעלה של עומסי עבודה

מתן הרשאה לעומס עבודה

בנק Primus רוצה לאשר לעומסי עבודה לגשת לנתוני הלקוחות שלו על סמך מאפיינים של המשאבים הבאים:

  • מה: קוד שאומת
  • איפה: בסביבה מאובטחת
  • מי: אופרטור מהימן

‫Primus משתמש באיחוד שירותי אימות הזהות של עומסי עבודה כדי לאכוף מדיניות גישה שמבוססת על הדרישות האלה.

איחוד שירותי אימות הזהות של עומסי עבודה מאפשר לכם לציין תנאי מאפיינים. התנאים האלה מגבילים את הזהויות שיכולות לבצע אימות באמצעות מאגר הזהויות של עומסי העבודה (WIP). אפשר להוסיף את שירות אימות האישורים למאגר הזהויות של עומסי עבודה כספק של מאגר זהויות של עומסי עבודה כדי להציג מדידות ולאכוף את המדיניות.

מאגר הזהויות של עומסי העבודה כבר נוצר קודם כחלק משלב ההגדרה של משאבי הענן. עכשיו Primus Bank תיצור ספק חדש של מאגר זהויות של כוח עבודה ב-OIDC. האסימון שצוין --attribute-condition מאשר גישה לקונטיינר של עומס העבודה. כדי להשתמש בו צריך:

  • מה: הגרסה האחרונה של $WORKLOAD_IMAGE_NAME הועלתה למאגר $PRIMUS_ARTIFACT_REPOSITORY.
  • איפה: סביבת המחשוב האמינה של Confidential Space פועלת בתמונה של מכונה וירטואלית של Confidential Space עם תמיכה מלאה.
  • מי: חשבון שירות של Secundus Bank $WORKLOAD_SERVICE_ACCOUNT.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $PRIMUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
  --issuer-uri="https://confidentialcomputing.googleapis.com/" \
  --allowed-audiences="https://sts.googleapis.com" \
  --attribute-mapping="google.subject='assertion.sub'" \
  --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' && 
   'STABLE' in assertion.submods.confidential_space.support_attributes &&
   assertion.submods.container.image_reference == 'us-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' && 
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

בדומה ל-WIP שנוצר עבור Primus Bank, ‏ Secundus Bank רוצה לאשר לעומסי עבודה לגשת לנתוני הלקוחות שלה על סמך:

  • מה: עומס העבודה.
  • איפה: בסביבת Confidential Space.
  • מי: החשבון ($WORKLOAD_SERVICE_ACCOUNT) שמריץ את עומס העבודה.

ב-Primus Bank משתמשים בטענת image_reference, שכוללת את תג התמונה, כדי לקבוע אם לאשר גישה. הם שולטים במאגר המרוחק, ולכן הם יכולים להיות בטוחים שהם מתייגים רק תמונות שלא חושפות את הנתונים שלהם.

לעומת זאת, ב-Secundus Bank אין שליטה במאגר שממנו הם מקבלים את התמונה, ולכן הם לא יכולים להניח את ההנחה הזו בבטחה. במקום זאת, הם בוחרים לאשר גישה לעומס העבודה על סמך image_digest. בניגוד ל-image_reference, שאפשר לשנות כך שיצביע על תמונה אחרת, אי אפשר לשנות את image_digest כך שיצביע על תמונה אחרת מזו שנבדקה על ידי Secundus Bank בשלב הקודם.

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

export WORKLOAD_IMAGE_DIGEST=$(gcloud artifacts docker images describe ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG  --format="value(image_summary.digest)" --project ${PRIMUS_PROJECT_ID})
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $SECUNDUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$SECUNDUS_WORKLOAD_IDENTITY_POOL" \
  --issuer-uri="https://confidentialcomputing.googleapis.com/" \
  --allowed-audiences="https://sts.googleapis.com" \
  --attribute-mapping="google.subject='assertion.sub'" \
  --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' && 
'STABLE' in assertion.submods.confidential_space.support_attributes && 
assertion.submods.container.image_digest == '${WORKLOAD_IMAGE_DIGEST}' &&
 assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' && 
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

הפעלת עומסי עבודה

כחלק מהשלב הזה, Secundus Bank יפעיל את עומס העבודה ב-Confidential Space. עומס העבודה הזה יקבל את אסימוני הגישה ממאגר הזהויות של עומס העבודה של Primus וממאגר הזהויות של עומס העבודה של Secundus כדי לקרוא ולפענח את נתוני הלקוחות של Primus Bank ושל Secundus Bank בהתאמה.

הארגומנטים הנדרשים של TEE מועברים באמצעות סימון המטא-נתונים. הארגומנטים של קונטיינר עומס העבודה מועברים באמצעות החלק tee-cmd של הדגל. התוצאה של הפעלת עומס העבודה תפורסם ב-$SECUNDUS_RESULT_STORAGE_BUCKET.

הפעלת עומס העבודה הראשון

כחלק מההרצה הראשונה של עומס העבודה, עומס העבודה יספור את הלקוחות של Primus Bank מהמיקום שצוין בארגומנטים של מאגר עומס העבודה. כפי שמוצג בהמשך, עומס העבודה הראשון יבצע את הפקודה count-location והתוצאה תישמר ב-$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result.

gcloud compute instances create ${WORKLOAD_VM1} \
 --project=${SECUNDUS_PROJECT_ID} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
 --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]""

הצגת התוצאות

בפרויקט Secundus, צופים בתוצאות של עומס העבודה הראשון. ממתינים 3-5 דקות עד שהעומס יסיים את ההרצה והתוצאה תהיה זמינה בדלי של Cloud Storage.

gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result

התוצאה צריכה להיות 3, כי זה מספר האנשים מסיאטל שמופיעים בקובץ primus_customer_list.csv.

הפעלת עומס העבודה השני

במסגרת ההרצה השנייה של עומס העבודה, נמצא את הלקוחות המשותפים של Primus Bank ו-Secundus Bank. כפי שמוצג בהמשך, עומס העבודה השני יבצע את הפקודה list-common-customers והתוצאה תאוחסן ב-$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count.

gcloud compute instances create ${WORKLOAD_VM2} \
 --project=${SECUNDUS_PROJECT_ID} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE} \
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
  --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""

הצגת התוצאות

בפרויקט Secundus, צופים בתוצאות של עומס העבודה השני. ממתינים 3-5 דקות עד שהעומס יסיים את ההרצה והתוצאה תהיה זמינה בדלי של Cloud Storage.

gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result

התוצאה צריכה להיות הרשימה הבאה, כי אלה הלקוחות המשותפים לבנק Primus ולבנק Secundus.

פלט:

Eric
Clinton
Ashley
Cooper

הפעלת עומס עבודה לא מורשה

החוזה של Primus Bank שמאפשר ל-Secundus Bank גישה לנתונים שלהם יפוג. לכן, בנק Primus מעדכן את תנאי המאפיין כדי לאפשר למכונות וירטואליות עם חשבון השירות מהשותף החדש שלו, בנק Tertius.

Primus Bank משנה את הספק של מאגר הזהויות של עומסי העבודה

ב-$PRIMUS_PROJECT_ID, מעדכנים את תנאי המאפיין של ספק הזהויות של מאמת האישורים כדי לאשר עומסי עבודה במיקום חדש.

  1. מגדירים את הפרויקט לערך $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
  1. מייצאים את מזהה פרויקט GCP של Tertius Bank באמצעות הפקודה שלמטה. בהמשך, Primus Bank תשתמש בזה כדי לעדכן את התנאי למאפיין של ספק הזהויות של מאגר כוח העבודה. בנק Primus לא יפסיק לאשר את חשבונות השירות של עומס העבודה של בנק Secundus. מעכשיו אפשר להשתמש בחשבונות שירות של עומסי עבודה ב-Tertius Bank.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
  1. מעדכנים את ספק ה-OIDC במאגר הזהויות של עומסי העבודה. כאן '$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts משתנה ל-'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts. במקום לתת הרשאה לחשבון השירות של עומס העבודה מ-Secundus Bank, עכשיו תינתן הרשאה לחשבון השירות של עומס העבודה מ-Tertius Bank.
gcloud iam workload-identity-pools providers update-oidc $PRIMUS_WIP_PROVIDER \
  --location="global" \
  --workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
  --issuer-uri="https://confidentialcomputing.googleapis.com/" \
  --allowed-audiences="https://sts.googleapis.com" \
  --attribute-mapping="google.subject='assertion.sub'" \
  --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' && 
   'STABLE' in assertion.submods.confidential_space.support_attributes &&
   assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' && 
'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

הפעלה מחדש של עומס העבודה

כש-Secundus Bank מנסה להפעיל את עומס העבודה המקורי, הפעולה נכשלת. כדי לראות את השגיאה, צריך למחוק את קובץ התוצאות המקורי ואת מכונת ה-VM, ואז לנסות להריץ שוב את עומס העבודה.

מחיקת קובץ התוצאות הקיים ומופע ה-VM

  1. מגדירים את הפרויקט כפרויקט $SECUNDUS_PROJECT_ID.
gcloud config set project $SECUNDUS_PROJECT_ID
  1. מוחקים את קובץ התוצאות.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
  1. מוחקים את מופע ה-VM הסודי.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}

מריצים את עומס העבודה הלא מורשה:

gcloud compute instances create ${WORKLOAD_VM2} \
 --confidential-compute-type=SEV \
 --shielded-secure-boot \
 --maintenance-policy=MIGRATE \
 --scopes=cloud-platform \
 --zone=${SECUNDUS_PROJECT_ZONE}\
 --image-project=confidential-space-images \
 --image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
 --metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""

לעיון בשגיאה

במקום התוצאות של עומס העבודה, מוצגת שגיאה (The given credential is rejected by the attribute condition).

gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result

באופן דומה, אם Primus Bank ישנה בחשאי את עומס העבודה כדי לשלוח את כל רשימת הלקוחות של Secundus Bank למאגר בבעלות Primus Bank, הניסיון הזה ייכשל כי התקציר של עומס העבודה הזדוני יהיה שונה מהתקציר של התמונה שאושרה במאגר הזהויות של כוח העבודה של Secundus Bank.

5. הסרת המשאבים

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

  • מזינים קטגוריה של Cloud Storage של Primus Bank ($PRIMUS_INPUT_STORAGE_BUCKET).
  • חשבון שירות של Primus Bank ‏ ($PRIMUS_SERVICE_ACCOUNT).
  • מאגר ארטיפקטים של Primus Bank שמכיל חתימות של תמונות ($PRIMUS_COSIGN_REPOSITORY).
  • מאגר זהויות של כוח עבודה של Primus Bank‏($PRIMUS_WORKLOAD_IDENTITY_POOL).
  • חשבון שירות של עומס עבודה ב-Secundus Bank‏ ($WORKLOAD_SERVICE_ACCOUNT).
  • קטגוריה של אחסון בענן של Secundus Bank ($SECUNDUS_INPUT_STORAGE_BUCKET).
  • חשבון שירות של Secundus Bank‏ ($SECUNDUS_SERVICE_ACCOUNT).
  • מאגר ארטיפקטים של Secundus Bank שמכיל חתימות של תמונות ($SECUNDUS_COSIGN_REPOSITORY).
  • מאגר זהויות של כוח עבודה של Secundus Bank‏($SECUNDUS_WORKLOAD_IDENTITY_POOL).
  • חשבון שירות של עומס עבודה ב-Secundus Bank‏ ($WORKLOAD_SERVICE_ACCOUNT).
  • מכונות מחשוב של עומסי עבודה.
  • קטגוריית האחסון של התוצאות ב-Secundus Bank ($SECUNDUS_RESULT_STORAGE_BUCKET).
  • מאגר ארטיפקטים של Primus Bank ($PRIMUS_ARTIFACT_REPOSITORY).
./cleanup.sh

אם סיימתם את הבדיקה, כדאי למחוק את הפרויקט.

  • עוברים אל Cloud Platform Console.
  • בוחרים את הפרויקט שרוצים לסגור ולוחצים על 'מחיקה' בחלק העליון. הפעולה הזו מתזמנת את הפרויקט למחיקה.

מזל טוב

כל הכבוד, סיימתם את ה-Codelab!

למדתם איך לאבטח נתונים משותפים תוך שמירה על הסודיות שלהם באמצעות Confidential Space.

מה השלב הבא?

כדאי לעיין במדריכי Codelab דומים נוספים…

קריאה נוספת