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

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

מידע על Codelab זה

subjectהעדכון האחרון: נוב׳ 22, 2024
account_circleנכתב על ידי Priya Pandey, Jiankun Lu, Meetrajsinh Vala

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

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

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

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

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

  • שלב 1: מגדירים את משאבי הענן הנדרשים לבנקים Primus ו-Secundus. משאבי הענן האלה כוללים קטגוריות של אחסון בענן, מפתחות KMS, מאגרי זהויות של כוח עבודה וחשבונות שירות של Primus Bank ו-Secundus Bank. ב-Primus Bank וב-Secundus Bank, נתוני הלקוחות מאוחסנים בקטגוריות (buckets) של Cloud Storage, והם מוצפנים באמצעות מפתחות של Cloud Key Management Service.
  • שלב 2: יוצרים חשבון שירות של כוח עבודה שיעמוד לרשות המכונה הווירטואלית של כוח העבודה. Secundus Bank, המפעיל של עומס העבודה, יפעיל את המכונה הווירטואלית של עומס העבודה. Primus Bank יהיה הבעלים של קוד עומס העבודה.
  • שלב 3: יוצרים עומס עבודה שכולל שתי פקודות CLI, אחת לספירת הלקוחות מהמיקום שצוין ואחת למציאת לקוחות משותפים של בנק Primus ובנק Secundus. עומס העבודה ייכתב על ידי 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 יהיה מפעיל של עומס עבודה, והוא יפעיל את עומס העבודה ב-Confidential Space.
  • שלב 5(ב): מריצים את עומס העבודה השני שמאתר את הלקוחות המשותפים של בנקים Primus ו-Secundus. בעומס העבודה הזה, Primus Bank ו-Secundus Bank יהיו שותפים לנתונים. הם מספקים את רשימות הלקוחות המוצפנות לעומס העבודה שפועל ב-Confidential Space. בנק Secundus יהיה שוב מפעיל של עומסי עבודה. גם בנק Secundus יאשר את עומס העבודה הזה, כי הוא צריך גישה לרשימות הלקוחות המוצפנות של בנק Secundus כדי למצוא את הלקוחות המשותפים. במקרה כזה, בנק Secundus יאשר לעומס העבודה גישה לנתוני הלקוחות שלו על סמך מאפיינים של מי שמפעיל את עומס העבודה, מה עומס העבודה עושה ואיפה עומס העבודה פועל, כפי שמתואר בשלב 4 לגבי בנק Primus.

fdef93a6868a976.png

2.‏ הגדרת משאבי Cloud

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

  • כדי לקבל את הסקריפטים הנדרשים שנעשה בהם שימוש במסגרת הקודלאב הזה, צריך להעתיק את המאגר הזה באמצעות הפקודה הבאה.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
  • שינוי הספרייה של סדנת הקוד הזו.
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. אם המשתנה לא מוגדר, שם המשאב ב-Cloud ייווצר מהשם project-name, וייווצר משאב חדש ב-Cloud כחלק מהפעולות הבאות:

$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. אם המשתנה לא מוגדר, שם המשאב ב-Cloud ייווצר מ-project-name, וייווצר משאב חדש ב-Cloud כחלק מהפעולות הבאות:

$SECUNDUS_INPUT_STORAGE_BUCKET

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

$SECUNDUS_WORKLOAD_IDENTITY_POOL

מאגר הזהויות של כוח העבודה (WIP) של בנק Secundus שמאמת את ההצהרות.

$SECUNDUS_WIP_PROVIDER

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

$SECUNDUS_SERVICE_ACCOUNT

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

$SECUNDUS_ENC_KEY

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

$SECUNDUS_ENC_KEYRING

מַפְתח הגישה של KMS שמשמש ליצירת מפתח ההצפנה $SECUNDUS_ENV_KEY של בנק Secundus.

$SECUNDUS_RESULT_STORAGE_BUCKET

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

$WORKLOAD_IMAGE_NAME

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

$WORKLOAD_IMAGE_TAG

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

