Menggunakan batasan kebijakan Dasar Pengukuran Standar Keamanan Pod

Pengontrol Kebijakan dilengkapi library default template batasan yang dapat Anda gunakan dengan paket Dasar Pengukuran Standar Keamanan Pod. Paket ini memungkinkan Anda mendapatkan banyak perlindungan yang sama dengan kebijakan Dasar Pengukuran Standar Keamanan Pod Kubernetes (PSS), dengan kemampuan untuk menguji kebijakan Anda sebelum menerapkannya dan mengecualikan cakupan resource tertentu.

Batasan paket kebijakan Dasar Pengukuran Standar Keamanan Pod

Nama Batasan Deskripsi Batasan Nama Kontrol
pss-baseline-v2022-hostprocess Penggunaan Windows {i>HostProcess<i} HostProcess
pss-baseline-v2022-host-namespaces-hostnetwork Penggunaan jaringan host Namespace Host
pss-baseline-v2022-host-namespaces-host-pid-ipc Penggunaan namespace host
pss-baseline-v2022-privileged-containers Menjalankan container dengan hak istimewa Penampung Hak Istimewa
pss-baseline-v2022-capabilities Kemampuan Linux Kemampuan
pss-baseline-v2022-hostpath-volumes Penggunaan sistem file host Volume HostPath
pss-baseline-v2022-host-ports Penggunaan port host Port Host (dapat dikonfigurasi)
pss-baseline-v2022-apparmor Profil AppArmor yang digunakan oleh container AppArmor
pss-baseline-v2022-selinux Konteks container SELinux SELinux
pss-baseline-v2022-proc-mount-type Jenis Pemasangan Proc yang Diizinkan untuk container Jenis Pemasangan /proc
pss-baseline-v2022-seccomp Profil seccomp yang digunakan oleh container Seccomp
pss-baseline-v2022-sysctls Profil sysctl yang digunakan oleh container Sistem

Sebelum memulai

  1. Instal dan inisialisasi Google Cloud CLI, yang menyediakan perintah gcloud dan kubectl yang digunakan dalam petunjuk ini. Jika Anda menggunakan Cloud Shell, Google Cloud CLI sudah diinstal sebelumnya.
  2. Instal Pengontrol Kebijakan v.1.14.1 atau yang lebih baru di cluster Anda dengan library default template batasan.

Paket kebijakan Dasar Pengukuran Standar Keamanan Pod

Dengan Pengontrol Kebijakan, Anda dapat menerapkan kebijakan untuk cluster Kubernetes Anda. Untuk membantu menguji beban kerja Anda dan kepatuhannya terhadap praktik terbaik yang direkomendasikan Google yang diuraikan dalam tabel sebelumnya, Anda dapat men-deploy batasan ini dalam mode "audit" untuk mengungkap pelanggaran dan yang lebih penting, memberi Anda kesempatan untuk memperbaikinya sebelum menerapkannya ke cluster Kubernetes Anda.

Anda dapat menerapkan kebijakan ini dengan spec.enforcementAction yang ditetapkan ke dryrun menggunakan kubectl, kpt, atau Config Sync.

kubectl

  1. (Opsional) Lihat pratinjau batasan kebijakan dengan kubectl:

    kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
    
  2. Terapkan batasan kebijakan dengan kubectl:

    kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
    

    Output-nya adalah sebagai berikut:

    k8spspapparmor.constraints.gatekeeper.sh/pss-baseline-v2022-apparmor created
    k8spspcapabilities.constraints.gatekeeper.sh/pss-baseline-v2022-capabilities created
    k8spsphostfilesystem.constraints.gatekeeper.sh/pss-baseline-v2022-hostpath-volumes created
    k8spsphostnamespace.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-host-pid-ipc created
    k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-hostnetwork created
    k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-ports created
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/pss-baseline-v2022-privileged-containers created
    k8spspprocmount.constraints.gatekeeper.sh/pss-baseline-v2022-proc-mount-type created
    k8spspselinuxv2.constraints.gatekeeper.sh/pss-baseline-v2022-selinux created
    k8spspseccomp.constraints.gatekeeper.sh/pss-baseline-v2022-seccomp created
    k8spspforbiddensysctls.constraints.gatekeeper.sh/pss-baseline-v2022-sysctls created
    
  3. Pastikan batasan kebijakan telah diinstal dan periksa apakah ada pelanggaran di seluruh cluster:

    kubectl get -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
    

    Outputnya mirip dengan hal berikut ini:

    NAME                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspapparmor.constraints.gatekeeper.sh/pss-baseline-v2022-apparmor                        0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspcapabilities.constraints.gatekeeper.sh/pss-baseline-v2022-capabilities   dryrun               0
    
    NAME                                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostfilesystem.constraints.gatekeeper.sh/pss-baseline-v2022-hostpath-volumes                        0
    
    NAME                                                                                            ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnamespace.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-host-pid-ipc   dryrun               0
    
    NAME                                                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-hostnetwork   dryrun               0
    k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-ports                    dryrun               0
    
    NAME                                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/pss-baseline-v2022-privileged-containers   dryrun               0
    
    NAME                                                                           ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspprocmount.constraints.gatekeeper.sh/pss-baseline-v2022-proc-mount-type                        0
    
    NAME                                                                   ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspselinuxv2.constraints.gatekeeper.sh/pss-baseline-v2022-selinux                        0
    
    NAME                                                                 ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspseccomp.constraints.gatekeeper.sh/pss-baseline-v2022-seccomp   dryrun               0
    
    NAME                                                                          ENFORCEMENT-ACTION   TOTAL-VIOLATIONS
    k8spspforbiddensysctls.constraints.gatekeeper.sh/pss-baseline-v2022-sysctls   dryrun               0
    
  4. (Opsional) Sesuaikan batasan pss-baseline-v2022-host-ports guna menyertakan daftar port minimum yang dibatasi yang diketahui untuk lingkungan cluster Anda:

    parameters:
      # A minimum restricted known list can be implemented here.
      min: 0
      max: 0
    

