Melakukan booting VM dengan aman

Dokumen ini menjelaskan cara mengaktifkan Booting Aman atau virtualized trusted platform module (vTPM) pada instance virtual machine (VM) di Google Distributed Cloud (GDC) dengan air gap.

Dokumen ini ditujukan untuk developer dalam grup administrator platform atau operator aplikasi yang mengonfigurasi Booting Aman dan vTPM pada VM di lingkungan GDC. Untuk mengetahui informasi selengkapnya, lihat Audiens untuk dokumentasi GDC dengan air gap.

Tentang Booting Aman

Booting Aman adalah fitur yang memastikan sistem hanya menjalankan software asli dengan memverifikasi tanda tangan digital semua komponen booting dan menghentikan proses jika verifikasi gagal. Fitur ini menggunakan firmware Unified Extensible Firmware Interface (UEFI) untuk mengelola sertifikat dan kunci yang digunakan produsen untuk menandatangani firmware sistem, bootloader, dan biner yang dimuat.

Pada setiap booting, firmware UEFI memverifikasi tanda tangan digital setiap komponen terhadap kunci yang disetujui yang disimpan dan memblokir komponen yang tidak ditandatangani atau tidak ditandatangani dengan benar. Untuk mengaktifkan Booting Aman di instance VM, Anda harus menetapkan kolom shieldConfig.bootType VM ke uefi, dan shieldConfig.enableSecureBoot ke true.

Untuk melihat dokumentasi UEFI resmi, lihat https://uefi.org/sites/default/files/resources/UEFI_Secure_Boot_in_Modern_Computer_Security_Solutions_2013.pdf.

Tentang virtual trusted platform module

vTPM adalah chip komputer virtual khusus yang melindungi kunci dan sertifikat yang digunakan untuk mengautentikasi akses sistem. Lihat https://trustedcomputinggroup.org/trusted-platform-module-tpm-summary/ untuk mengetahui informasi selengkapnya tentang vTPM.

Anda juga dapat menggunakan vTPM untuk melindungi secret melalui perlindungan atau penyegelan. Untuk mengetahui informasi selengkapnya tentang penyimpanan tersegel, lihat https://en.wikipedia.org/wiki/Trusted_Computing#SEALED-STORAGE. Baca project Go-TPM di GitHub - https://github.com/google/go-tpm - untuk contoh bahasa Go yang mengilustrasikan cara menggunakan vTPM untuk tujuan ini.

Sebelum memulai

Untuk menggunakan perintah antarmuka command line (CLI) gdcloud, pastikan Anda telah mendownload, menginstal, dan mengonfigurasi gdcloud CLI. Semua perintah untuk Distributed Cloud menggunakan CLI gdcloud atau kubectl, dan memerlukan lingkungan sistem operasi (OS).

Mendapatkan jalur file kubeconfig

Untuk menjalankan perintah terhadap server Management API, pastikan Anda memiliki resource berikut:

  1. Login dan buat file kubeconfig untuk server Management API jika Anda belum memilikinya.

  2. Gunakan jalur ke file kubeconfig server Management API untuk mengganti MANAGEMENT_API_SERVER dalam petunjuk ini.

Meminta peran IAM

Untuk mendapatkan izin yang diperlukan guna mengaktifkan Booting Aman atau vTPM di VM Anda, minta Admin Project IAM untuk memberi Anda peran Admin Project Virtual Machine (project-vm-admin).

Semua peran VM harus terikat ke namespace project tempat VM berada. Ikuti langkah-langkah untuk memverifikasi akses Anda.

Mengaktifkan Booting Aman

Mengaktifkan Booting Aman untuk VM. Gunakan petunjuk berikut untuk VM bernama VM_NAME di namespace project (PROJECT_NAMESPACE).

  1. Hentikan VM Anda jika sedang berjalan sebelum menerapkan patch. Jika Anda mencoba melakukan patch pada shieldConfig saat VM berjalan, API akan menampilkan error Forbidden: Changes to shieldConfig are not allowed while the VM is running. Untuk mengetahui petunjuknya, lihat Menghentikan VM.

  2. Perbarui resource kustom VM Anda untuk mengaktifkan Booting Aman:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_NAMESPACE \
      patch virtualmachines.virtualmachine.gdc.goog VM_NAME \
      --type merge --patch $'
    spec:
      shieldConfig:
        bootType: uefi
        enableSecureBoot: true
    '
    

    Ganti variabel berikut:

    • MANAGEMENT_API_SERVER: file kubeconfig untuk server API pengelolaan.
    • PROJECT_NAMESPACE: namespace project tempat VM berada.
    • VM_NAME: nama VM.
  3. Setelah berhasil menerapkan patch, mulai VM Anda menggunakan petunjuk untuk memulai VM.

  4. Pastikan Anda telah mengaktifkan Booting Aman. Buat koneksi SSH ke VM Anda dan jalankan perintah berikut:

    mokutil --sb-state
    

    Jika Anda berhasil mengaktifkan Booting Aman, perintah akan menampilkan SecureBoot enabled.

    Jika alat mokutil melaporkan bahwa Anda belum mengaktifkan Booting Aman, ikuti langkah-langkah di bagian Memecahkan masalah konfigurasi Booting Aman.

