Bermigrasi dari PodSecurityPolicy ke pengontrol penerimaan PodSecurity


Halaman ini menunjukkan cara terus menerapkan banyak kontrol keamanan level Pod di cluster Google Kubernetes Engine (GKE) dengan bermigrasi dari PodSecurityPolicy ke pengontrol penerimaan PodSecurity.

Ringkasan

PodSecurityPolicy adalah pengontrol penerimaan Kubernetes yang memungkinkan Anda menerapkan kontrol keamanan level Pod seperti Standar Keamanan Pod Kubernetes, yang memberikan kontrol terperinci atas konfigurasi keamanan dari worload yang di-deploy. Project Kubernetes menghentikan penggunaan PodSecurityPolicy dan menghapus fitur sepenuhnya di Kubernetes v1.25.

Jika saat ini Anda menggunakan PodSecurityPolicy di cluster GKE, nonaktifkan fitur tersebut sebelum mengupgrade ke GKE versi 1.25 dan yang lebih baru.

Untuk mempelajari lebih lanjut penghentian penggunaan dan penghapusan PodSecurityPolicy, lihat penghentian penggunaan PodSecurityPolicy.

PodSecurity dan PodSecurityPolicy

Pengontrol penerimaan PodSecurity tersedia dan diaktifkan secara default di cluster yang menjalankan versi GKE berikut:

  • Versi 1.25 atau yang lebih baru: Stabil
  • Versi 1.23 dan versi 1.24: Beta

PodSecurity memungkinkan Anda menerapkan kebijakan yang ditentukan dalam Standar Keamanan Pod pada workload yang di-deploy. PodSecurity memungkinkan Anda untuk terus menerapkan konfigurasi keamanan level Pod yang direkomendasikan di cluster setelah bermigrasi dari PodSecurityPolicy. Tidak seperti PodSecurityPolicy, PodSecurity tidak mendukung konfigurasi kustom.

Persyaratan dan batasan

  • PodSecurity tersedia dalam versi beta di GKE versi 1.23 dan 1.24, serta dalam versi stabil di GKE versi 1.25 dan yang lebih baru.
  • PodSecurity tidak menghentikan Pod yang sudah berjalan di node Anda, meskipun melanggar kebijakan yang berlaku.
  • PodSecurity tidak mengubah kolom. Jika Anda menggunakan kolom yang berubah pada PodSecurityPolicy, ubah spesifikasi Pod untuk memastikan kolom tersebut ada saat Anda men-deploy workload.

Sebelum memulai

Sebelum memulai, pastikan Anda telah menjalankan 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 gcloud components update.
  • Pastikan Anda memiliki cluster GKE Autopilot atau Standard yang menjalankan versi 1.23 atau yang lebih baru.
  • Periksa resource PodSecurityPolicy Anda untuk mengubah konfigurasi kolom. Tambahkan kolom tersebut ke manifes Pod sehingga workload yang sudah berjalan di node Anda sesuai dengan kebijakan yang ditentukan dalam Standar Keamanan Pod. Untuk mengetahui petunjuknya, lihat Menyederhanakan dan menstandarkan Kebijakan Keamanan Pod.

Mengonfigurasi pengontrol penerimaan PodSecurity di cluster Anda

Pengontrol penerimaan PodSecurity menerapkan Standar Keamanan Pod pada tingkat namespace. Anda harus mengonfigurasi pengontrol untuk menerapkan salah satu kebijakan yang ditentukan oleh Standar Keamanan Pod di setiap namespace. Tersedia kebijakan-kebijakan berikut:

  • Restricted: Kebijakan yang paling ketat. Mematuhi praktik terbaik hardening Pod.
  • Baseline: Kebijakan yang membatasi secara minimal yang mencegah eskalasi akses yang diketahui. Mengizinkan semua nilai default untuk kolom dalam spesifikasi Pod.
  • Privileged: Kebijakan tidak dibatasi yang mengizinkan apa pun, termasuk eskalasi akses yang diketahui. Terapkan kebijakan ini dengan hati-hati.

Untuk memigrasikan konfigurasi PodSecurityPolicy ke pengontrol penerimaan PodSecurity, lakukan hal berikut di setiap namespace dalam cluster Anda. Langkah-langkah ini dijelaskan secara mendetail di bagian berikut.

  1. Terapkan kebijakan Restricted dalam mode dry-run ke namespace dan periksa apakah ada pelanggaran.
  2. Jika Pod Anda melanggar kebijakan Restricted, terapkan kebijakan Baseline yang tidak terlalu ketat dalam mode dry-run ke namespace dan periksa apakah ada pelanggaran.
  3. Jika Pod Anda melanggar kebijakan Baseline, ubah spesifikasi Pod untuk memperbaiki pelanggaran tersebut.
  4. Jika kebijakan Baseline tidak lagi menampilkan pelanggaran, terapkan kebijakan dalam mode enforce ke namespace.