kpt

  1. Penginstalan dan penyiapan kpt. kpt digunakan dalam petunjuk ini untuk menyesuaikan dan men-deploy resource Kubernetes.

  2. Download paket kebijakan Pod Security Standards (PSS) Baseline v2022 dari GitHub menggunakan kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
    
  3. Jalankan fungsi set-enforcement-action kpt untuk menetapkan tindakan penegakan kebijakan ke dryrun:

    kpt fn eval pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \
      -- enforcementAction=dryrun
    
  4. Lakukan inisialisasi direktori kerja dengan kpt, yang membuat resource untuk melacak perubahan:

    cd pss-baseline-v2022
    kpt live init
    
  5. (Opsional) Sesuaikan file batasan pss-baseline-v2022-host-ports agar menyertakan daftar port minimum yang diketahui dan dibatasi untuk lingkungan cluster Anda:

    parameters:
      # A minimum restricted known list can be implemented here.
      min: 0
      max: 0
    
  6. Terapkan batasan kebijakan dengan kpt:

    kpt live apply
    
  7. Pastikan batasan kebijakan telah diinstal dan periksa apakah ada pelanggaran di seluruh cluster:

    kpt live status --output table --poll-until current
    

    Status CURRENT mengonfirmasi penginstalan batasan yang berhasil.

Config Sync

  1. Penginstalan dan penyiapan 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 menggunakan petunjuk berikut:

  1. Ubah ke direktori sinkronisasi untuk Config Sync:

    cd SYNC_ROOT_DIR
    

    Untuk membuat atau menambahkan .gitignore dengan resourcegroup.yaml:

    echo resourcegroup.yaml >> .gitignore
    

  2. Buat direktori policies khusus:

    mkdir -p policies
    
  3. Download paket kebijakan Pod Security Standards (PSS) Baseline v2022 dari GitHub menggunakan kpt:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022 policies/pss-baseline-v2022
    
  4. Jalankan fungsi set-enforcement-action kpt untuk menetapkan tindakan penegakan kebijakan ke dryrun:

    kpt fn eval policies/pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  5. (Opsional) Sesuaikan file batasan pss-baseline-v2022-host-ports agar menyertakan daftar port minimum yang diketahui dan dibatasi untuk lingkungan cluster Anda:

    parameters:
      # A minimum restricted known list can be implemented here.
      min: 0
      max: 0
    
  6. (Opsional) Lihat pratinjau batasan kebijakan yang akan dibuat:

    kpt live init policies/pss-baseline-v2022
    kpt live apply --dry-run policies/pss-baseline-v2022
    

    Output-nya adalah sebagai berikut:

    Dry-run strategy: client
    inventory update started
    inventory update finished
    apply phase started
    k8spspapparmor.constraints.gatekeeper.sh/pss-baseline-v2022-apparmor apply successful
    k8spspcapabilities.constraints.gatekeeper.sh/pss-baseline-v2022-capabilities apply successful
    k8spsphostfilesystem.constraints.gatekeeper.sh/pss-baseline-v2022-hostpath-volumes apply successful
    k8spsphostnamespace.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-host-pid-ipc apply successful
    k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-namespaces-hostnetwork apply successful
    k8spsphostnetworkingports.constraints.gatekeeper.sh/pss-baseline-v2022-host-ports apply successful
    k8spspprivilegedcontainer.constraints.gatekeeper.sh/pss-baseline-v2022-privileged-containers apply successful
    k8spspprocmount.constraints.gatekeeper.sh/pss-baseline-v2022-proc-mount-type apply successful
    k8spspselinuxv2.constraints.gatekeeper.sh/pss-baseline-v2022-selinux apply successful
    k8spspseccomp.constraints.gatekeeper.sh/pss-baseline-v2022-seccomp apply successful
    apply phase finished
    inventory update started
    inventory update finished
    apply result: 10 attempted, 10 successful, 0 skipped, 0 failed
    
  7. Jika direktori sinkronisasi Anda untuk Config Sync menggunakan Kustomize, tambahkan policies/pss-baseline-v2022 ke kustomization.yaml root Anda. Jika tidak, hapus file policies/pss-baseline-v2022/kustomization.yaml:

    rm SYNC_ROOT_DIR/policies/pss-baseline-v2022/kustomization.yaml
    
  8. Kirim perubahan ke repo Config Sync:

    git add SYNC_ROOT_DIR/pss-baseline-v2022
    git commit -m 'Adding Pod Security Standards Baseline audit enforcement'
    git push
    
  9. 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=pss-baseline-v2022 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'

