Mengakses vTPM dan informasi pengesahan di Node Confidential GKE

Workload yang Anda jalankan di Confidential Google Kubernetes Engine Nodes dapat mengakses dan menggunakan fitur integritas dan keamanan platform seperti Virtual Trusted Platform Modules (vTPMs) dan laporan pengesahan Confidential Computing. Dokumen ini menunjukkan kepada Engineer Keamanan cara membuat vTPM dan perangkat berbasis hardware terlihat oleh workload GKE untuk melakukan tugas seperti pengesahan jarak jauh, penyegelan rahasia, dan pembuatan angka acak.

Anda harus sudah memahami resource berikut:

Teknologi Confidential Computing tertentu yang Anda gunakan bergantung pada model ancaman dan persyaratan keamanan organisasi Anda. Untuk mengetahui informasi selengkapnya, lihat Teknologi Confidential Computing.

Tugas Confidential Computing

Anda dapat mengakses vTPM dan modul hardware dari Pod yang berjalan di Confidential GKE Node. Anda dapat menggunakan modul ini untuk melakukan operasi kriptografi seperti penyegelan rahasia atau untuk pengesahan jarak jauh. Modul tertentu yang digunakan untuk tugas ini bergantung pada teknologi Confidential Computing yang digunakan oleh node, sebagai berikut:

  • Penyegelan rahasia: di semua teknologi Confidential Computing, workload dapat menggunakan Shielded VM vTPM sebagai root of trust untuk penyegelan rahasia.
  • Pengesahan jarak jauh: workload dapat menggunakan salah satu modul berikut untuk pengesahan jarak jauh:

    • AMD SEV: Shielded VM vTPM.
    • AMD SEV-SNP: AMD Secure Processor berbasis hardware.
    • Intel TDX: modul Intel TDX berbasis hardware.

    Untuk mengetahui informasi selengkapnya tentang cara kerja pengesahan jarak jauh di setiap teknologi Confidential Computing ini, lihat Arsitektur dan bukti pengesah.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Untuk menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. Versi gcloud CLI yang lebih lama mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Persyaratan

Anda dapat menggunakan Confidential GKE Node dengan kondisi berikut:

  • Cluster dan node pool harus menjalankan salah satu versi berikut, bergantung pada modul Confidential Computing yang ingin Anda akses:

    • vTPMs: versi GKE apa pun.
    • Perangkat berbasis hardware AMD SEV-SNP: GKE versi 1.33.5-gke.1350000 dan yang lebih baru atau versi 1.34.1-gke.2037000 dan yang lebih baru.
    • Perangkat berbasis hardware Intel TDX: GKE versi 1.33.5-gke.1697000 dan yang lebih baru atau versi 1.34.1-gke.2909000 dan yang lebih baru.
  • Node pool harus berada di lokasi Compute Engine yang memiliki jenis mesin yang sesuai. Untuk mengetahui informasi selengkapnya tentang ketersediaan regional, lihat Jenis mesin, CPU, dan zona.

  • Node harus menggunakan image node Container-Optimized OS.

Menginstal plugin perangkat

Untuk membuat informasi integritas dan keamanan terlihat oleh Pod GKE, Anda menginstal plugin perangkat. Untuk menggunakan DaemonSet guna menginstal plugin, ikuti langkah-langkah berikut:

  1. Buat koneksi ke cluster Anda:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda.
    • CONTROL_PLANE_LOCATION: region atau zona dari bidang kontrol cluster Anda, seperti us-central1 atau us-central1-a.
  2. Buat DaemonSet cc-device-plugin:

    kubectl create -f https://raw.githubusercontent.com/google/cc-device-plugin/main/manifests/cc-device-plugin.yaml
    

Setelah Anda membuat DaemonSet, semua perangkat Confidential Computing di Confidential GKE Node akan terlihat oleh Pod yang berjalan di node tersebut.

Mengakses perangkat Confidential Computing dari Pod

Setelah membuat DaemonSet untuk menginstal plugin perangkat, Anda dapat mengakses vTPM dan perangkat berbasis hardware dari Pod dengan cara yang sama seperti saat Anda meminta resource tambahan lainnya di Kubernetes. Bagian berikut menunjukkan cara mengakses vTPM dari Pod mana pun dan cara mengakses modul berbasis hardware di node AMD SEV-SNP dan Intel TDX.

