Pengontrol Kebijakan dilengkapi dengan library default yang berisi template batasan yang dapat digunakan dengan Paket Kebijakan Keamanan Pod untuk mencapai banyak perlindungan yang sama seperti Kebijakan Keamanan Pod (PSP) Kubernetes, dengan kemampuan tambahan untuk menguji kebijakan Anda sebelum menerapkannya dan mengecualikan cakupan resource tertentu.
Halaman ini ditujukan untuk admin IT dan Operator yang ingin memastikan bahwa semua resource yang berjalan dalam platform {i>cloud<i} memenuhi persyaratan persyaratan kepatuhan dengan menyediakan dan mempertahankan otomatisasi untuk terapkan. Untuk mempelajari lebih lanjut tentang peran umum dan contoh tugas yang kami rujuk di konten Google Cloud, lihat Peran dan tugas pengguna GKE Enterprise yang umum.
Paket ini mencakup batasan ini yang memberikan parameter yang dipetakan ke Kubernetes Pod Security Policy (PSP) berikut Nama Kolom (ID Kontrol):
Nama Batasan | Deskripsi Batasan | Kontrol ID |
---|---|---|
psp-v2022-psp-allow-privilege-escalation | Membatasi eskalasi ke hak istimewa root | allowPrivilegeEscalation |
psp-v2022-psp-apparmor | Profil AppArmor yang digunakan oleh container | anotasi |
psp-v2022-psp-capabilities | Kemampuan Linux | allowCaps, requiredDropCapacity, |
psp-v2022-flexvolume-drivers | Mengizinkan driver FlexVolume tertentu | allowedFlexVolumes |
psp-v2022-psp-forbidden-sysctls | Profil sysctl yang digunakan oleh container | forbiddenSysctls |
psp-v2022-psp-fsgroup | Mengalokasikan FSGroup yang memiliki volume pod | fsGroup |
psp-v2022-psp-host-filesystem | Penggunaan sistem file host | allowedHostPaths |
psp-v2022-psp-host-namespace | Penggunaan namespace host | hostPID, hostIPC |
psp-v2022-psp-host-network-ports | Penggunaan porta dan jaringan host | {i>hostNetwork<i}, {i>hostPorts<i} |
psp-v2022-psp-privileged-container | Menjalankan container dengan hak istimewa | hak istimewa |
psp-v2022-psp-proc-mount | Jenis Pemasangan Proc yang Diizinkan untuk penampung | allowedProcMountTypes |
psp-v2022-psp-readonlyrootfilesystem | Mewajibkan penggunaan sistem file {i>root<i} hanya-baca | readOnlyRootFilesystem |
psp-v2022-psp-seccomp | Profil seccomp yang digunakan oleh container | anotasi |
psp-v2022-psp-selinux-v2 | Konteks container SELinux | seLinux |
psp-v2022-psp-pods-allowed-user-ranges | ID pengguna dan grup penampung | runAsUser, runAsGroup, tambahanGroups, fsGroup |
psp-v2022-psp-volume-types | Penggunaan jenis volume | volume |
Sebelum memulai
- Instal dan inisialisasikan
Google Cloud CLI,
yang menyediakan perintah
gcloud
dankubectl
yang digunakan dalam petunjuk. Jika Anda menggunakan Cloud Shell, Google Cloud CLI sudah terinstal. - Menginstal Pengontrol Kebijakan di cluster Anda dengan library default template batasan.
Mengaudit paket kebijakan Keamanan Pod
Pengontrol Kebijakan dapat digunakan untuk menerapkan kebijakan untuk cluster Kubernetes. Untuk membantu menguji beban kerja dan kepatuhannya terhadap rekomendasi Google terbaik yang dijelaskan dalam tabel sebelumnya, Anda dapat men-deploy batasan tersebut di "audit" mode untuk mengungkapkan pelanggaran dan yang lebih penting lagi, memberi diri Anda kesempatan untuk memperbaikinya sebelum menerapkannya di cluster Kubernetes Anda.
Anda dapat menerapkan kebijakan ini dengan spec.enforcementAction
yang disetel ke dryrun
menggunakan kubectl,
kpt,
atau
Sinkronisasi Konfigurasi.
kubectl
(Opsional) Lihat pratinjau batasan kebijakan dengan kubectl:
kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/psp-v2022
Terapkan batasan kebijakan dengan kubectl:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/psp-v2022
Outputnya adalah sebagai berikut:
k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/psp-v2022-psp-allow-privilege-escalation created k8spspallowedusers.constraints.gatekeeper.sh/psp-v2022-psp-pods-allowed-user-ranges created k8spspapparmor.constraints.gatekeeper.sh/psp-v2022-psp-apparmor created k8spspcapabilities.constraints.gatekeeper.sh/psp-v2022-psp-capabilities created k8spspfsgroup.constraints.gatekeeper.sh/psp-v2022-psp-fsgroup created k8spspflexvolumes.constraints.gatekeeper.sh/psp-v2022-psp-flexvolume-drivers created k8spspforbiddensysctls.constraints.gatekeeper.sh/psp-v2022-psp-forbidden-sysctls created k8spsphostfilesystem.constraints.gatekeeper.sh/psp-v2022-psp-host-filesystem created k8spsphostnamespace.constraints.gatekeeper.sh/psp-v2022-psp-host-namespace created k8spsphostnetworkingports.constraints.gatekeeper.sh/psp-v2022-psp-host-network-ports created k8spspprivilegedcontainer.constraints.gatekeeper.sh/psp-v2022-psp-privileged-container created k8spspprocmount.constraints.gatekeeper.sh/psp-v2022-psp-proc-mount created k8spspreadonlyrootfilesystem.constraints.gatekeeper.sh/psp-v2022-psp-readonlyrootfilesystem created k8spspselinuxv2.constraints.gatekeeper.sh/psp-v2022-psp-selinux-v2 created k8spspseccomp.constraints.gatekeeper.sh/psp-v2022-psp-seccomp created k8spspvolumetypes.constraints.gatekeeper.sh/psp-v2022-psp-volume-types created
Pastikan batasan kebijakan telah diinstal dan periksa apakah terdapat pelanggaran di seluruh cluster:
kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/psp-v2022
Outputnya mirip dengan hal berikut ini:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/psp-v2022-psp-allow-privilege-escalation dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspallowedusers.constraints.gatekeeper.sh/psp-v2022-psp-pods-allowed-user-ranges dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspapparmor.constraints.gatekeeper.sh/psp-v2022-psp-apparmor 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspcapabilities.constraints.gatekeeper.sh/psp-v2022-psp-capabilities dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspfsgroup.constraints.gatekeeper.sh/psp-v2022-psp-fsgroup 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspflexvolumes.constraints.gatekeeper.sh/psp-v2022-psp-flexvolume-drivers 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspforbiddensysctls.constraints.gatekeeper.sh/psp-v2022-psp-forbidden-sysctls 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostfilesystem.constraints.gatekeeper.sh/psp-v2022-psp-host-filesystem 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnamespace.constraints.gatekeeper.sh/psp-v2022-psp-host-namespace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnetworkingports.constraints.gatekeeper.sh/psp-v2022-psp-host-network-ports dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprivilegedcontainer.constraints.gatekeeper.sh/psp-v2022-psp-privileged-container dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprocmount.constraints.gatekeeper.sh/psp-v2022-psp-proc-mount 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspreadonlyrootfilesystem.constraints.gatekeeper.sh/psp-v2022-psp-readonlyrootfilesystem 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspselinuxv2.constraints.gatekeeper.sh/psp-v2022-psp-selinux-v2 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspseccomp.constraints.gatekeeper.sh/psp-v2022-psp-seccomp dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspvolumetypes.constraints.gatekeeper.sh/psp-v2022-psp-volume-types 0
(Opsional) Sesuaikan Nama Kolom PSP
parameters
di file batasan seperti yang diperlukan untuk lingkungan cluster Anda. Untuk detail selengkapnya, periksa link untuk Nama Kolom PSP tertentu di tabel di atas. Misalnya dalampsp-host-network-ports
:parameters: hostNetwork: true min: 80 max: 9000
kpt
Instal dan siapkan kpt. kpt digunakan dalam petunjuk ini untuk menyesuaikan dan men-deploy resource Kubernetes.
Download paket kebijakan Pod Security Policy (PSP) v2022 dari GitHub menggunakan kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/psp-v2022
Menjalankan
set-enforcement-action
fungsi kpt untuk menetapkan kebijakan tindakan penegakan kebijakan terhadapdryrun
:kpt fn eval psp-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
Menginisialisasi direktori kerja dengan kpt, yang membuat resource untuk lacak perubahan:
cd psp-v2022 kpt live init
(Opsional) Sesuaikan Nama Kolom PSP
parameters
di file batasan seperti yang diperlukan untuk lingkungan cluster Anda. Untuk detail selengkapnya, periksa link untuk Nama Kolom PSP tertentu di tabel di atas. Misalnya dalampsp-host-network-ports
:parameters: hostNetwork: true min: 80 max: 9000
Terapkan batasan kebijakan dengan kpt:
kpt live apply
Pastikan batasan kebijakan telah diinstal dan periksa apakah terdapat pelanggaran di seluruh cluster:
kpt live status --output table --poll-until current
Status
CURRENT
mengonfirmasi keberhasilan penginstalan batasan data.
Config Sync
- Instal dan siapkan kpt. kpt digunakan dalam petunjuk ini untuk menyesuaikan dan men-deploy resource Kubernetes.
Operator yang menggunakan Config Sync untuk men-deploy kebijakan ke cluster mereka dapat digunakan petunjuk berikut:
Ubah ke direktori sinkronisasi untuk Config Sync:
cd SYNC_ROOT_DIR
Untuk membuat atau menambahkan
.gitignore
denganresourcegroup.yaml
:echo resourcegroup.yaml >> .gitignore
Buat direktori
policies
khusus:mkdir -p policies
Download paket kebijakan Pod Security Policy (PSP) v2022 dari GitHub menggunakan kpt:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/psp-v2022 policies/psp-v2022
Menjalankan
set-enforcement-action
fungsi kpt untuk menetapkan kebijakan tindakan penegakan kebijakan terhadapdryrun
:kpt fn eval policies/psp-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(Opsional) Sesuaikan Nama Kolom PSP
parameters
di file batasan seperti yang diperlukan untuk lingkungan cluster Anda. Untuk detail selengkapnya, periksa link untuk Nama Kolom PSP tertentu di tabel di atas. Misalnya dalampsp-host-network-ports
:parameters: hostNetwork: true min: 80 max: 9000
(Opsional) Lihat pratinjau batasan kebijakan yang akan dibuat:
kpt live init policies/psp-v2022 kpt live apply --dry-run policies/psp-v2022
Outputnya adalah sebagai berikut:
Dry-run strategy: client inventory update started inventory update finished apply phase started k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/psp-v2022-psp-allow-privilege-escalation apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spspallowedusers.constraints.gatekeeper.sh/psp-v2022-psp-pods-allowed-user-ranges apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spspapparmor.constraints.gatekeeper.sh/psp-v2022-psp-apparmor apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spspcapabilities.constraints.gatekeeper.sh/psp-v2022-psp-capabilities apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spspfsgroup.constraints.gatekeeper.sh/psp-v2022-psp-fsgroup apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spspflexvolumes.constraints.gatekeeper.sh/psp-v2022-psp-flexvolume-drivers apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spspforbiddensysctls.constraints.gatekeeper.sh/psp-v2022-psp-forbidden-sysctls apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spsphostfilesystem.constraints.gatekeeper.sh/psp-v2022-psp-host-filesystem apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spsphostnamespace.constraints.gatekeeper.sh/psp-v2022-psp-host-namespace apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spsphostnetworkingports.constraints.gatekeeper.sh/psp-v2022-psp-host-network-ports apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spspprivilegedcontainer.constraints.gatekeeper.sh/psp-v2022-psp-privileged-container apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spspprocmount.constraints.gatekeeper.sh/psp-v2022-psp-proc-mount apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spspreadonlyrootfilesystem.constraints.gatekeeper.sh/psp-v2022-psp-readonlyrootfilesystem apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spspselinuxv2.constraints.gatekeeper.sh/psp-v2022-psp-selinux-v2 apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spspseccomp.constraints.gatekeeper.sh/psp-v2022-psp-seccomp apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) k8spspvolumetypes.constraints.gatekeeper.sh/psp-v2022-psp-volume-types apply skipped: inventory policy prevented actuation (strategy: Apply, status: Empty, policy: MustMatch) apply phase finished inventory update started inventory update finished apply result: 16 attempted, 0 successful, 16 skipped, 0 failed
Jika direktori sinkronisasi untuk Config Sync menggunakan Kustomize, tambahkan
policies/psp-v2022
kekustomization.yaml
root Anda. Jika tidak, hapus filepolicies/psp-v2022/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/psp-v2022/kustomization.yaml
Mengirim perubahan ke repo Config Sync:
git add SYNC_ROOT_DIR/policies/psp-v2022 git commit -m 'Adding Pod Security Policy audit enforcement' git push
Verifikasi status penginstalan:
watch gcloud beta container fleet config-management status --project PROJECT_ID
Status
SYNCED
mengonfirmasi penginstalan kebijakan.
Lihat pelanggaran kebijakan
Setelah batasan kebijakan diinstal dalam mode audit, pelanggaran pada cluster dapat dilihat di UI menggunakan Dasbor Pengontrol Kebijakan.
Anda juga dapat menggunakan kubectl
untuk melihat pelanggaran di cluster menggunakan perintah berikut:
kubectl get constraint -l policycontroller.gke.io/bundleName=psp-v2022 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
Jika ditemukan pelanggaran, listingan pesan pelanggaran per batasan dapat dilihat dengan:
kubectl get constraint -l policycontroller.gke.io/bundleName=psp-v2022 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Mengubah tindakan penerapan paket kebijakan Kebijakan Keamanan Pod
Setelah meninjau pelanggaran kebijakan di cluster, Anda dapat mempertimbangkan
mengubah mode penerapan sehingga Pengontrol Penerimaan akan warn
aktif
atau bahkan deny
akan memblokir resource yang tidak mematuhi kebijakan agar tidak diterapkan ke cluster.
kubectl
Gunakan kubectl untuk menetapkan kebijakan' tindakan penegakan kebijakan untuk
warn
:kubectl get constraint -l policycontroller.gke.io/bundleName=psp-v2022 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
Pastikan tindakan penegakan batasan kebijakan telah diperbarui:
kubectl get constraint -l policycontroller.gke.io/bundleName=psp-v2022
kpt
Menjalankan
set-enforcement-action
fungsi kpt untuk menetapkan kebijakan tindakan penegakan kebijakan terhadapwarn
:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Terapkan batasan kebijakan:
kpt live apply
Config Sync
Operator yang menggunakan Config Sync untuk men-deploy kebijakan ke cluster mereka dapat digunakan petunjuk berikut:
Ubah ke direktori sinkronisasi untuk Config Sync:
cd SYNC_ROOT_DIR
Menjalankan
set-enforcement-action
fungsi kpt untuk menetapkan kebijakan tindakan penegakan kebijakan terhadapwarn
:kpt fn eval policies/psp-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Mengirim perubahan ke repo Config Sync:
git add SYNC_ROOT_DIR/policies/psp-v2022 git commit -m 'Adding Pod Security Policy policy bundle warn enforcement' git push
Verifikasi status penginstalan:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Repositori Anda yang muncul di kolom
SYNCED
mengonfirmasi penginstalan kebijakan tersebut.
Menguji penerapan kebijakan
Buat resource yang tidak mematuhi kebijakan di cluster menggunakan perintah berikut:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
namespace: default
name: wp-non-compliant
labels:
app: wordpress
spec:
containers:
- image: wordpress
name: wordpress
ports:
- containerPort: 80
name: wordpress
EOF
Pengontrol penerimaan harus memberikan peringatan yang mencantumkan kebijakan pelanggaran yang dilanggar oleh resource ini, seperti yang ditunjukkan dalam contoh berikut:
Warning: [psp-v2022-psp-pods-allowed-user-ranges] Container wordpress is attempting to run without a required securityContext/fsGroup. Allowed fsGroup: {"ranges": [{"max": 200, "min": 100}], "rule": "MustRunAs"} Warning: [psp-v2022-psp-pods-allowed-user-ranges] Container wordpress is attempting to run without a required securityContext/runAsGroup. Allowed runAsGroup: {"ranges": [{"max": 200, "min": 100}], "rule": "MustRunAs"} Warning: [psp-v2022-psp-pods-allowed-user-ranges] Container wordpress is attempting to run without a required securityContext/runAsUser Warning: [psp-v2022-psp-pods-allowed-user-ranges] Container wordpress is attempting to run without a required securityContext/supplementalGroups. Allowed supplementalGroups: {"ranges": [{"max": 200, "min": 100}], "rule": "MustRunAs"} Warning: [psp-v2022-psp-allow-privilege-escalation] Privilege escalation container is not allowed: wordpress Warning: [psp-v2022-psp-seccomp] Seccomp profile 'not configured' is not allowed for container 'wordpress'. Found at: no explicit profile found. Allowed profiles: {"RuntimeDefault", "docker/default", "runtime/default"} Warning: [psp-v2022-psp-capabilities] container <wordpress> is not dropping all required capabilities. Container must drop all of ["must_drop"] or "ALL" Warning: [psp-v2022-psp-readonlyrootfilesystem] only read-only root filesystem container is allowed: wordpress pod/wp-non-compliant created
Menghapus paket kebijakan Keamanan Pod
Jika diperlukan, paket kebijakan Keamanan Pod dapat dihapus dari .
kubectl
Gunakan kubectl untuk menghapus kebijakan:
kubectl delete constraint -l policycontroller.gke.io/bundleName=psp-v2022
kpt
Hapus kebijakan:
kpt live destroy
Config Sync
Operator yang menggunakan Config Sync untuk men-deploy kebijakan ke cluster mereka dapat digunakan petunjuk berikut:
Mengirim perubahan ke repo Config Sync:
git rm -r SYNC_ROOT_DIR/policies/psp-v2022 git commit -m 'Removing PSP policies' git push
Verifikasi statusnya:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Repositori Anda yang muncul di kolom
SYNCED
mengonfirmasi penghapusan kebijakan tersebut.