Memecahkan masalah konfigurasi Booting Aman

  1. Buka resource kustom VM Anda di editor:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_NAMESPACE \
      edit virtualmachines.virtualmachine.gdc.goog VM_NAME
    

    Ganti variabel berikut:

    • MANAGEMENT_API_SERVER: file kubeconfig untuk server API pengelolaan.
    • PROJECT_NAMESPACE: namespace project tempat VM berada.
    • VM_NAME: nama VM.
  2. Cari kolom atau nilai yang tidak ada seperti yang ditunjukkan di kolom spec di Mengaktifkan Booting Aman. Tanda tersebut diperlukan.

  3. Jika ada yang tidak ada atau salah, edit spec untuk menambahkan kolom yang tidak ada dan memperbaiki nilai yang salah.

  4. Simpan file.

  5. Ikuti langkah-langkah di bagian Memulai ulang VM.

Jika langkah-langkah sebelumnya tidak menyelesaikan masalah Anda, periksa dokumentasi yang sesuai dengan sistem operasi (OS) VM untuk memverifikasi bahwa versi OS mendukung Booting Aman.

Mengaktifkan vTPM

Mengaktifkan vTPM untuk VM. Gunakan petunjuk berikut untuk VM bernama VM_NAME di namespace project (PROJECT_NAMESPACE).

  1. Hentikan VM Anda jika sedang berjalan sebelum menerapkan patch. Jika Anda mencoba melakukan patch pada shieldConfig saat VM berjalan, API akan menampilkan error Forbidden: Changes to shieldConfig are not allowed while the VM is running. Untuk mengetahui petunjuknya, lihat Menghentikan VM.

  2. Perbarui resource kustom VM Anda untuk mengaktifkan vTPM:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_NAMESPACE \
      patch virtualmachines.virtualmachine.gdc.goog VM_NAME \
      --type merge --patch $'
    spec:
      shieldConfig:
        enableVtpm: true
    '
    

    Ganti variabel berikut:

    • MANAGEMENT_API_SERVER: file kubeconfig untuk server API pengelolaan.
    • PROJECT_NAMESPACE: namespace project tempat VM berada.
    • VM_NAME: nama VM.
  3. Setelah berhasil menerapkan patch, mulai VM Anda menggunakan petunjuk untuk memulai VM.

  4. Pastikan Anda telah mengaktifkan vTPM. Buat koneksi SSH ke VM Anda dan jalankan perintah berikut:

    dmesg | grep -i tpm
    

    Jika Anda berhasil mengaktifkan vTPM, perintah akan menampilkan Modul TPM sebagai bagian dari tabel ACPI. Outputnya mirip dengan hal berikut ini:

    [    7.620985] tpm_tis MSFT0101:00: 2.0 TPM (device-id 0x1, rev-id 1)
    

    Jika ACPI tables tidak menampilkan modul TPM, ikuti langkah-langkah di bagian Memecahkan masalah konfigurasi vTPM.

Memecahkan masalah konfigurasi vTPM

  1. Buka resource kustom VM Anda di editor:

    kubectl --kubeconfig MANAGEMENT_API_SERVER \
      -n PROJECT_NAMESPACE \
      edit virtualmachines.virtualmachine.gdc.goog VM_NAME
    

    Ganti variabel berikut:

    • MANAGEMENT_API_SERVER: file kubeconfig untuk server API pengelolaan.
    • PROJECT_NAMESPACE: namespace project tempat VM berada.
    • VM_NAME: nama VM.
  2. Cari kolom atau nilai yang tidak ada seperti yang ditunjukkan di kolom spec di Enable vTPM. Tanda tersebut diperlukan.

  3. Jika ada yang tidak ada atau salah, edit spec untuk menambahkan kolom yang tidak ada dan memperbaiki nilai yang salah.

  4. Simpan file.

  5. Ikuti langkah-langkah di bagian Memulai ulang VM.

Jika langkah-langkah sebelumnya tidak menyelesaikan masalah Anda, periksa dokumentasi yang sesuai dengan sistem operasi (OS) VM untuk memastikan bahwa versi OS mendukung vTPM.