Mengakses vTPM dari Pod

Untuk mengakses Shielded VM vTPM dari Pod mana pun yang berjalan di Confidential GKE Node, tambahkan perangkat google.com/cc ke batas resource container. Langkah-langkah berikut meminta akses ke vTPM di contoh Pod:

  1. Simpan manifes Pod berikut sebagai example-vtpm-pod.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
    name: my-vtpm-pod
    spec:
    containers:
    - name: test-vtpm
      image: ubuntu
      command: ["/bin/sh", "-c", "ls -l /dev/tpmrm0; sleep 3600"]
      ports:
      - containerPort: 8080
        name: http
      resources:
        limits:
          google.com/cc: 1
    
  2. Buat Pod:

    kubectl apply -f example-vtpm-pod.yaml
    

    Pod mendapatkan akses ke perangkat /dev/tpmrm0.

  3. Untuk memverifikasi bahwa Pod dapat mengakses vTPM, periksa log Pod:

    kubectl logs my-vtpm-pod
    

    Jika output berisi informasi file, Pod dapat mengakses perangkat.

Anda dapat berinteraksi dengan perangkat dari kode aplikasi. Misalnya, Anda dapat menggunakan library Go-TPM untuk berkomunikasi dengan vTPM dan melakukan tugas seperti penyegelan. Jika menggunakan AMD SEV, Anda juga dapat menggunakan vTPM untuk melakukan pengesahan jarak jauh instance Confidential VM.

Mengakses modul berbasis hardware dari Pod

Jika Anda menggunakan AMD SEV-SNP atau Intel TDX, Anda juga dapat mengakses modul berbasis hardware yang sesuai di Pod dengan menentukan pemilih yang sesuai dalam batas resource container. Anda harus menggunakan modul ini untuk melakukan pengesahan jarak jauh node yang menggunakan AMD SEV-SNP dan Intel TDX, karena vTPM bukan root of trust untuk pengukuran dalam teknologi ini.

Langkah-langkah berikut menunjukkan cara meminta akses ke AMD Secure Processor atau modul Intel TDX:

  1. Simpan salah satu contoh Pod berikut:

    • Meminta perangkat AMD SEV-SNP:

      apiVersion: v1
      kind: Pod
      metadata:
        name: snp-test-pod
      spec:
        containers:
        - name: test-container
          image: alpine
          command: ["/bin/sh", "-c"]
          args:
            - |
              echo "Checking for SEV-SNP device..."
              ls -l /dev/sev-guest
              echo "SNP container started successfully"
              sleep 3600
          resources:
            limits:
              amd.com/sev-snp: "1"
            requests:
              amd.com/sev-snp: "1"
        nodeSelector:
          cloud.google.com/gke-confidential-nodes-instance-type: SEV_SNP

    • Meminta perangkat Intel TDX:

      apiVersion: v1
      kind: Pod
      metadata:
        name: tdx-test-pod
      spec:
        containers:
        - name: test-container
          image: alpine
          command: ["/bin/sh", "-c"]
          args:
            - |
              echo "Checking for TDX device..."
              ls -l /dev/tdx*
              echo "TDX container started successfully"
              sleep 3600
          resources:
            limits:
              intel.com/tdx: "1"
            requests:
              intel.com/tdx: "1"
        nodeSelector:
          cloud.google.com/gke-confidential-nodes-instance-type: TDX

  2. Buat Pod:

    kubectl create -f PATH_TO_POD_MANIFEST
    

    Ganti PATH_TO_POD_MANIFEST dengan jalur ke file manifes Pod yang Anda simpan.

    Pod mendapatkan akses ke salah satu perangkat berikut:

    • /dev/sev-guest untuk AMD SEV-SNP.
    • /dev/tdx_guest untuk Intel TDX.
  3. Untuk memverifikasi bahwa Pod dapat mengakses perangkat, periksa log Pod:

    kubectl logs POD_NAME
    

    Ganti POD_NAME dengan nama contoh Pod yang Anda deploy pada langkah sebelumnya.

    Jika output berisi informasi file, Pod dapat mengakses perangkat.

Langkah berikutnya