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
- Installieren und initialisieren Sie die Google Cloud CLI, die die in dieser Anleitung verwendeten Befehle
gcloud
undkubectl
enthält. Wenn Sie Cloud Shell verwenden, ist Google Cloud CLI vorinstalliert. - 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
(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
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
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
(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
Installieren und richten Sie kpt ein. kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.
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
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufdryrun
festzulegen:kpt fn eval pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 \ -- enforcementAction=dryrun
Initialisieren Sie das Arbeitsverzeichnis mit kpt, wodurch eine Ressource erstellt wird, um Änderungen verfolgen zu können:
cd pss-baseline-v2022 kpt live init
(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
Wenden Sie die Richtlinieneinschränkungen mit kpt an:
kpt live apply
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
- 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:
Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:
cd SYNC_ROOT_DIR
So erstellen oder hängen Sie
.gitignore
mitresourcegroup.yaml
an:echo resourcegroup.yaml >> .gitignore
Erstellen Sie ein dediziertes
policies
-Verzeichnis:mkdir -p policies
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
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufdryrun
festzulegen:kpt fn eval policies/pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(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
(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
Wenn Ihr Synchronisierungsverzeichnis für Config Sync Kustomize verwendet, fügen Sie
policies/pss-baseline-v2022
Ihrem Stammverzeichniskustomization.yaml
hinzu. Andernfalls entfernen Sie die Dateipolicies/pss-baseline-v2022/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/pss-baseline-v2022/kustomization.yaml
Ü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
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
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"}]'
Prüfen Sie, ob die Erzwingungsaktion für Richtlinieneinschränkungen aktualisiert wurde:
kubectl get constraint -l policycontroller.gke.io/bundleName=pss-baseline-v2022
KPT
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufwarn
festzulegen:kpt fn eval -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
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:
Wechseln Sie in das Synchronisierungsverzeichnis für Config Sync:
cd SYNC_ROOT_DIR
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Erzwingungsaktion der Richtlinien aufwarn
festzulegen:kpt fn eval policies/pss-baseline-v2022 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=warn
Ü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
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:
Ü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
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.