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.
- Untuk cluster Autopilot, daftar di saluran rilis yang versi defaultnya adalah 1.23 atau yang lebih baru.
- Untuk cluster Standar, daftar di saluran rilis atau upgrade cluster ke versi tertentu.
- 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.
- Terapkan kebijakan Restricted dalam mode
dry-run
ke namespace dan periksa apakah ada pelanggaran. - Jika Pod Anda melanggar kebijakan Restricted, terapkan kebijakan Baseline yang tidak terlalu ketat dalam mode
dry-run
ke namespace dan periksa apakah ada pelanggaran. - Jika Pod Anda melanggar kebijakan Baseline, ubah spesifikasi Pod untuk memperbaiki pelanggaran tersebut.
- 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
.
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.
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 perintahkubectl label
pada langkah sebelumnya. GantiVERSION
dengan nomor versi Kubernetes, sepertiv1.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 labelPodSecurity
secara otomatis ke semua namespace baru. Untuk mengetahui informasinya, lihat Meninjau proses pembuatan namespace
Langkah berikutnya
- Pelajari Standar Keamanan Pod lebih lanjut.
- Pelajari lebih lanjut pengontrol penerimaan
PodSecurity
. - Pelajari cara menerapkan kebijakan keamanan level Pod kustom menggunakan Gatekeeper.
- Baca tentang penghentian penggunaan PodSecurityPolicy.