Richtlinieneinschränkungen der grundlegenden Pod-Sicherheitsstandards verwenden

Policy Controller enthält eine Standardbibliothek mit Einschränkungsvorlagen, die Sie mit dem Pod Security Standards Baseline-Bundle verwenden können. Mit diesem Bundle können Sie viele der Schutzmaßnahmen umsetzen, die auch die Referenz der Kubernetes Pod-Sicherheitsstandards (PSS) erfordert. Sie haben dabei die Möglichkeit, Ihre Richtlinien vor der Erzwingung zu testen und die Anwendung auf bestimmte Ressourcen auszuschließen.

Einschränkungen des Richtlinien-Bundles für die Pod-Sicherheitsstandards

Name der Einschränkung Beschreibung der Einschränkung Einstellungsname
pss-baseline-v2022-hostprocess Nutzung von Windows HostProcess HostProcess
pss-baseline-v2022-host-namespaces-hostnetwork Verwendung von Hostnetzwerken Host-Namespaces
pss-baseline-v2022-host-namespaces-host-pid-ipc Verwendung von Host-Namespaces
pss-baseline-v2022-privileged-containers Privilegierte Container ausführen Privilegierte Container
pss-baseline-v2022-capabilities Linux-Funktionen Leistungsspektrum
pss-baseline-v2022-hostpath-volumes Verwendung des Hostdateisystems HostPath-Volumes
pss-baseline-v2022-host-ports Verwendung von Hostports Hostports (konfigurierbar)
pss-baseline-v2022-apparmor Das von Containern verwendete AppArmor-Profil AppArmor
pss-baseline-v2022-selinux Der SELinux-Kontext des Containers SELinux
pss-baseline-v2022-proc-mount-type Zulässige Proc-Bereitstellungstypen für den Container /proc-Befestigungstyp
pss-baseline-v2022-seccomp Das von Containern verwendete seccomp-Profil Seccomp
pss-baseline-v2022-sysctls Das von Containern verwendete sysctl-Profil Systeme

Hinweise

  1. Installieren und initialisieren Sie die Google Cloud CLI, die die in dieser Anleitung verwendeten Befehle gcloud und kubectl enthält. Wenn Sie Cloud Shell verwenden, ist Google Cloud CLI vorinstalliert.
  2. Installieren Sie Policy Controller Version 1.14.1 oder höher mit der Standardbibliothek der Einschränkungsvorlagen in Ihrem Cluster.

Richtlinien-Bundle zu Referenz für Audit-Pod-Sicherheitsstandards

Mit Policy Controller können Sie Richtlinien für Ihren Kubernetes-Cluster erzwingen. Damit Sie Ihre Arbeitslasten und deren Compliance in Bezug auf die in der vorherigen Tabelle beschriebenen, von Google empfohlenen Best Practices testen können, können Sie diese Einschränkungen im „Audit”-Modus bereitstellen. So können Sie Verstöße aufdecken und haben Gelegenheit, diese zu beheben, bevor Sie sie auf Ihrem Kubernetes-Cluster erzwingen.

Sie können diese Richtlinien anwenden, wobei spec.enforcementAction mit kubectl, kpt oder Config Sync auf dryrun gesetzt ist.

kubectl

  1. (Optional) Sehen Sie sich eine Vorschau der Richtlinieneinschränkungen mit kubectl an:

    kubectl kustomize https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
    
  2. Wenden Sie die Richtlinieneinschränkungen mit kubectl an:

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

    Die Ausgabe sieht so aus:

    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. Prüfen Sie, ob Richtlinieneinschränkungen installiert wurden, und prüfen Sie, ob im Cluster Verstöße vorliegen:

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

    Die Ausgabe sieht in etwa so aus:

    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. (Optional) Passen Sie die Einschränkung pss-baseline-v2022-host-ports so an, dass sie für Ihre Clusterumgebung eine mindestens eingeschränkte bekannte Liste von Ports enthält:

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

KPT

  1. Installieren und richten Sie kpt ein. kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.

  2. Laden Sie das Pod-Sicherheitsstandards (PSS) Baseline v2022 Richtlinien-Bundle von GitHub mit kpt herunter:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022
    
  3. Führen Sie die kpt-Funktion set-enforcement-action aus, um die Erzwingungsaktion der Richtlinien auf dryrun festzulegen:

    kpt fn eval pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \
      -- enforcementAction=dryrun
    
  4. Initialisieren Sie das Arbeitsverzeichnis mit kpt, wodurch eine Ressource erstellt wird, um Änderungen verfolgen zu können:

    cd pss-baseline-v2022
    kpt live init
    
  5. (Optional) Passen Sie die Einschränkungsdatei pss-baseline-v2022-host-ports so an, dass sie eine mindestens eingeschränkte bekannte Liste von Ports für Ihre Clusterumgebung enthält:

    parameters:
      # A minimum restricted known list can be implemented here.
      min: 0
      max: 0
    
  6. Wenden Sie die Richtlinieneinschränkungen mit kpt an:

    kpt live apply
    
  7. Prüfen Sie, ob Richtlinieneinschränkungen installiert wurden, und prüfen Sie, ob im Cluster Verstöße vorliegen:

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

    Der Status CURRENT bestätigt die erfolgreiche Installation der Einschränkungen.

