1. סקירה כללית
מכונות וירטואליות סודיות (CVM) הן סוג של מכונות וירטואליות ב-Compute Engine שמשתמשות בהצפנת זיכרון מבוססת-חומרה ובהגנה על השלמות. כך מובטח שלא תהיה אפשרות לקרוא או לשנות את הנתונים והאפליקציות בזיכרון בזמן השימוש. בשיעור Codelab הזה נסביר איך ליצור הצעת מחיר לאימות Intel TDX במכונה וירטואלית סודית (CVM) ולאמת אותה באופן מקומי למטרות הדגמה. בנוסף, תאמתו את המקור של המארח והמופע של CVM ב-Google Cloud.
ה-codelab הזה כולל את השלבים הבאים:
- הגדרת מכונה וירטואלית חסויה של Intel TDX
- אחזור הצעת מחיר לאימות TDX
- אימות הצעת המחיר והערך החד-פעמי של אישור TDX
- אימות התקינות של קושחת GCE (OVMF)
- אימות המקור של מארח ומופע GCE TDX
מה תלמדו
- איך מאחזרים הצעת מחיר לאימות TDX במכונה וירטואלית סודית באמצעות כלי
go-tdx-guest - איך מאמתים את האותנטיות של הצעת המחיר, את התוקף שלה (nonce) ואת תקינות הקושחה של GCE (OVMF)
- איך מאמתים את המקור של מארח ומופע ב-Google Cloud (
PPIDחיפוש במאגר וPZIDקישור מופע)
הדרישות
- פרויקט ב-Google Cloud Platform
- ידע בסיסי ב-Google Compute Engine וב-מכונות וירטואליות חסויות
2. הגדרה ודרישות
כדי להפעיל את ממשקי ה-API הנדרשים, מריצים את הפקודה הבאה במסוף Google Cloud או בסביבת הפיתוח המקומית:
gcloud auth login
gcloud services enable \
cloudapis.googleapis.com \
cloudshell.googleapis.com \
confidentialcomputing.googleapis.com \
compute.googleapis.com
3. הגדרת CVM ואחזור של TDX Quote
בשלב הזה, תיצרו מכונה וירטואלית של TDX ותקבלו הצעת מחיר לאימות TDX מהחומרה.
- עוברים אל מסוף Google Cloud או אל סביבת הפיתוח המקומית. כדי ליצור CVM:
gcloud config set project <project-id>
gcloud compute instances create tdx-cvm-attestation-codelab \
--machine-type=c3-standard-4 \
--zone=us-central1-c \
--confidential-compute-type=TDX \
--maintenance-policy=TERMINATE \
--image-family=ubuntu-2204-lts \
--image-project=ubuntu-os-cloud \
--scopes https://www.googleapis.com/auth/cloud-platform
מחליפים את <project-id> במזהה הייחודי של הפרויקט.
- מתחברים ל-CVM.
gcloud compute ssh --zone us-central1-c tdx-cvm-attestation-codelab
- מגדירים סביבת Go במכונת ה-CVM:
wget https://go.dev/dl/go1.24.0.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.24.0.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin
- מתקינים את הכלים של
go-tdx-guest.
משכפלים את המאגר ובונים את הכלי attest, שמפיק הצעת מחיר של TDX.
git clone https://github.com/google/go-tdx-guest.git cd go-tdx-guest/tools/attest go build
- מאחזרים את הצעת המחיר לאימות TDX:
משתמשים בכלי attest כדי ליצור הצעת מחיר. נעביר nonce (64 בייט של REPORT_DATA) ונשמור את הפלט ב-quote.bin.
nonce=$(head -c 64 /dev/urandom | xxd -p | tr -d '\n' | head -c 128) sudo ./attest -in $nonce -inform hex -outform bin -out quote.bin
הצעת המחיר של TDX נשמרה עכשיו בquote.bin.
4. אימות של הצעת המחיר של TDX Attestation
אחרי שיצרנו הצעת מחיר של Intel TDX (quote.bin), אנחנו יכולים לאמת אותה באמצעות הכלי check שזמין במאגר go-tdx-guest. הכלי בודק את הציטוט בהשוואה למפרטים של Intel, מאמת אותו בהשוואה לנתונים שהורדו משירות אימות ההקצאה (PCS) של Intel ומאמת את מגבלות המדיניות, כמו ה-nonce, כדי למנוע מתקפות שידור חוזר.
- מנווטים לספריית הכלים
checkויוצרים אותה:
cd ~/go-tdx-guest/tools/check go build
- מריצים את הכלי כדי לאמת גם את החתימות הקריפטוגרפיות וגם את ה-nonce. נשתמש בדגל
-get_collateral=trueכדי להוריד את האישורים הדרושים של TEE מ-PCS של Intel, בדגל-check_crl=trueכדי לאמת ביטולים של אישורים ובדגל-report_dataכדי לאמת את התוקף של ה-nonce:
./check -in ~/go-tdx-guest/tools/attest/quote.bin -inform bin \
-get_collateral=true -check_crl=true \
-report_data $nonce
אם הצעת המחיר תקפה מבחינה קריפטוגרפית והערך החד-פעמי תואם, הכלי ירשום הודעת הצלחה שדומה לדוגמה הבאה ויצא עם קוד 0:
INFO : TDX Quote verified successfully
5. אימות התקינות של קושחת GCE (OVMF)
המסמכים של Intel מאמתים את החומרה, אבל לא מאמתים שהמכונה הווירטואלית מריצה קושחה מקורית של Google Compute Engine (GCE) שלא בוצעו בה שינויים.
Google מפרסמת אישורים להשקה חתומים (שכוללים מדידות שלמות של הפניה מוזהבת, או RIM) לכל הגרסאות הרשמיות של קושחת GCE UEFI (OVMF) בקטגוריה ציבורית של Google Cloud Storage (GCS).
בשלב הזה, נשתמש בכלי הציבורי של Google gce-tcb-verifier כדי לאחזר באופן אוטומטי את אישור הקושחה מ-GCS, לאמת את החתימה של Google עליו ולאמת את מדידת הקושחה של CVM (MRTD) מולו.
1. פיתוח הכלי לאימות TCB ב-GCE
- משכפלים את המאגר הציבורי
gce-tcb-verifierמ-GitHub:
cd ~ git clone https://github.com/google/gce-tcb-verifier.git
- עוברים לספרייה של כלי ה-CLI ובוחרים באפשרות לבנייה:
cd gce-tcb-verifier/gcetcbendorsement/cli go build -o gcetcbendorsement
- כדי שיהיה לכם נוח, מוסיפים את כלי הבנייה לנתיב:
export PATH=$PATH:$(pwd)
2. אימות הצעת המחיר מול אישור הקושחה של GCE
עכשיו מריצים את הכלי gcetcbendorsement כדי לאמת את הצעת המחיר של האישור. הכלי מצליח לאמת את הנתונים בלי להציג הודעה, ולכן אפשר לשרשר את הפקודה עם && echo "Validation Succeeded!" כדי לקבל אישור ברור על ההצלחה:
gcetcbendorsement tdx validate ~/go-tdx-guest/tools/attest/quote.bin && echo "Validation Succeeded!"
פלט:
Validation Succeeded!
מה קורה מאחורי הקלעים?
- חילוץ: הכלי מנתח את
quote.binומחלץ את מדידת הקושחה (MRTD) מהגוף של הצעת המחיר של TD. - אחזור: המערכת יוצרת כתובת URL של GCS באמצעות
MRTDומורידה אתVMLaunchEndorsementהמתאים מהמאגר הציבורי של Google (gs://gce_tcb_integrity). - אימות החתימה: המערכת מאחזרת את אישור ה-CA הבסיסי הציבורי של Google (
https://pki.goog/cloud_integrity/GCE-cc-tcb-root_1.crt) ומאמתת באופן קריפטוגרפי את החתימה של Google על האישור שהורד. - אימות המדידה: המערכת משווה את
MRTDשנחתם על ידי חומרת ה-TDX בהצעת המחיר שלכם למדידות הייחוס המוזהבות באישור החתום של Google.
אם כל הבדיקות עוברות בהצלחה, הפקודה תצא עם קוד 0 באופן שקט (או תדפיס Validation Succeeded! עם השרשור של הפקודה echo), וכך תוכיח שה-VM שלכם מריץ קושחה מקורית שאושרה על ידי Google.
6. אימות המקור של מארח ומופע GCE TDX
בעוד שאימות של אישור וקושחה מאשרים שהמכונה הווירטואלית פועלת על חומרת Intel TDX מקורית עם קושחת UEFI שאושרה על ידי Google, אימות המקור של GCE TDX מקשר את הצעת המחיר של האישור ישירות לתשתית של Google Cloud בשתי דרכים קריטיות:
- מקור המארח: מזהה את המחשב המארח הפיזי ב-Google Cloud שבו פועלת המכונה הווירטואלית, על ידי חילוץ מזהה PPID (מזהה הקצאת משאבים בפלטפורמה) הייחודי של הפלטפורמה מאישור ה-PCK של הצעת המחיר. לאחר מכן, הוא מאחזר את רשומת הרישום של פלטפורמת המארח מ-Google Cloud Storage (
confidential-host-registry), שבה מתועד האזור הפיזי ומתי Google Cloud הקצתה לאחרונה את אישורי האימות של המארח. - מקור המופע (קישור PZID): Google Cloud מקשר באופן מוצפן את הזהות הספציפית של מכונת ה-VM (
ProjectNumber,Zoneו-InstanceID) לרישוםMR_OWNERשל הצעת המחיר של TDX. אימות הקישור הזה מבטיח שהצעת המחיר שייכת באופן בלעדי למופע שלכם ומונע התקפות חוזרות או התקפות החלפה של הצעות מחיר במכונות וירטואליות או בפרויקטים שונים.
כלי ה-CLI (gceprovenance שנמצא גם במאגר go-tdx-guest) מבצע אימות מלא של מקורות המידע באופן אוטומטי – בדיקה של האותנטיות של הציטוט, של אתגר הרעננות, של רשומת מאגר המידע של המארח ושל הקישור של מזהה PZID של המופע בפקודה אחת.
- מנווטים לספרייה
gceprovenanceויוצרים את הכלי:
cd ~/go-tdx-guest/tools/gceprovenance go build
- מריצים אימות מלא של מקורות באמצעות הפקודה
verify. נעביר את קובץ הצעת המחיר (quote.bin) ואת אתגר ה-nonce ($nonce) שיצרנו קודם:
./gceprovenance verify -quote ~/go-tdx-guest/tools/attest/quote.bin -challenge $nonce
- אם כל הבדיקות עוברות בהצלחה, הכלי מפיק דוח אימות שדומה לדוח הבא:
GCE TDX provenance verification: OK Instance: projects/123456789012/zones/us-central1-c/instances/987654321098765 Checks Quote verification: OK REPORT_DATA challenge: OK Host registry document: found PZID binding: OK PPID: 0123456789abcdef0123456789abcdef Quote: tdx_quote.bin Host registry: host_registry.json
מה קורה מאחורי הקלעים?
- הצעת מחיר ואתגר: הכלי מאמת את שרשרת החתימה של הצעת המחיר מול אישור הבסיס של Intel, ומוודא שערך ה-
REPORT_DATAשל הצעת המחיר תואם לאתגר$nonceשלכם. - אימות מקור (
PPID): הוא מחלץ את הערך ההקסדצימליPPIDבאורך 32 תווים מאישור ה-PCK של עלה ומוריד את מסמך ה-JSON של רישום המארח מ-GCS (https://storage.googleapis.com/confidential-host-registry/). - מקור המידע של המופע (
PZID): הוא שולח שאילתה לשרת המטא-נתונים המקומי של GCE כדי לקבל את מזהה הפרויקט המספרי, האזור ומזהה המופע, בונה את מטען ה-JSON הקנוני של PZID ({"instanceId":...,"numericalProjectId":...,"zone":...}), מחשב את הגיבוב שלו ב-SHA-384 ומוודא שהוא תואם ל-MR_OWNERבציטוט.
- בודקים את מסמך רישום המארח שאוחזר:
כברירת מחדל, הפקודה verify שומרת את מסמך ה-JSON של מרשם המארחים שאוחזר ב-host_registry.json. אפשר לבדוק אותו כדי לראות את המטא-נתונים של פלטפורמת האירוח:
cat host_registry.json
פלט לדוגמה:
{
"zone": "us-central1",
"timestamp": "2026-02-17T11:25:12Z"
}
המטא-נתונים האלה מתארים את מאפייני המחשב המארח:
-
zone: האזור או האזור הפיזי ב-Google Cloud שבו נמצא המחשב המארח. -
timestamp: התאריך והשעה ב-UTC שבהם הוקצו ואומתו לאחרונה אישורי אימות החומרה של המכונה המארחת הזו על ידי Google Cloud.
7. הסרת המשאבים
מריצים את הפקודות הבאות במסוף הענן או בסביבת הפיתוח המקומית:
# Delete the CVM instance gcloud compute instances delete tdx-cvm-attestation-codelab --zone=us-central1-c