אימות של מכונה וירטואלית מסוג Intel TDX שפועלת ב-Google Cloud

כדי לוודא שמכונת VM סודית של Intel TDX פועלת ב- Google Cloud, צריך לקבוע את provenance שלה. כדי לקבוע את מקור הנתונים, המערכת מבצעת את הבדיקות הבאות:

  • אימות הציטוט וקישור לאתגר: כדי לאמת את האותנטיות של ציטוט Intel TDX, משתמשים באישור הבסיסי המוטמע של Intel. אפשר גם לאמת את הרעננות מול אתגר צפוי בשדה REPORT_DATA של הציטוט.

  • אימות המקור של המארח: חילוץ מזהה הקצאת המשאבים בפלטפורמה (PPID) מאישור ה-PCK המוטמע בציטוט. משתמשים ב-PPID כדי לאחזר את מסמך ה-JSON של מאגר המארחים מקטגוריה של Cloud Storage כדי לאמת את מקור הנתונים.

  • אימות מקור המופע: משתמשים במספר הפרויקט, באזור ובמזהה המופע (PZID) של מופע מכונת ה-VM הסודית כדי לחשב תקציר SHA-384, ואז מוודאים שהתקציר תואם לערך השדה MR_OWNER בציטוט של Intel TDX.

אימות מקור מרחוק

מומלץ להשתמש בכלי gceprovenance כדי לקבוע את המקור של מכונות Intel TDX. הכלי מחלץ באופן אוטומטי את הערכים הנדרשים ומאחזר את מסמך המקור.

כדי לאמת את מקור המוצר מרחוק באמצעות gceprovenance, צריך לבצע את ההוראות הבאות:

  1. משכפלים את מאגר ה-GitHub‏ go-tdx-guest אל מאמת הנתונים המרוחק:

    git clone https://github.com/google/go-tdx-guest.git
    
  2. בהתאם למערכת ההפעלה של האורח, יכול להיות שתצטרכו להתקין כמה תלויות של Go כדי לבנות את הכלים ב-go-tdx-guest. האופן שבו עושים את זה משתנה בהתאם למערכת ההפעלה. לדוגמה, הפקודות הבאות מתקינות את יחסי התלות הנדרשים ב-Ubuntu:

    sudo apt update
    sudo apt install golang-go build-essential
    
  3. בניית הכלי gceprovenance:

    go build -C go-tdx-guest/tools/gceprovenance .
    
  4. יצירת אתגר של 64 בייט שהמופע של המכונה הווירטואלית הסודית של Intel TDX צריך לקשר לציטוט שלו:

    head -c 64 /dev/urandom > challenge.bin
    
  5. שולחים את קובץ האתגר למופע של מכונה וירטואלית סודית ב-Intel TDX שרוצים לאמת.

  6. במכונה וירטואלית חסויה של Intel TDX, מעבירים את קובץ האתגר כקלט (inblob) אל Linux ConfigFS בכתובת /sys/kernel/config/tsm/report/:

    sudo mkdir -p /sys/kernel/config/tsm/report/report0
    sudo sh -c 'cat challenge.bin > /sys/kernel/config/tsm/report/report0/inblob'
    

    לאחר מכן, המערכת כותבת את האתגר בשדה REPORT_DATA של הצעת המחיר.

  7. מאחזרים את בייטים של הצעת המחיר הגולמית מקובץ outblob שנוצר ומנקים את ספריית report0:

    sudo cat /sys/kernel/config/tsm/report/report0/outblob > quote.bin
    sudo rmdir /sys/kernel/config/tsm/report/report0
    
  8. מריצים שאילתה בשרת המטא-נתונים המקומי כדי לקבל את מזהה המכונה, מספר הפרויקט והאזור של מכונת ה-VM הסודית:

    PROJECT_NUMBER=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/numeric-project-id" -H "Metadata-Flavor: Google")
    INSTANCE_ID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/id" -H "Metadata-Flavor: Google")
    ZONE_PATH=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/zone" -H "Metadata-Flavor: Google")
    ZONE=$(basename "$ZONE_PATH")
    
  9. שולחים את הנתונים הבינאריים של הצעת המחיר (quote.bin), את מספר הפרויקט, את מזהה המופע ואת האזור למאמת המרוחק.

  10. בכלי לאימות מרחוק, ממירים את האתגר למחרוזת הקסדצימלית באורך 128 תווים, ואז מעבירים אותה אל gceprovenance. לאחר מכן, הכלי מאמת את החתימה של הציטוט ואת הקשרים של מקור הנתונים:

    CHALLENGE_HEX=$(hexdump -v -e '/1 "%02x"' challenge.bin)
    ./go-tdx-guest/tools/gceprovenance/gceprovenance verify \
        -quote PATH_TO_QUOTE \
        -instance projects/PROJECT_NUMBER/zones/ZONE/instances/INSTANCE_ID \
        -challenge $CHALLENGE_HEX
    

    עליך לספק את הפרטים הבאים:

    • ‫PATH_TO_QUOTE: הנתיב לקובץ הצעת המחיר שסופק.

    • ‫PROJECT_NUMBER: מספר הפרויקט שצוין.

    • ‫ZONE: האזור שצוין.

    • ‫INSTANCE_ID: המזהה של מופע Confidential VM שסופק.

    תגובה מוצלחת תיראה כך:

    GCE TDX provenance verification: OK
    
    Instance
      Zone: ZONE
      Project: PROJECT_NUMBER
      Instance ID: INSTANCE_ID
    
    Checks
      Quote verification: OK
      REPORT_DATA challenge: OK
      Host registry document: found
      PZID binding: OK
    
    PPID: PPID
    Quote: tdx_quote.bin
    Host registry: host_registry.json
    

למידע על פקודות אחרות של gceprovenance, אפשר לעיין במאגר GitHub.