Mengonfigurasi pemuatan modul kernel yang aman

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

Cara kerja pemuatan modul kernel yang 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: gunakan image Container-Optimized OS dengan Linux Security Module (LSM) Loadpin yang diaktifkan. Loadpin membatasi pemuatan modul kernel OOT apa pun. 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 yang 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. Jika Anda menyetel kebijakan ke ENFORCE_SIGNED_MODULES, di kumpulan node CPU atau TPU, Loadpin akan 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 yang aman

Gunakan pemuatan modul kernel yang 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 di node CPU tanpa perlu menggunakan jenis image GPU yang kurang ketat.

Persyaratan dan batasan

Saat Anda mengaktifkan pemuatan modul kernel yang 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. Google Kubernetes Engine API menolak permintaan untuk mengaktifkan kebijakan ini di kumpulan node yang menggunakan cgroup v1. Untuk 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 yang 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 telah menginstal gcloud CLI, dapatkan versi terbaru dengan menjalankan perintah gcloud components update. gcloud CLI versi sebelumnya mungkin tidak mendukung menjalankan perintah dalam dokumen ini.

Mengonfigurasi kebijakan pemuatan modul kernel yang aman

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

  • ENFORCE_SIGNED_MODULES: memastikan bahwa setiap modul kernel di luar pohon ditandatangani oleh Google. Kebijakan ini mengharuskan node pool menggunakan cgroup v2.
  • DO_NOT_ENFORCE_SIGNED_MODULES: memungkinkan modul kernel apa pun, bertanda tangan atau tidak, dimuat. Ini adalah perilaku default.

Jika Anda tidak menentukan kebijakan, GKE akan menggunakan perilaku default, yang tidak menerapkan modul bertanda tangan.

Mengaktifkan pemuatan modul kernel yang aman di cluster

Untuk mengaktifkan pemuatan modul kernel yang 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 kesempatan berikutnya yang tersedia, kecuali jika dicegah oleh masa pemeliharaan.

Mengaktifkan pemuatan modul kernel yang aman di node pool

Untuk mengaktifkan pemuatan modul kernel yang 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 sudah 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.

Pastikan kebijakan modul kernel aman telah ditetapkan

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

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

Pada 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 yang aman

Untuk menonaktifkan pemuatan modul kernel yang 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 sudah 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