1. סקירה כללית
Confidential Space הוא סביבה מאובטחת לשיתוף פעולה בין מספר צדדים. בקודלאב הזה נסביר איך אפשר להשתמש ב-Confidential Space כדי להגן על קניין רוחני רגיש, כמו מודלים של למידת מכונה.
בסדנת הקוד הזו נשתמש ב-Confidential Space כדי לאפשר לחברה אחת לשתף באופן מאובטח את המודל הקנייני שלה ללמידת מכונה עם חברה אחרת שרוצה להשתמש במודל. באופן ספציפי, לחברת Primus יש מודל למידת מכונה שיופץ רק לעומס עבודה שפועל ב-Confidential Space, וכך החברה יכולה לשמור על שליטה מלאה בנכסי ה-IP שלה. חברת Secundus תהיה המפעיל של עומס העבודה ותפעיל את עומס העבודה של למידת המכונה ב-Confidential Space. Secundus יטמיע את המודל הזה ויבצע הסקה באמצעות נתוני דוגמה שבבעלות Secundus.
כאן, Primus הוא המחבר של עומס העבודה, שכתב את קוד עומס העבודה, וגם שותף עבודה שרוצה להגן על קניין הרוחני שלו מפני מפעיל עומס העבודה הלא מהימן, Secundus. Secundus הוא המפעיל של עומס העבודה של למידת המכונה.
מה תלמדו
- איך מגדירים סביבה שבה צד אחד יכול לשתף את מודל ה-ML הקנייני שלו עם צד אחר בלי לאבד את השליטה על הקניין הרוחני שלו.
מה צריך להכין
- פרויקט ב-Google Cloud Platform
- ידע בסיסי ב-Google Compute Engine ( codelab), ב-Confidential VM, ב-קונטיינרים ובמאגרים מרוחקים
- ידע בסיסי בנושא חשבונות שירות, איחוד שירותי אימות הזהות של עומסי עבודה ותנאי מאפיינים.
התפקידים שקשורים להגדרה של Confidential Space
ב-codelab הזה, חברת Primus תהיה הבעלים של המשאבים והמחבר של עומסי העבודה, והיא תישא באחריות לפעולות הבאות:
- הגדרת משאבי הענן הנדרשים באמצעות מודל למידת מכונה
- כתיבת הקוד של עומס העבודה
- פרסום קובץ האימג' של עומס העבודה
- הגדרת מדיניות של מאגר זהויות של כוח עבודה כדי להגן על מודל ה-ML מפני מפעיל לא מהימן
חברת Secundus תהיה המפעילה ותהיה אחראית על:
- הגדרת משאבי הענן הנדרשים לאחסון תמונות לדוגמה שמשמשות את עומס העבודה ואת התוצאות
- הפעלת עומס העבודה של למידת המכונה ב-Confidential Space באמצעות המודל ש-Primus מספקת
איך פועל Confidential Space
כשמריצים את עומס העבודה ב-Confidential Space, מתבצע התהליך הבא באמצעות המשאבים שהוגדרו:
- עומס העבודה מבקש אסימון גישה כללי של Google עבור
$PRIMUS_SERVICEACCOUNT
ממאגר הזהויות של עומסי העבודה. הוא מציע אסימון שירות של גורם אימות עם הצהרות על עומסי עבודה ועל סביבות. - אם הצהרות המדידה של עומסי העבודה באסימון של שירות אימות המזהה תואמות לתנאי המאפיין ב-WIP, הוא מחזיר את אסימון הגישה של
$PRIMUS_SERVICEACCOUNT.
. - עומס העבודה משתמש באסימון הגישה של חשבון השירות שמשויך ל-
$PRIMUS_SERVICEACCOUNT
כדי לגשת למודל למידת המכונה שמאוחסן בקטגוריה$PRIMUS_INPUT_STORAGE_BUCKET
. - עומס העבודה מבצע פעולה על הנתונים שבבעלות Secundus, ו-Secundus מפעיל ומריץ את עומס העבודה הזה בפרויקט שלו.
- עומס העבודה משתמש בחשבון השירות
$WORKLOAD_SERVICEACCOUNT
כדי לכתוב את התוצאות של הפעולה הזו לקטגוריה$SECUNDUS_RESULT_STORAGE_BUCKET
.
2. הגדרת משאבי Cloud
לפני שמתחילים
- כדי לקבל את הסקריפטים הנדרשים שנעשה בהם שימוש במסגרת הקודלאב הזה, צריך ליצור עותק (clone) של המאגר הזה באמצעות הפקודה הבאה.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- שינוי הספרייה של סדנת הקוד הזו.
cd confidential-space/codelabs/ml_model_protection/scripts
- חשוב לוודא שהגדרתם את משתני הסביבה הנדרשים של הפרויקט, כפי שמתואר בהמשך. מידע נוסף על הגדרת פרויקט ב-GCP זמין בקודלאב הזה. כאן מוסבר איך לאחזר את מזהה הפרויקט ואיך הוא שונה משם הפרויקט וממספר הפרויקט.
export PRIMUS_PROJECT_ID=<GCP project id of Primus>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus>
- מפעילים את החיוב בפרויקטים.
- מפעילים את Confidential Computing API ואת ממשקי ה-API הבאים בשני הפרויקטים.
gcloud services enable \
cloudapis.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 ייווצר מהשם של הפרויקט, וייווצר משאב חדש ב-Cloud בשם הזה. אלה המשתנים הנתמכים לשמות המשאבים:
| הקטגוריה שבה מאוחסן מודל למידת המכונה של Primus. |
| מאגר הזהויות של כוח העבודה (WIP) של Primus שמאמת את ההצהרות. |
| ספק מאגר הזהויות של כוח העבודה של Primus, שכולל את תנאי ההרשאה לשימוש באסימונים שנחתמו על ידי שירות אימות האימות (attestation). |
| חשבון השירות Primus שבו |
| מאגר הארטיפקטים שאליו תמונת Docker של עומס העבודה תועבר. |
- אפשר להגדיר את המשתנים הבאים בשמות של משאבי ענן קיימים בפרויקט Secundus. אם המשתנה מוגדר, המערכת תשתמש במשאב הענן הקיים המתאים מהפרויקט Secundus. אם המשתנה לא מוגדר, שם המשאב ב-Cloud ייווצר מהשם של הפרויקט, וייווצר משאב חדש ב-Cloud בשם הזה. אלה המשתנים הנתמכים לשמות המשאבים:
| הקטגוריה שבה מאוחסנות תמונות הדוגמה ש-Secundus רוצה לסווג באמצעות המודל ש-Primus סיפק. |
| הקטגוריה שבה מאוחסנות התוצאות של עומס העבודה. |
| השם של קובץ האימג' בקונטיינר של עומס העבודה. |
| התג של קובץ האימג' בקונטיינר של עומס העבודה. |
| חשבון השירות שיש לו הרשאה לגשת למכונה הווירטואלית הסודית שמריצה את עומס העבודה. |
- תצטרכו הרשאות מסוימות בשביל שני הפרויקטים האלה. אפשר לעיין במדריך הזה כדי להבין איך להקצות תפקידים ב-IAM באמצעות מסוף GCP:
- כדי להשתמש ב-
$PRIMUS_PROJECT_ID
, נדרשים התפקידים הבאים: אדמין אחסון, אדמין של Artifact Registry, אדמין של חשבון שירות, אדמין של מאגר זהויות של כוח עבודה ב-IAM. - כדי להשתמש ב-
$SECUNDUS_PROJECT_ID
, נדרשים התפקידים הבאים: אדמין Compute, אדמין אחסון, אדמין של חשבון שירות, אדמין של מאגר זהויות של כוח עבודה ב-IAM, אדמין אבטחה (אופציונלי). - מריצים את הסקריפט הבא כדי להגדיר את שמות המשתנים הנותרים לערכים שמבוססים על מזהה הפרויקט שלכם בשמות המשאבים.
source config_env.sh
הגדרת משאבים של חברת Primus
בשלב הזה תגדירו את משאבי הענן הנדרשים ל-Primus. מריצים את הסקריפט הבא כדי להגדיר את המשאבים ל-Primus. המשאבים הבאים נוצרים כחלק מהרצת הסקריפט:
- קטגוריה של Cloud Storage (
$PRIMUS_INPUT_STORAGE_BUCKET
) לאחסון מודל למידת המכונה של Primus. - מאגר זהויות של כוח עבודה (
$PRIMUS_WORKLOAD_IDENTITY_POOL
) כדי לאמת הצהרות על סמך תנאי המאפיינים שהוגדרו בספק שלו. - חשבון שירות (
$PRIMUS_SERVICEACCOUNT
) שמצורף למאגר הזהויות של כוח העבודה שצוין למעלה ($PRIMUS_WORKLOAD_IDENTITY_POOL
) עם הרשאת IAM לקריאת נתונים מקטגוריית האחסון בענן (באמצעות התפקידobjectViewer
) ולחיבור חשבון השירות הזה למאגר הזהויות של כוח העבודה (באמצעות התפקידroles/iam.workloadIdentityUser
).
כחלק מההגדרה של משאבי הענן, נשתמש במודל TensorFlow. אנחנו יכולים לשמור את המודל כולו, שכולל את הארכיטקטורה, המשקלים וההגדרות של האימון, בארכיון ZIP. במסגרת סדנת הקוד הזו, נשתמש במודל MobileNet V1 שהודר במערך הנתונים ImageNet שזמין כאן.
./setup_primus_company_resources.sh
הסקריפט שצוין למעלה יגדיר את משאב הענן. עכשיו נוריד ונפרס את המודל בקטגוריה של Cloud Storage שנוצרה על ידי הסקריפט.
- כאן אפשר להוריד את המודל שעבר אימון מראש.
- אחרי ההורדה, משנים את השם של קובץ ה-tar שהורדתם ל-model.tar.gz.
- מפרסמים את הקובץ model.tar.gz בקטגוריה של Cloud Storage באמצעות הפקודה הבאה מהספרייה שמכילה את הקובץ model.tar.gz.
gsutil cp model.tar.gz gs://${PRIMUS_INPUT_STORAGE_BUCKET}/
הגדרת משאבים של חברת Secundus
בשלב הזה תגדירו את משאבי הענן הנדרשים ל-Secundus. מריצים את הסקריפט הבא כדי להגדיר את המשאבים ל-Secundus. במסגרת השלבים האלה, המערכת תיצור את המשאבים הבאים:
- קטגוריה ב-Cloud Storage (
$SECUNDUS_INPUT_STORAGE_BUCKET
) לאחסון תמונות לדוגמה להרצת המסקנות על ידי Secundus. - קטגוריה של Cloud Storage (
$SECUNDUS_RESULT_STORAGE_BUCKET
) לאחסון התוצאה של ביצוע עומס העבודה של למידת המכונה על ידי Secundus.
כאן אפשר למצוא כמה תמונות לדוגמה לקוד הפתוח הזה.
./setup_secundus_company_resources.sh
3. יצירת עומס עבודה
יצירת חשבון שירות של כוח עבודה
עכשיו תיצורו חשבון שירות לעומס העבודה עם התפקידים וההרשאות הנדרשים. מריצים את הסקריפט הבא כדי ליצור חשבון שירות של כוח עבודה בפרויקט Secundus. חשבון השירות הזה ישמש את המכונה הווירטואלית שמריצה את עומס העבודה של ה-ML.
לחשבון השירות של עומס העבודה ($WORKLOAD_SERVICEACCOUNT
) יהיו התפקידים הבאים:
confidentialcomputing.workloadUser
כדי לקבל טוקן אימותlogging.logWriter
כדי לכתוב יומנים ב-Cloud Logging.objectViewer
כדי לקרוא נתונים מקטגוריית האחסון בענן$SECUNDUS_INPUT_STORAGE_BUCKET
.objectUser
כדי לכתוב את התוצאה של עומס העבודה בקטגוריה של אחסון בענן$SECUNDUS_RESULT_STORAGE_BUCKET
.
./create_workload_service_account.sh
יצירת עומס עבודה
כחלק מהשלב הזה, תיצרו קובץ אימג' של Docker של כוח עבודה. Primus תיצור את עומס העבודה. עומס העבודה שנעשה בו שימוש ב-Codelab הזה הוא קוד Python ללמידת מכונה, שמקבל גישה למודל ה-ML שמאוחסן בקטגוריית האחסון של Primus ומריץ מסקנות על סמך התמונות לדוגמה שמאוחסנות בקטגוריית אחסון.
רק לעומסי העבודה שעומדים בתנאי המאפיינים הנדרשים תהיה גישה למודל למידת המכונה שמאוחסן בקטגוריית האחסון של Primus. תנאי המאפיינים האלה מתוארים בפירוט בקטע הבא בנושא הרשאה לעומס העבודה.
זוהי השיטה run_inference() של עומס העבודה שייווצר וייעשה בו שימוש ב-codelab הזה. כאן אפשר למצוא את קוד עומס העבודה המלא.
def run_inference(image_path, model):
try:
# Read and preprocess the image
image = tf.image.decode_image(tf.io.read_file(image_path), channels=3)
image = tf.image.resize(image, (128, 128))
image = tf.image.convert_image_dtype(image, tf.float32)
image = tf.expand_dims(image, axis=0)
# Get predictions from the model
predictions = model(image)
predicted_class = np.argmax(predictions)
top_k = 5
top_indices = np.argsort(predictions[0])[-top_k:][::-1]
# Convert top_indices to a TensorFlow tensor
top_indices_tensor = tf.convert_to_tensor(top_indices, dtype=tf.int32)
# Use TensorFlow tensor for indexing
top_scores = tf.gather(predictions[0], top_indices_tensor)
return {
"predicted_class": int(predicted_class),
"top_k_predictions": [
{"class_index": int(idx), "score": float(score)}
for idx, score in zip(top_indices, top_scores)
],
}
except Exception as e:
return {"error": str(e)}
מריצים את הסקריפט הבא כדי ליצור עומס עבודה שבו מתבצעים השלבים הבאים:
- יוצרים מאגר Artifact Registry(
$PRIMUS_ARTIFACT_REGISTRY
) בבעלות Primus. - מעדכנים את קוד עומס העבודה בשמות המשאבים הנדרשים.
- פיתוח עומס העבודה של למידת המכונה ויצירת קובץ Dockerfile ליצירת קובץ אימג' של Docker של קוד עומס העבודה. כאן מופיע קובץ Dockerfile שמשמש ב-codelab הזה.
- פיתוח ופרסום של קובץ האימג' של Docker ב-Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY
) שבבעלות Primus. - מעניקים ל-
$WORKLOAD_SERVICEACCOUNT
הרשאת קריאה עבור$PRIMUS_ARTIFACT_REGISTRY
. הדבר נדרש כדי שקונטיינר עומס העבודה יוכל למשוך את קובץ האימג' של Docker של עומס העבודה מ-Artifact Registry.
./create_workload.sh
בנוסף, אפשר לקודד עומסי עבודה כדי לוודא שהם טוענים את הגרסה הצפויה של מודל למידת המכונה, על ידי בדיקת הגיבוב או החתימה של המודל לפני השימוש בו. היתרון של בדיקות נוספות כאלה הוא שהן מבטיחות את תקינות מודל למידת המכונה. במקרה כזה, מפעיל עומס העבודה יצטרך גם לעדכן את קובץ האימג' של עומס העבודה או את הפרמטרים שלו כשצפוי שייעשה שימוש בגרסאות שונות של מודל ה-ML בעומס העבודה.
4. מתן הרשאה להפעלת עומס העבודה
מתן הרשאה לעומס עבודה
Primus רוצה להעניק הרשאת גישה למודל למידת המכונה שלה לעומסי עבודה על סמך מאפיינים של המשאבים הבאים:
- מה: קוד מאומת
- איפה: סביבה מאובטחת
- Who: מפעיל מהימן
Primus משתמש באיחוד שירותי אימות הזהות של עומסי עבודה כדי לאכוף מדיניות גישה על סמך הדרישות האלה. איחוד שירותי אימות הזהות של עומסי עבודה מאפשר לציין תנאי מאפיינים. התנאים האלה מגבילים את הזהויות שיכולות לבצע אימות באמצעות מאגר הזהויות של כוח העבודה (WIP). אפשר להוסיף את שירות אימות האימות ל-WIP כספק של מאגר זהויות של כוח עבודה כדי להציג מדידות ולאכוף את המדיניות.
מאגר הזהויות של כוח העבודה כבר נוצר קודם לכן כחלק משלב ההגדרה של משאבי הענן. עכשיו Primus ייצור ספק חדש של מאגר זהויות של כוח עבודה ב-OIDC. הערך שצוין בשדה --attribute-condition
מאשר גישה לקונטיינר של עומס העבודה. כדי להשתמש בה צריך:
- מה:
$WORKLOAD_IMAGE_NAME
העדכני ביותר שהועלה למאגר$PRIMUS_ARTIFACT_REPOSITORY
. - איפה: סביבת המחשוב המהימנה של Confidential Space פועלת בתמונת ה-VM של Confidential Space שנתמכת במלואה.
- Who: חשבון השירות Secundus
$WORKLOAD_SERVICE_ACCOUNT
.
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 $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_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_SERVICEACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
הפעלת עומס עבודה
כחלק מהשלב הזה, נפעיל את עומס העבודה במכונה הווירטואלית של Confidential Space. מעבירים את הארגומנטים הנדרשים ל-TEE באמצעות דגל המטא-נתונים. הארגומנטים של קונטיינר עומס העבודה מועברים באמצעות החלק tee-cmd
של הדגל. התוצאה של ביצוע עומס העבודה תפורסם ב-$SECUNDUS_RESULT_STORAGE_BUCKET
.
gcloud compute instances create ${WORKLOAD_VM} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--project=${SECUNDUS_PROJECT_ID} \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform --zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICEACCOUNT}@${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}
הצגת התוצאות
אחרי שהעומס יושלם, התוצאה של עומס העבודה של ה-ML תפורסם ב-$SECUNDUS_RESULT_STORAGE_BUCKET
.
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
ריכזנו כאן כמה דוגמאות לאופן שבו עשויות להיראות תוצאות ההסקה בתמונות לדוגמה:
Image: sample_image_1.jpeg, Response: {'predicted_class': 531, 'top_k_predictions': [{'class_index': 531, 'score': 12.08437442779541}, {'class_index': 812, 'score': 10.269512176513672}, {'class_index': 557, 'score': 9.202644348144531}, {'class_index': 782, 'score': 9.08737564086914}, {'class_index': 828, 'score': 8.912498474121094}]}
Image: sample_image_2.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 9.53619384765625}, {'class_index': 557, 'score': 7.928380966186523}, {'class_index': 783, 'score': 7.70129919052124}, {'class_index': 531, 'score': 7.611623287200928}, {'class_index': 906, 'score': 7.021416187286377}]}
Image: sample_image_3.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 6.09878396987915}, {'class_index': 447, 'score': 5.992854118347168}, {'class_index': 444, 'score': 5.9582319259643555}, {'class_index': 816, 'score': 5.502010345458984}, {'class_index': 796, 'score': 5.450454235076904}]}
לכל תמונה לדוגמה בקטגוריית אחסון ב-Secundus תופיע רשומה בתוצאות. הרשומה הזו תכלול שני פרטי מידע חשובים:
- Index of predicted_class: זהו אינדקס מספרי שמייצג את הכיתה שהמודל צופה שהתמונה שייכת אליה.
- Top_k_predictions: הפונקציה הזו מספקת עד k תחזיות לתמונה, לפי דירוג מהסבירות הגבוהה ביותר לסבירות הנמוכה ביותר. הערך של k מוגדר ל-5 ב-codelab הזה, אבל אפשר לשנות אותו בקוד של עומס העבודה כדי לקבל יותר או פחות תחזיות.
כדי לתרגם את מדד הכיתה לשם כיתה שאפשר לקרוא, אפשר לעיין ברשימת התוויות הזמינות כאן. לדוגמה, אם מופיע אינדקס כיתה של 2, הוא תואם לתווית הכיתה 'tench' ברשימה של התוויות.
בקודלאב הזה הדגמנו מודל בבעלות Primus שפורסם רק לעומס העבודה שפועל בסביבת TEE. Secundus מפעיל את עומס העבודה של למידת המכונה ב-TEE, ועומס העבודה הזה יכול לצרוך את המודל שבבעלות Primus, בזמן ש-Primus שומרת על שליטה מלאה במודל.
הרצת עומס עבודה לא מורשה
Secundus משנה את תמונת עומס העבודה על ידי משיכה של תמונת עומס עבודה אחרת ממאגר הארטיפקטים שלו, שלא אושר על ידי Primus. מאגר הזהויות של כוח העבודה ב-Primus אישר רק את קובץ האימג' של כוח העבודה ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG
.
הפעלה מחדש של עומס העבודה
כשמכונה Secundus תנסה להריץ את עומס העבודה המקורי באמצעות קובץ האימג' החדש של עומס העבודה, היא תיכשל. כדי לראות את השגיאה, מוחקים את קובץ התוצאות המקורי ואת מכונה הווירטואלית, ואז מנסים להריץ שוב את עומס העבודה.
צריך לוודא שפורסמה תמונה חדשה של Docker ב-Artifact Registry של Secundus (כ-us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}
), וחשבון השירות של עומס העבודה ($WORKLOAD_SERVICEACCOUNT
) העניק לקורא של Artifact Registry הרשאה לקרוא את התמונה החדשה של עומס העבודה. המטרה היא לוודא שעומס העבודה לא ייסגר לפני שמדיניות ה-WIP של Primus תדחה את האסימון שהוצג על ידי עומס העבודה.
מחיקת קובץ התוצאות הקיים ומכונה וירטואלית
- מגדירים את הפרויקט כפרויקט
$SECUNDUS_PROJECT_ID
.
gcloud config set project $SECUNDUS_PROJECT_ID
- מוחקים את קובץ התוצאה.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
- מוחקים את המכונה הווירטואלית הסודית.
gcloud compute instances delete ${WORKLOAD_VM} --zone=${SECUNDUS_PROJECT_ZONE}
מריצים את עומס העבודה הלא מורשה:
gcloud compute instances create ${WORKLOAD_VM} \
--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_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata ^~^tee-image-reference=us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}
הצגת השגיאה
במקום התוצאות של עומס העבודה, תופיע שגיאה (The given credential is rejected by the attribute condition
).
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
5. הסרת המשאבים
כאן מופיע הסקריפט שאפשר להשתמש בו כדי לנקות את המשאבים שיצרנו במסגרת ה-Codelab הזה. במסגרת הניקוי, המשאבים הבאים יימחקו:
- קטגוריית האחסון של הקלט ב-Primus (
$PRIMUS_INPUT_STORAGE_BUCKET)
. - חשבון השירות של Primus (
$PRIMUS_SERVICEACCOUNT
). - מאגר פריטי מידע שנוצרו בתהליך פיתוח (Artifact) של Primus (
$PRIMUS_ARTIFACT_REPOSITORY
). - מאגר הזהויות של כוח העבודה ב-Primus (
$PRIMUS_WORKLOAD_IDENTITY_POOL
). - חשבון השירות של כוח העבודה של Secundus (
$WORKLOAD_SERVICEACCOUNT
). - קטגוריית האחסון של הקלט של Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET)
. - מכונות Compute של כוח עבודה.
- קטגוריית האחסון של התוצאה של Secundus (
$SECUNDUS_RESULT_STORAGE_BUCKET
).
$ ./cleanup.sh
אם סיימתם את הבדיקה, כדאי למחוק את הפרויקט.
- נכנסים למסוף Cloud Platform.
- בוחרים את הפרויקט שרוצים להשבית ולוחצים על 'Delete' בחלק העליון: הפעולה הזו תזמן את המחיקה של הפרויקט.
מה השלב הבא?
כדאי לעיין בחלק מהמדריכים הבאים בנושא Codelab…