Jika ada pelanggaran, listingan pesan pelanggaran per batasan dapat dilihat dengan:

kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'

Mengubah tindakan penerapan paket kebijakan Dasar Pengukuran Standar Keamanan Pod

Setelah meninjau pelanggaran kebijakan di cluster, Anda dapat mempertimbangkan untuk mengubah mode penerapan sehingga Pengontrol Pendaftaran akan warn aktif atau bahkan deny memblokir resource yang tidak mematuhi kebijakan agar tidak diterapkan ke cluster.

kubectl

  1. Gunakan kubectl untuk menetapkan tindakan penerapan kebijakan ke warn:

    kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
    
  2. Pastikan tindakan penerapan batasan kebijakan telah diperbarui:

    kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022
    

kpt

  1. Jalankan fungsi set-enforcement-action kpt untuk menetapkan tindakan penegakan kebijakan ke warn:

    kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  2. Terapkan batasan kebijakan:

    kpt live apply
    

Config Sync

Operator yang menggunakan Config Sync untuk men-deploy kebijakan ke cluster mereka dapat menggunakan petunjuk berikut:

  1. Ubah ke direktori sinkronisasi untuk Config Sync:

    cd SYNC_ROOT_DIR
    
  2. Jalankan fungsi set-enforcement-action kpt untuk menetapkan tindakan penegakan kebijakan ke warn:

    kpt fn eval policies/pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. Kirim perubahan ke repo Config Sync:

    git add SYNC_ROOT_DIR/policies/pss-baseline-v2022
    git commit -m 'Adding Pod Security Standards Baseline policy bundle warn enforcement'
    git push
    
  4. Verifikasi status penginstalan:

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Repositori Anda yang muncul di kolom SYNCED mengonfirmasi penginstalan kebijakan.

Menguji penegakan 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
        hostPort: 80
        name: wordpress
EOF

Pengontrol penerimaan harus menghasilkan peringatan yang mencantumkan pelanggaran kebijakan yang dilanggar oleh resource ini, seperti ditunjukkan dalam contoh berikut:

Warning:  [pss-baseline-v2022-host-ports] The specified hostNetwork and hostPort are not allowed, pod: wp-non-compliant. Allowed values: {"max": 0, "min": 0}
pod/wp-non-compliant created

Menghapus paket kebijakan Dasar Pengukuran Standar Keamanan Pod

Jika diperlukan, paket kebijakan Dasar Pengukuran Standar Keamanan Pod dapat dihapus dari cluster.

kubectl

  • Gunakan kubectl untuk menghapus kebijakan:

    kubectl delete constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022
    

kpt

  • Hapus kebijakan:

    kpt live destroy
    

Config Sync

Operator yang menggunakan Config Sync untuk men-deploy kebijakan ke cluster mereka dapat menggunakan petunjuk berikut:

  1. Kirim perubahan ke repo Config Sync:

    git rm -r SYNC_ROOT_DIR/policies/pss-baseline-v2022
    git commit -m 'Removing Pod Security Standards Baseline policies'
    git push
    
  2. Verifikasi statusnya:

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Repositori Anda yang muncul di kolom SYNCED mengonfirmasi penghapusan kebijakan.