Untuk menghindari potensi periode nonaktif jika PodSecurity menolak Pod baru, lakukan langkah-langkah berikut di lingkungan staging. Atau, Anda dapat menerapkan kebijakan yang teridentifikasi dalam mode audit, bukan mode enforce, dan meninjau log audit Anda untuk menemukan potensi Pod yang ditolak.

Mode audit tidak menerapkan kebijakan. GKE men-deploy Pod dan menambahkan entri ke log audit GKE.

Mencantumkan semua namespace di cluster Anda

Mendapatkan daftar semua namespace di cluster Anda. Ulangi langkah-langkah di bagian berikut untuk setiap namespace dalam daftar:

kubectl get ns

Pada versi GKE berikut, GKE mengabaikan kebijakan yang Anda terapkan ke namespace kube-system:

  • 1.23.6-gke.1900 dan yang lebih baru
  • 1.24.0-gke.1200 dan yang lebih baru

Pada versi GKE sebelumnya, hindari penerapan kebijakan di kube-system.

Menerapkan setiap kebijakan Standar Keamanan Pod dalam mode uji coba

Pada langkah-langkah berikut, Anda akan menerapkan setiap kebijakan dalam mode dry-run, dimulai dengan kebijakan Restricted yang paling ketat. Jika output menampilkan peringatan, ubah spesifikasi Pod yang melanggar agar mematuhi kebijakan, atau coba kebijakan Baseline yang tidak terlalu ketat. Jika output tidak menampilkan peringatan, Anda dapat menerapkan kebijakan Baseline tanpa mode dry-run.

  1. Terapkan kebijakan Restricted dalam mode dry-run:

    kubectl label --dry-run=server --overwrite ns NAMESPACE \
        pod-security.kubernetes.io/enforce=restricted
    

    Jika Pod dalam namespace melanggar kebijakan Restricted, output-nya akan mirip dengan berikut ini:

    Warning: existing pods in namespace "NAMESPACE" violate the new PodSecurity enforce level "restricted:latest"
    namespace/NAMESPACE labeled
    

    Jika kebijakan Restricted menampilkan peringatan, ubah Pod untuk memperbaiki pelanggaran dan coba lagi perintah tersebut. Atau, coba kebijakan Baseline yang tidak terlalu ketat pada langkah berikut.

  2. Terapkan kebijakan Baseline dalam mode dry-run:

    kubectl label --dry-run=server --overwrite ns NAMESPACE \
        pod-security.kubernetes.io/enforce=baseline
    

    Jika Pod dalam namespace melanggar kebijakan Baseline, output-nya akan mirip dengan berikut ini:

    Warning: existing pods in namespace "NAMESPACE" violate the new PodSecurity enforce level "baseline:latest"
    namespace/NAMESPACE labeled
    

Jika Pod Anda melanggar kebijakan Baseline, ubah Pod untuk memperbaiki pelanggaran dan ulangi langkah ini sampai GKE tidak lagi menampilkan peringatan.

Menerapkan kebijakan pada namespace

Saat Anda mengidentifikasi kebijakan yang berfungsi untuk namespace, terapkan kebijakan ke namespace dalam mode enforce:

kubectl label --overwrite ns NAMESPACE \
    pod-security.kubernetes.io/enforce=POLICY

Ganti POLICY dengan nama kebijakan, yang dapat berupa salah satu dari restricted, baseline, atau privileged.

Pastikan Anda mengulangi langkah-langkah sebelumnya untuk setiap namespace di cluster Anda.

Menonaktifkan fitur PodSecurityPolicy di cluster

Setelah mengonfigurasi pengontrol penerimaan PodSecurity untuk setiap namespace dalam cluster, nonaktifkan fitur PodSecurityPolicy:

gcloud beta container clusters update CLUSTER_NAME \
    --no-enable-pod-security-policy

Ganti CLUSTER_NAME dengan nama cluster GKE Anda.

Saat Anda mengupgrade cluster ke GKE versi 1.25, GKE secara otomatis menghapus semua objek PodSecurityPolicy yang tersisa, termasuk yang ditambahkan oleh GKE, Pengontrol Kebijakan, dan objek PodSecurityPolicy apa pun yang Anda tentukan sebelumnya.

Rekomendasi

  • Cobalah untuk mematuhi kebijakan Restricted jika memungkinkan. Lakukan audit pada aplikasi Anda untuk melihat apakah konfigurasinya dapat diperkuat lebih lanjut.
  • Anda dapat mengunci mode keamanan Pod ke versi minor Kubernetes tertentu dengan menambahkan label pod-security.kubernetes.io/MODE-version: VERSION ke perintah kubectl label pada langkah sebelumnya. Ganti VERSION dengan nomor versi Kubernetes, seperti v1.24.
  • Setelah Anda menonaktifkan fitur PodSecurityPolicy, tinjau aplikasi yang sedang berjalan untuk memeriksa gangguan atau celah dalam konfigurasi keamanan.
  • Setelah mengonfigurasi PodSecurity, perbarui proses pembuatan namespace Anda untuk menerapkan label PodSecurity secara otomatis ke semua namespace baru. Untuk mengetahui informasinya, lihat Meninjau proses pembuatan namespace

Langkah berikutnya