Policy Controller enthält eine Standardbibliothek mit Einschränkungsvorlagen, die mit dem Richtlinien-Bundle des National Security Agency (NSA) Cybersecurity and Infrastructure Security Agency (CISA) Kubernetes Hardening Guide v1.2 verwendet werden können, um die Compliance Ihrer Clusterressourcen anhand einiger Aspekte des NSA CISA Kubernetes Hardening Guide v1.2 zu bewerten.
Auf dieser Seite finden Sie eine Anleitung zum manuellen Anwenden eines Richtlinienpakets. Alternativ können Sie Richtlinienbundle direkt anwenden.
Diese Seite richtet sich an IT-Administratoren und ‑Betreiber, die dafür sorgen möchten, dass alle auf der Cloud-Plattform ausgeführten Ressourcen die Compliance-Anforderungen des Unternehmens erfüllen, indem sie Automatisierungsfunktionen zur Prüfung oder Durchsetzung bereitstellen und aufrechterhalten. Weitere Informationen zu gängigen Rollen und Beispielaufgaben, auf die wir in Google Cloud-Inhalten verweisen, finden Sie unter Häufig verwendete GKE Enterprise-Nutzerrollen und -Aufgaben.
Einschränkungen des Richtlinien-Bundle des NSA CISA Kubernetes Hardening v1.2
Name der Einschränkung | Beschreibung der Einschränkung |
---|---|
nsa-cisa-k8s-v1.2-apparmor | Schränkt das Profil „AppArmor“ für Pods ein. |
nsa-cisa-k8s-v1.2-automount-serviceaccount-token-pod | Schränkt die Verwendung von „automountServiceAccountToken“ durch Pods ein. |
nsa-cisa-k8s-v1.2-block-all-ingress | Schränkt das Erstellen von „Ingress“-Objekten ein. |
nsa-cisa-k8s-v1.2-block-secrets-of-type-basic-auth | Schränkt die Verwendung von Secrets vom Typ „kubernetes.io/basic-auth“ ein. |
nsa-cisa-k8s-v1.2-capabilities | Container müssen alle Funktionen löschen und dürfen keine neuen Funktionen hinzufügen. |
nsa-cisa-k8s-v1.2-cpu-and-memory-limits-required | Für alle Arbeitslast-Pods müssen CPU- und Arbeitsspeicherlimits angegeben werden. |
nsa-cisa-k8s-v1.2-host-namespaces | Schränkt Container ein, bei denen „HostPID“ oder „hostIPC“ auf „true“ festgelegt ist. |
nsa-cisa-k8s-v1.2-host-namespaces-hostnetwork | Die Freigabe der Host-Namespaces muss nicht zulässig sein. |
nsa-cisa-k8s-v1.2-host-network | Schränkt die Ausführung von Containern ein, bei denen das „hostNetwork“-Flag auf „true“ festgelegt ist. |
nsa-cisa-k8s-v1.2-hostport | Schränkt die Ausführung von Containern ein, bei denen „hostPort“ konfiguriert ist. |
nsa-cisa-k8s-v1.2-privilege-escalation | Schränkt Container ein, bei denen „allowPrivilegeEscalation“ auf „true“ festgelegt ist. |
nsa-cisa-k8s-v1.2-privileged-containers | Schränkt Containerbei denen „securityContext.privileged“ auf „true“ festgelegt ist, ein. |
nsa-cisa-k8s-v1.2-readonlyrootfilesystem | Erfordert die Verwendung eines schreibgeschützten Root-Dateisystems durch Pod-Container. |
nsa-cisa-k8s-v1.2-require-namespace-network-policies | Erfordert, dass jeder im Cluster definierte Namespace eine NetworkPolicy hat. |
nsa-cisa-k8s-v1.2-restrict-clusteradmin-rolebindings | Schränkt die Verwendung der Rolle „cluster-admin“ ein. |
nsa-cisa-k8s-v1.2-restrict-edit-rolebindings | Schränkt die Verwendung der Rolle „edit“ ein. |
nsa-cisa-k8s-v1.2-restrict-hostpath-volumes | Schränkt die Verwendung von „HostPath“-Volumes ein. |
nsa-cisa-k8s-v1.2-restrict-pods-exec | Schränkt die Verwendung von „pods/exec“ in „Roles“ und „ClusterRoles“ ein. |
nsa-cisa-k8s-v1.2-running-as-non-root | Verhindert, dass Container als Root-Nutzer ausgeführt werden. |
nsa-cisa-k8s-v1.2-seccomp | Das Seccomp-Profil darf nicht explizit auf „Unconfined“ festgelegt sein. |
nsa-cisa-k8s-v1.2-selinux | Der SELinux-Typ oder die benutzerdefinierte SELinux-Nutzer- oder -Rollenoption kann nicht festgelegt werden. |
Vorbereitung
- 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 die Google Cloud CLI vorinstalliert. - Installieren Sie den Policy Controller in Ihrem Cluster mit der Standardbibliothek an Einschränkungsvorlagen. Sie müssen auch die Unterstützung für referenzielle Einschränkungen aktivieren, da dieses Bundle referenzielle Einschränkungen enthält.
Policy Controller für referenzielle Einschränkungen konfigurieren
Speichern Sie das folgende YAML-Manifest in einer Datei als
policycontroller-config.yaml
. Das Manifest konfiguriert Policy Controller so, dass bestimmte Arten von Objekten beobachtet werden.apiVersion: config.gatekeeper.sh/v1alpha1 kind: Config metadata: name: config namespace: "gatekeeper-system" spec: sync: syncOnly: - group: "networking.k8s.io" version: "v1" kind: "NetworkPolicy"
Wenden Sie das
policycontroller-config.yaml
-Manifest an:kubectl apply -f policycontroller-config.yaml
Richtlinien-Bundle des NSA CISA Kubernetes Hardening v1.2 prüfen
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 Richtlinien von NSA CISA Kubernetes Hardening Guide v1.2 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 optional erzwingen.
Sie können diese Richtlinien mit kpt oder Config Sync festlegen, wobei spec.enforcementAction
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/anthos-bundles/nsa-cisa-k8s-v1.2
Wenden Sie die Richtlinieneinschränkungen mit kubectl an:
kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nsa-cisa-k8s-v1.2
Die Ausgabe sieht so aus:
k8sblockallingress.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-block-all-ingress created k8sblockobjectsoftype.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-block-secrets-of-type-basic-auth created k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-privilege-escalation created k8spspallowedusers.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-running-as-non-root created k8spspapparmor.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-apparmor created k8spspautomountserviceaccounttokenpod.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-automount-serviceaccount-token-pod created k8spspcapabilities.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-capabilities created k8spsphostfilesystem.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-restrict-hostpath-volumes created k8spsphostnamespace.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-host-namespaces created k8spsphostnetworkingports.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-host-network created k8spsphostnetworkingports.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-hostport created k8spspprivilegedcontainer.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-privileged-containers created k8spspreadonlyrootfilesystem.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-readonlyrootfilesystem created k8spspselinuxv2.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-selinux created k8spspseccomp.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-seccomp created k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-require-namespace-network-policies created k8srequiredresources.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-cpu-and-memory-limits-required created k8srestrictrolebindings.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-restrict-clusteradmin-rolebindings created k8srestrictrolebindings.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-restrict-edit-rolebindings created k8srestrictrolerules.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-restrict-pods-exec created
Prüfen Sie, ob Richtlinieneinschränkungen installiert wurden, und prüfen Sie, ob im Cluster Verstöße vorliegen:
kubectl get constraints -l policycontroller.gke.io/bundleName=nsa-cisa-k8s-v1.2
Die Ausgabe sieht in etwa so aus:
NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockallingress.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-block-all-ingress dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockobjectsoftype.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-block-secrets-of-type-basic-auth dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspallowedusers.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-running-as-non-root dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspallowprivilegeescalationcontainer.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-privilege-escalation dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspapparmor.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-apparmor dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspautomountserviceaccounttokenpod.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-automount-serviceaccount-token-pod dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspcapabilities.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-capabilities dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostfilesystem.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-restrict-hostpath-volumes dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnamespace.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-host-namespaces dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnetworkingports.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-host-network dryrun 0 k8spsphostnetworkingports.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-hostport dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprivilegedcontainer.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-privileged-containers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspreadonlyrootfilesystem.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-readonlyrootfilesystem dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspseccomp.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-seccomp dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspselinuxv2.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-selinux dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequiredresources.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-cpu-and-memory-limits-required dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-require-namespace-network-policies dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolebindings.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-restrict-clusteradmin-rolebindings dryrun 0 k8srestrictrolebindings.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-restrict-edit-rolebindings dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolerules.constraints.gatekeeper.sh/nsa-cisa-k8s-v1.2-restrict-pods-exec dryrun 0
KPT
Installieren und richten Sie kpt ein.
kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen.
Laden Sie das Richtlinien-Bundle des NSA CISA Kubernetes Hardening Guide v1.2 mit kpt von GitHub herunter:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nsa-cisa-k8s-v1.2
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Maßnahme der Richtlinien aufdryrun
festzulegen:kpt fn eval nsa-cisa-k8s-v1.2 -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 nsa-cisa-k8s-v1.2 kpt live init
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 Sie
resourcegroup.yaml
oder hängen es an.gitignore
an:echo resourcegroup.yaml >> .gitignore
Erstellen Sie ein dediziertes
policies
-Verzeichnis:mkdir -p policies
Laden Sie das Richtlinien-Bundle des NSA CISA Kubernetes Hardening Guide v1.2 mit kpt von GitHub herunter:
kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/nsa-cisa-k8s-v1.2 policies/nsa-cisa-k8s-v1.2
Führen Sie die kpt-Funktion
set-enforcement-action
aus, um die Maßnahme der Richtlinien aufdryrun
festzulegen:kpt fn eval policies/nsa-cisa-k8s-v1.2 -i gcr.io/kpt-fn/set-enforcement-action:v0.1 -- enforcementAction=dryrun
(Optional) Sehen Sie sich eine Vorschau der Richtlinieneinschränkungen an, die erstellt werden sollen:
kpt live init policies/nsa-cisa-k8s-v1.2 kpt live apply --dry-run policies/nsa-cisa-k8s-v1.2
Wenn Ihr Synchronisierungsverzeichnis für Config Sync Kustomize verwendet, fügen Sie
policies/nsa-cisa-k8s-v1.2
Ihrer Stamm-kustomization.yaml
hinzu. Andernfalls entfernen Sie die Dateipolicies/nsa-cisa-k8s-v1.2/kustomization.yaml
:rm SYNC_ROOT_DIR/policies/nsa-cisa-k8s-v1.2/kustomization.yaml
Übertragen Sie Änderungen per Push in das Config Sync-Repository:
git add SYNC_ROOT_DIR/policies/nsa-cisa-k8s-v1.2 git commit -m 'Adding NSA CISA Kubernetes Hardening v1.2 policy 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
Sobald die Richtlinieneinschränkungen im Prüfmodus installiert sind, können Verstöße im Cluster in der UI über das Policy Controller-Dashboard angezeigt werden.
Mit kubectl
können Sie auch Verstöße im Cluster mit dem folgenden Befehl aufrufen:
kubectl get constraint -l policycontroller.gke.io/bundleName=nsa-cisa-k8s-v1.2 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
Wenn Verstöße vorhanden sind, kann eine Liste der Nachrichten zu Verstößen pro Einschränkung angezeigt werden mit:
kubectl get constraint -l policycontroller.gke.io/bundleName=nsa-cisa-k8s-v1.2 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Maßnahme des Richtlinien-Bundle des NSA CISA Kubernetes Hardening v1.2 ändern
Nachdem Sie die Richtlinienverstöße in Ihrem Cluster überprüft haben, können Sie den Erzwingungsmodus ändern, sodass für den Admission-Controller entweder der Modus warn
aktiviert wird oder auch deny
verhindert, dass nicht konforme Ressourcen auf den Cluster angewendet werden.
kubectl
Verwenden Sie kubectl, um die Maßnahme der Richtlinien auf
warn
festzulegen:kubectl get constraints -l policycontroller.gke.io/bundleName=nsa-cisa-k8s-v1.2 -o name | xargs -I {} kubectl patch {} --type='json' -p='[{"op":"replace","path":"/spec/enforcementAction","value":"warn"}]'
Prüfen Sie, ob die Maßnahme für Richtlinieneinschränkungen aktualisiert wurde:
kubectl get constraints -l policycontroller.gke.io/bundleName=nsa-cisa-k8s-v1.2
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/nsa-cisa-k8s-v1.2 -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/nsa-cisa-k8s-v1.2 git commit -m 'Adding NSA CISA Kubernetes Hardening v1.2 policy 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
name: wordpress
EOF
Der Admission-Controller sollte eine Warnung ausgeben, in der die Richtlinienverstöße aufgeführt sind, gegen die diese Ressource verstößt, wie im folgenden Beispiel gezeigt:
Warning: [nsa-cisa-k8s-v1.2-automount-serviceaccount-token-pod] Automounting service account token is disallowed, pod: wp-non-compliant Warning: [nsa-cisa-k8s-v1.2-running-as-non-root] Container wordpress is attempting to run without a required securityContext/runAsGroup. Allowed runAsGroup: {"ranges": [{"max": 65536, "min": 1000}], "rule": "MustRunAs"} Warning: [nsa-cisa-k8s-v1.2-running-as-non-root] Container wordpress is attempting to run without a required securityContext/runAsUser Warning: [nsa-cisa-k8s-v1.2-privilege-escalation] Privilege escalation container is not allowed: wordpress Warning: [nsa-cisa-k8s-v1.2-cpu-and-memory-limits-required] container <wordpress> does not have <{"cpu", "memory"}> limits defined Warning: [nsa-cisa-k8s-v1.2-capabilities] container <wordpress> is not dropping all required capabilities. Container must drop all of ["ALL"] or "ALL" Warning: [nsa-cisa-k8s-v1.2-readonlyrootfilesystem] only read-only root filesystem container is allowed: wordpress pod/wp-non-compliant created
Richtlinien-Bundle des NSA CISA Kubernetes Hardening v1.2 entfernen
Bei Bedarf kann das Richtlinien-Bundle des NSA CISA Kubernetes Hardening v1.2 aus dem Cluster entfernt werden.
kubectl
Verwenden Sie kubectl, um die Richtlinien zu entfernen:
kubectl delete constraint -l policycontroller.gke.io/bundleName=nsa-cisa-k8s-v1.2
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/nsa-cisa-k8s-v1.2 git commit -m 'Removing NSA CISA Kubernetes Hardening Guide v1.2 policies' git push
Prüfen Sie den Status:
gcloud alpha anthos config sync repo list --project PROJECT_ID
Ihr Repository, das in der Spalte
SYNCED
angezeigt wird, bestätigt das Entfernen der Richtlinien.