1. ภาพรวม
Confidential Virtual Machine (CVM) เป็นเครื่องเสมือนประเภทหนึ่งของ Compute Engine ที่ใช้การเข้ารหัสหน่วยความจำและการปกป้องความสมบูรณ์ตามฮาร์ดแวร์ ซึ่งช่วยให้มั่นใจได้ว่าข้อมูลและแอปพลิเคชันของคุณจะอ่านหรือแก้ไขในหน่วยความจำไม่ได้ขณะใช้งาน ใน Codelab นี้ คุณจะได้เรียนรู้วิธีสร้างใบเสนอราคาการรับรอง Intel TDX ใน CVM และยืนยันใบเสนอราคาดังกล่าวในเครื่องเพื่อวัตถุประสงค์ในการสาธิต นอกจากนี้ คุณยังจะได้ยืนยันแหล่งที่มาของโฮสต์และอินสแตนซ์ Google Cloud ของ CVM ด้วย
Codelab นี้มีขั้นตอนต่อไปนี้
- การตั้งค่า VM ที่เป็น Confidential VM ของ Intel TDX
- การดึงข้อมูลใบเสนอราคาการรับรอง TDX
- การยืนยันใบเสนอราคาการรับรอง TDX และ Nonce
- การยืนยันความสมบูรณ์ของเฟิร์มแวร์ GCE (OVMF)
- การยืนยันแหล่งที่มาของโฮสต์และอินสแตนซ์ GCE TDX
สิ่งที่คุณจะได้เรียนรู้
- วิธีดึงข้อมูลใบเสนอราคาการรับรอง TDX ใน CVM โดยใช้เครื่องมือ
go-tdx-guest - วิธียืนยันความถูกต้อง ความใหม่ (Nonce) และความสมบูรณ์ของเฟิร์มแวร์ GCE (OVMF) ของใบเสนอราคา
- วิธียืนยันแหล่งที่มาของโฮสต์และอินสแตนซ์ Google Cloud (การค้นหารีจิสทรี
PPIDและการเชื่อมโยงอินสแตนซ์PZID)
สิ่งที่คุณต้องมี
- โปรเจ็กต์ Google Cloud Platform
- ความรู้พื้นฐานเกี่ยวกับ Google Compute Engine และ Confidential VM
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
ในขั้นตอนนี้ คุณจะได้สร้าง TDX CVM และดึงข้อมูลใบเสนอราคาการรับรอง 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 (REPORT_DATA ขนาด 64 ไบต์) และบันทึกเอาต์พุตลงใน 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
เมื่อสร้างใบเสนอราคา Intel TDX (quote.bin) แล้ว เราก็สามารถยืนยันใบเสนอราคาดังกล่าวได้โดยใช้เครื่องมือ check ที่มีให้ในที่เก็บ go-tdx-guest เครื่องมือนี้จะตรวจสอบใบเสนอราคาตามข้อกำหนดของ Intel ยืนยันใบเสนอราคาเทียบกับหลักประกันที่ดาวน์โหลดจากบริการการรับรองการจัดสรร (PCS) ของ Intel และตรวจสอบข้อจำกัดของนโยบาย เช่น Nonce เพื่อป้องกันการโจมตีแบบ Replay
- ไปที่ไดเรกทอรีเครื่องมือ
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
หากใบเสนอราคามีการเข้ารหัสที่ถูกต้องและ Nonce ตรงกัน เครื่องมือจะบันทึกข้อความแสดงความสำเร็จที่คล้ายกับตัวอย่างต่อไปนี้และออกจากระบบด้วยรหัส 0
INFO : TDX Quote verified successfully
5. การยืนยันความสมบูรณ์ของเฟิร์มแวร์ GCE (OVMF)
แม้ว่าหลักประกันของ Intel จะยืนยันฮาร์ดแวร์ แต่ก็ไม่ได้ยืนยันว่าเครื่องเสมือนกำลังเรียกใช้เฟิร์มแวร์ Google Compute Engine (GCE) ของแท้ที่ไม่มีการแก้ไข
Google เผยแพร่การรับรองการเปิดตัว ที่ลงชื่อแล้ว (ซึ่งมีการวัดความสมบูรณ์ของการอ้างอิงหรือ RIMs ที่ดีที่สุด) สำหรับเฟิร์มแวร์ GCE UEFI (OVMF) เวอร์ชันอย่างเป็นทางการทั้งหมดไปยัง Bucket สาธารณะของ Google Cloud Storage (GCS)
ในขั้นตอนนี้ เราจะใช้เครื่องมือ gce-tcb-verifier สาธารณะของ Google เพื่อดึงข้อมูลการรับรองเฟิร์มแวร์จาก GCS โดยอัตโนมัติ ยืนยันลายเซ็นของ Google ในการรับรองดังกล่าว และตรวจสอบการวัดเฟิร์มแวร์ (MRTD) ของ CVM กับการรับรองนั้น
1. สร้างเครื่องมือ GCE TCB Verifier
- โคลนที่เก็บ
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
- เพิ่มเครื่องมือที่สร้างขึ้นลงใน PATH เพื่อความสะดวก
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ที่เกี่ยวข้องจาก Bucket สาธารณะของ 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
แม้ว่าการรับรองและการยืนยันเฟิร์มแวร์จะยืนยันว่า VM ของคุณทำงานบนฮาร์ดแวร์ Intel TDX ของแท้ด้วยเฟิร์มแวร์ UEFI ที่ Google รับรอง แต่การยืนยันแหล่งที่มาของ GCE TDX จะเชื่อมโยงใบเสนอราคาการรับรองกับโครงสร้างพื้นฐานของ Google Cloud โดยตรงใน 2 วิธีที่สำคัญ ดังนี้
- แหล่งที่มาของโฮสต์: ระบุเครื่องโฮสต์ทางกายภาพของ Google Cloud ที่เรียกใช้ VM ของคุณโดยการแยกPPID (รหัสการจัดสรรแพลตฟอร์ม) ที่ไม่ซ้ำกันของแพลตฟอร์มจากใบรับรอง PCK ของใบเสนอราคา จากนั้นจะดึงข้อมูลบันทึกรีจิสทรีของแพลตฟอร์มโฮสต์จาก Google Cloud Storage (
confidential-host-registry) ซึ่งบันทึกโซนทางกายภาพและเวลาที่ Google Cloud จัดสรรใบรับรองเอกสารรับรองของโฮสต์ครั้งล่าสุด - แหล่งที่มาของอินสแตนซ์ (การผูก PZID): Google Cloud จะผูกข้อมูลประจำตัวของ VM ที่เฉพาะเจาะจง (
ProjectNumber,Zone, และInstanceID) เข้ากับรีจิสเตอร์MR_OWNERของใบเสนอราคา TDX โดยใช้การเข้ารหัส การยืนยันการผูกนี้จะช่วยให้มั่นใจได้ว่าใบเสนอราคาเป็นของ อินสแตนซ์ของคุณ เท่านั้น และป้องกันการโจมตีแบบ Replay หรือการโจมตีแบบ Substitution ใน VM หรือโปรเจ็กต์ต่างๆ
เครื่องมือ 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. การทำความสะอาดข้อมูล
เรียกใช้คำสั่งต่อไปนี้ใน Cloud Console หรือสภาพแวดล้อมในการพัฒนาซอฟต์แวร์ในเครื่อง
# Delete the CVM instance gcloud compute instances delete tdx-cvm-attestation-codelab --zone=us-central1-c
8. ขั้นตอนถัดไป
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Confidential VM และ Compute Engine