Config Sync

  1. Installieren und richten Sie kpt ein. kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.

Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:

  1. Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:

    cd SYNC_ROOT_DIR
    

    So erstellen oder hängen Sie .gitignore mit resourcegroup.yaml an:

    echo resourcegroup.yaml >> .gitignore
    

  2. Erstellen Sie ein dediziertes policies-Verzeichnis:

    mkdir -p policies
    
  3. Laden Sie das Pod-Sicherheitsstandards (PSS) Baseline v2022 Richtlinien-Bundle von GitHub mit kpt herunter:

    kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/bundles/pss-baseline-v2022 policies/pss-baseline-v2022
    
  4. Führen Sie die kpt-Funktion set-enforcement-action aus, um die Erzwingungsaktion der Richtlinien auf dryrun festzulegen:

    kpt fn eval policies/pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
    
  5. (Optional) Passen Sie die Einschränkungsdatei pss-baseline-v2022-host-ports so an, dass sie eine mindestens eingeschränkte bekannte Liste von Ports für Ihre Clusterumgebung enthält:

    parameters:
      # A minimum restricted known list can be implemented here.
      min: 0
      max: 0
    
  6. (Optional) Sehen Sie sich eine Vorschau der Richtlinieneinschränkungen an, die erstellt werden sollen:

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

    Die Ausgabe sieht so aus:

    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. Wenn Ihr Synchronisierungsverzeichnis für Config Sync Kustomize verwendet, fügen Sie policies/pss-baseline-v2022 Ihrem Stammverzeichnis kustomization.yaml hinzu. Andernfalls entfernen Sie die Datei policies/pss-baseline-v2022/kustomization.yaml:

    rm SYNC_ROOT_DIR/policies/pss-baseline-v2022/kustomization.yaml
    
  8. Übertragen Sie Änderungen per Push in das Config Sync-Repository:

    git add SYNC_ROOT_DIR/pss-baseline-v2022
    git commit -m 'Adding Pod Security Standards Baseline audit enforcement'
    git push
    
  9. Prüfen Sie den Status der Installation:

    watch gcloud beta container fleet config-management status --project PROJECT_ID
    

    Der Status SYNCED bestätigt die Installation der Richtlinien.

Richtlinienverstöße ansehen

Nachdem die Richtlinieneinschränkungen im Prüfmodus installiert wurden, können Sie Verstöße im Cluster auf der Benutzeroberfläche über das Policy Controller-Dashboard anzeigen.

Sie können auch kubectl verwenden, um Verstöße im Cluster mit dem folgenden Befehl anzusehen:

kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'

Wenn Verstöße vorliegen, kann eine Liste der Verstoßmeldungen pro Einschränkung aufgerufen werden mit:

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

Erzwingungsaktion des Änderungs-Pod Security Standards Baseline-Richtlinien-Bundles

Nachdem Sie die Richtlinienverstöße in Ihrem Cluster geprüft haben, können Sie den Erzwingungsmodus ändern, sodass der Admission-Controller entweder den Status „warn“ aktiviert oder sogar deny verhindert, dass nicht konforme Ressourcen auf den Cluster angewendet werden.

kubectl

  1. Legen Sie mit kubectl die Erzwingungsaktion der Richtlinien auf warn fest:

    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. Prüfen Sie, ob die Erzwingungsaktion für Richtlinieneinschränkungen aktualisiert wurde:

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

KPT

  1. Führen Sie die kpt-Funktion set-enforcement-action aus, um die Erzwingungsaktion der Richtlinien auf warn festzulegen:

    kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  2. Wenden Sie die Richtlinieneinschränkungen an:

    kpt live apply
    

Config Sync

Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:

  1. Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:

    cd SYNC_ROOT_DIR
    
  2. Führen Sie die kpt-Funktion set-enforcement-action aus, um die Erzwingungsaktion der Richtlinien auf warn festzulegen:

    kpt fn eval policies/pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
    
  3. Übertragen Sie Änderungen per Push in das Config Sync-Repository:

    git add SYNC_ROOT_DIR/policies/pss-baseline-v2022
    git commit -m 'Adding Pod Security Standards Baseline policy bundle warn enforcement'
    git push
    
  4. Prüfen Sie den Status der Installation:

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Ihr Repository, das in der Spalte SYNCED angezeigt wird, bestätigt die Installation der Richtlinien.

Richtlinienerzwingung testen

Erstellen Sie mit dem folgenden Befehl eine nicht konforme Ressource im Cluster:

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

Der Admission-Controller sollte eine Warnung mit den Richtlinienverstößen ausgeben, gegen die diese Ressource verstößt, wie im folgenden Beispiel gezeigt:

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

Richtlinien-Bundle „Pod Security Standards Baseline“ entfernen

Bei Bedarf kann das Richtlinien-Bundle „Pod Security Standards Baseline“ aus dem Cluster entfernt werden.

kubectl

  • Verwenden Sie kubectl, um die Richtlinien zu entfernen:

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

KPT

  • Entfernen Sie die Richtlinien:

    kpt live destroy
    

Config Sync

Operatoren, die Config Sync zum Bereitstellen von Richtlinien für ihre Cluster verwenden, können die folgende Anleitung verwenden:

  1. Übertragen Sie Änderungen per Push in das Config Sync-Repository:

    git rm -r SYNC_ROOT_DIR/policies/pss-baseline-v2022
    git commit -m 'Removing Pod Security Standards Baseline policies'
    git push
    
  2. Prüfen Sie den Status:

    gcloud alpha anthos config sync repo list --project PROJECT_ID
    

    Das in der Spalte SYNCED angezeigte Repository bestätigt das Entfernen der Richtlinien.