Mengonfigurasi pemuatan modul kernel yang aman

Pemuatan modul kernel aman Google Kubernetes Engine (GKE) memungkinkan Anda menjalankan beban kerja yang memerlukan modul kernel out-of-tree (OOT) yang ditandatangani pada image Container-Optimized OS yang aman. Pemuatan modul kernel aman membantu meningkatkan postur keamanan cluster dan node pool Anda dengan memberi Anda lebih banyak kontrol atas pemuatan modul pada node CPU atau TPU dengan verifikasi tanda tangan.

Cara kerja pemuatan modul kernel aman

Secara default, node GKE menggunakan image Container-Optimized OS yang berbeda dengan konfigurasi keamanan yang berbeda, bergantung pada jenis node:

  • Node CPU dan TPU: menggunakan image Container-Optimized OS dengan Loadpin Linux Security Module (LSM) diaktifkan. Loadpin membatasi pemuatan modul kernel OOT. Setelan ini aman, tetapi mencegah pemuatan modul OOT.
  • Node GPU: menggunakan image Container-Optimized OS dengan Loadpin dinonaktifkan. Setelan ini memungkinkan pemuatan modul OOT, seperti penginstalan driver NVIDIA, tetapi kurang aman secara default.

Anda mengaktifkan pemuatan modul kernel aman dengan menggunakan setelan NodeKernelModuleLoading.Policy di LinuxNodeConfig untuk node pool atau dengan meneruskan flag --enable-kernel-module-signature-enforcement saat membuat atau mengupdate cluster atau node pool. Saat Anda menetapkan kebijakan ke ENFORCE_SIGNED_MODULES, di node pool CPU atau TPU, Loadpin diaktifkan tetapi dikonfigurasi untuk mengizinkan pemuatan modul kernel dari luar sistem file root. Modul harus ditandatangani dan sistem hanya mengizinkan modul yang ditandatangani Google.

Kapan harus menggunakan pemuatan modul kernel aman

Gunakan pemuatan modul kernel aman saat Anda perlu memuat modul kernel OOT yang ditandatangani Google, seperti driver kustom atau sistem file seperti Lustre, pada jenis node GKE apa pun. Fitur ini memungkinkan Anda menggunakan modul ini tanpa mengurangi postur keamanan node. Misalnya, Anda dapat memuat driver yang diperlukan pada node CPU tanpa perlu menggunakan jenis image GPU yang kurang ketat.

Persyaratan dan batasan

Saat Anda mengaktifkan pemuatan modul kernel aman di node pool, persyaratan dan batasan berikut berlaku:

  • Modul yang didukung: hanya modul OOT yang ditandatangani Google yang diizinkan.
  • cgroup v2: node pool harus menggunakan cgroup v2. Kubernetes Engine API menolak permintaan untuk mengaktifkan kebijakan ini di node pool yang menggunakan cgroup v1. Untuk mengetahui informasi selengkapnya, lihat dokumentasi cgroup Kubernetes.
  • Versi GKE: fitur ini tersedia di cluster GKE versi 1.34.1-gke.2364000 dan yang lebih baru.
  • Jenis image GPU: hanya image CPU dan TPU yang mendukung pemuatan modul kernel aman. GPU tidak didukung.

Sebelum memulai

Sebelum memulai, pastikan Anda telah melakukan tugas berikut:

  • Aktifkan Google Kubernetes Engine API.
  • Aktifkan Google Kubernetes Engine API
  • Jika ingin menggunakan Google Cloud CLI untuk tugas ini, instal lalu lakukan inisialisasi gcloud CLI. Jika sebelumnya Anda 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.

Mengonfigurasi kebijakan pemuatan modul kernel aman

Anda dapat mengonfigurasi kebijakan pemuatan modul kernel aman pada cluster individual atau sebagai setelan node pool. Kebijakan yang tersedia adalah:

  • ENFORCE_SIGNED_MODULES: mewajibkan modul kernel out-of-tree ditandatangani oleh Google. Kebijakan ini mengharuskan node pool menggunakan cgroup v2.
  • DO_NOT_ENFORCE_SIGNED_MODULES: memungkinkan modul kernel apa pun, yang ditandatangani atau tidak ditandatangani, untuk dimuat. Ini adalah perilaku default.