$WORKLOAD_SERVICE_ACCOUNT

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

  • יש כמה ארטיפקטים שנעשה בהם שימוש במסגרת הקודלאב הזה, כפי שמפורט בהמשך:
  • primus_customer_list.csv: הקובץ שמכיל את נתוני הלקוחות של Primus Bank. כאן מופיע הקובץ לדוגמה שמשמש בקודלאב הזה.
  • secundus_customer_list.csv: הקובץ שמכיל את נתוני הלקוחות של בנק Secundus. כאן מופיע הקובץ לדוגמה שמשמש בקודלאב הזה.
  • כדי ליצור את שני הפרויקטים האלה, נדרשות הרשאות מסוימות:
  • כדי להשתמש ב-$PRIMUS_PROJECT_ID, נדרשות ההרשאות הבאות: אדמין Cloud KMS, אדמין אחסון, אדמין Artifact Registry, אדמין חשבון שירות, אדמין של מאגר זהויות של כוח עבודה ב-IAM.
  • כדי להשתמש ב-$SECUNDUS_PROJECT_ID, נדרשות ההרשאות הבאות: אדמין Compute, אדמין אחסון, אדמין של חשבון שירות, אדמין 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), לקריאת נתונים מקטגוריית האחסון בענן (באמצעות התפקיד objectViewer) ולחיבור חשבון השירות למאגר הזהויות של כוח העבודה (באמצעות התפקיד roles/iam.workloadIdentityUser).
./setup_primus_bank_resources.sh

הגדרת משאבים בענן ל-Secundus Bank

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

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

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

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

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

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

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

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

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

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

  • מה: קוד מאומת
  • איפה: סביבה מאובטחת
  • Who: מפעיל מהימן

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

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

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

  • מה: $WORKLOAD_IMAGE_NAME העדכני ביותר שהועלה למאגר $PRIMUS_ARTIFACT_REPOSITORY.
  • איפה: סביבת המחשוב המהימנה של Confidential Space פועלת בתמונת ה-VM של Confidential Space שנתמכת במלואה.
  • מי: חשבון השירות $WORKLOAD_SERVICE_ACCOUNT של בנק Secundus.
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.
  • Who: החשבון ($WORKLOAD_SERVICE_ACCOUNT) שבו פועל עומס העבודה.

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

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

לפני יצירת ספקים של מאגר זהויות של כוח עבודה, אנחנו אוספים את 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 ירוץ את עומס העבודה ב-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 דקות עד שהעומס יסיים את ההרצה והתוצאה תהיה זמינה בקטגוריית האחסון בענן.

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 דקות עד שהעומס יסיים את ההרצה והתוצאה תהיה זמינה בקטגוריית האחסון בענן.

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 מנסה להריץ את עומס העבודה המקורי, הוא נכשל. כדי לראות את השגיאה, מוחקים את קובץ התוצאות המקורי ואת מכונה הווירטואלית, ואז מנסים להריץ שוב את עומס העבודה.

מחיקת קובץ התוצאות הקיים ומכונה וירטואלית

  1. מגדירים את הפרויקט כפרויקט $SECUNDUS_PROJECT_ID.
gcloud config set project $SECUNDUS_PROJECT_ID
  1. מוחקים את קובץ התוצאות.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
  1. מוחקים את המכונה הווירטואלית הסודית.
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 ישנה בחשאי את עומס העבודה כדי לשלוח את רשימת הלקוחות המלאה של בנק Secundus לקטגוריה שבבעלות בנק Primus, הניסיון הזה ייכשל כי הסיכום של עומס העבודה הזדוני יהיה שונה מהסיכום של התמונה שאושר במאגר הזהויות של כוח העבודה של בנק Secundus.

5.‏ ניקוי

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

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

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

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

מזל טוב

מזל טוב, סיימת את הקודלהב!

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

מה השלב הבא?

כדאי לעיין בחלק מהמדריכים הבאים בנושא Codelab…

מקורות מידע נוספים