Jika Anda tidak menentukan kebijakan, GKE akan menggunakan perilaku default, yang tidak mewajibkan modul yang ditandatangani.

Mengaktifkan pemuatan modul kernel aman di cluster

Untuk mengaktifkan pemuatan modul kernel aman di cluster, selesaikan salah satu langkah berikut:

  • Untuk mengaktifkan di cluster baru, jalankan perintah berikut:

    Standar

    gcloud container clusters create CLUSTER_NAME \
       --location=LOCATION \
       --project=PROJECT_ID \
       --enable-kernel-module-signature-enforcement
    

    Autopilot

    gcloud container clusters create-auto CLUSTER_NAME \
       --location=LOCATION \
       --project=PROJECT_ID \
       --enable-kernel-module-signature-enforcement
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster baru.
    • LOCATION: region atau zona untuk cluster.
    • PROJECT_ID: project ID Anda.
  • Untuk mengaktifkan di cluster yang ada, jalankan perintah berikut:

    gcloud container clusters update CLUSTER_NAME \
         --location=LOCATION \
         --project=PROJECT_ID \
         --enable-kernel-module-signature-enforcement
    

    Ganti kode berikut:

    • CLUSTER_NAME: nama cluster Anda.
    • LOCATION: region atau zona untuk cluster.
    • PROJECT_ID: project ID Anda.

    Saat Anda mengupdate cluster yang ada, node akan dibuat ulang pada peluang berikutnya yang tersedia, kecuali jika dicegah oleh masa pemeliharaan.

Mengaktifkan pemuatan modul kernel aman di node pool

Untuk mengaktifkan pemuatan modul kernel aman di node pool, selesaikan salah satu langkah berikut:

  • Untuk mengaktifkan di node pool baru, jalankan perintah berikut:

    gcloud container node-pools create NODEPOOL_NAME \
         --cluster=CLUSTER_NAME \
         --location=LOCATION \
         --project=PROJECT_ID \
         --enable-kernel-module-signature-enforcement
    

    Ganti kode berikut:

    • NODEPOOL_NAME: nama node pool baru.
    • CLUSTER_NAME: nama cluster Anda.
    • LOCATION: region atau zona untuk cluster.
    • PROJECT_ID: project ID Anda.
  • Untuk mengaktifkan di node pool yang ada, jalankan perintah berikut:

    gcloud container node-pools update NODEPOOL_NAME \
         --cluster=CLUSTER_NAME \
         --location=LOCATION \
         --project=PROJECT_ID \
         --enable-kernel-module-signature-enforcement
    

    Ganti kode berikut:

    • NODEPOOL_NAME: nama node pool yang akan diupdate.
    • CLUSTER_NAME: nama cluster Anda.
    • LOCATION: region atau zona untuk cluster.
    • PROJECT_ID: project ID Anda.

Mengonfirmasi bahwa kebijakan modul kernel aman telah ditetapkan

Untuk mengonfirmasi bahwa kebijakan telah ditetapkan untuk cluster, jalankan perintah berikut:

gcloud container node-pools describe NODEPOOL_NAME \
    --cluster=CLUSTER_NAME \
    --location=LOCATION \
    --project=PROJECT_ID

Dalam output, periksa bagian linuxNodeConfig. Kolom kernelModuleLoading menampilkan kebijakan saat ini:

...
config:
  linuxNodeConfig:
    kernelModuleLoading:
      policy: ENFORCE_SIGNED_MODULES
    cgroupMode: CGROUP_MODE_V2

Menonaktifkan pemuatan modul kernel aman

Untuk menonaktifkan pemuatan modul kernel aman, selesaikan salah satu langkah berikut:

  • Untuk menonaktifkan di cluster, jalankan perintah berikut:

    gcloud container clusters update CLUSTER_NAME \
         --location=LOCATION \
         --project=PROJECT_ID \
         --no-enable-kernel-module-signature-enforcement
    
  • Untuk menonaktifkan di node pool yang ada, jalankan perintah berikut:

    gcloud container node-pools update NODEPOOL_NAME \
         --cluster=CLUSTER_NAME \
         --location=LOCATION \
         --project=PROJECT_ID \
         --no-enable-kernel-module-signature-enforcement
    

Langkah berikutnya