Policy Controller enthält eine Standardbibliothek mit Einschränkungsvorlagen, die mit dem MITRE-Richtlinien-Bundle verwendet werden können, um die Compliance Ihrer Clusterressourcen mit einigen Aspekten der MITRE-Wissensdatenbank für Angriffstaktiken und ‑methoden zu bewerten, die auf Beobachtungen aus der Praxis basiert.
Auf dieser Seite finden Sie eine Anleitung zum manuellen Anwenden eines Richtlinienpakets. Alternativ können Sie Richtlinienpakete direkt anwenden.
Einschränkungen für MITRE-Richtlinien-Bundles
| Name der Einschränkung | Beschreibung der Einschränkung | 
|---|---|
| mitre-v2024-apparmor | Schränkt das Profil AppArmorfür Pods ein. | 
| mitre-v2024-block-all-ingress | Schränkt die Erstellung von Ingress-Objekten ein. | 
| mitre-v2024-cronjob-restrict-repos | Beschränkt Container-Images für CronJobauf eine zulässige „Repos“-Liste. | 
| mitre-v2024-no-anonymous | Verbietet die Zuordnung von ClusterRole- undRole-Ressourcen zum Nutzersystem:anonymousund der Gruppesystem:unauthenticated. | 
| mitre-v2024-host-namespaces-host-pid-ipc | Container können nicht ausgeführt werden, wenn hostPIDoderhostIPCauftruegesetzt ist. | 
| mitre-v2024-host-namespaces-hostnetwork | Container können nicht ausgeführt werden, wenn hostNetworkauftruegesetzt ist. | 
| mitre-v2024-host-ports | HostPortssollte nicht zugelassen oder auf eine bekannte Liste beschränkt sein. | 
| mitre-v2024-no-secrets-as-env-vars | Schränkt die Verwendung von Secrets als Umgebungsvariablen in Containerdefinitionen ein. | 
| mitre-v2024-privileged-containers | Beschränkt securityContext.privilegedauftrue. | 
| mitre-v2024-proc-mount-type | Die standardmäßigen /proc-Masken reduzieren die Angriffsfläche und sind erforderlich. | 
| mitre-v2024-require-binauthz | Erfordert validierenden Zulassungs-Webhook der Binärautorisierung. | 
| mitre-v2024-require-namespace-networkpolicy | Erfordert, dass jeder im Cluster definierte Namespace eine NetworkPolicy hat. | 
| mitre-v2024-restrict-admission-controller | Schränkt die Verwendung dynamischer Zulassungs-Controller und Webhooks ein. | 
| mitre-v2024-restrict-automountserviceaccounttoken | Beschränkt die Verwendung von Dienstkonto-Tokens. | 
| mitre-v2024-restrict-capabilities | Das Hinzufügen von Funktionen über die aufgeführten Elemente hinaus ist nicht zulässig. | 
| mitre-v2024-restrict-cluster-admin-role | Schränkt die Verwendung der Rolle cluster-adminein. | 
| mitre-v2024-restrict-hostpath-volumes | Schränkt die Verwendung von HostPath-Volumes ein. | 
| mitre-v2024-restrict-kubernetes-dashboard-namespace | Schränkt die Verwendung des Namespace kubernetes-dashboardein. | 
| mitre-v2024-restrict-pods-exec | Beschränkt die Verwendung von pods/execinRolesundClusterRoles. | 
| mitre-v2024-restrict-rbac-subjects | Schränkt die Verwendung von Namen in RBAC auf die zulässigen Werte ein. | 
| mitre-v2024-restrict-repos | Beschränkt Container-Images auf eine zulässige repos-Liste. | 
| mitre-v2024-restrict-role-secrets | Schränkt die Verwendung von Secrets in RolesundClusterRolesein. | 
| mitre-v2024-restrict-windows-hostprocess | Schränkt die Ausführung von Windows HostProcess-Containern/-Pods ein | 
| mitre-v2024-seccomp | Das Seccomp-Profil darf nicht auf Unconfinedgesetzt sein. | 
| mitre-v2024-selinux | Der SELinux-Typ oder die benutzerdefinierte SELinux-Nutzer- oder -Rollenoption kann nicht festgelegt werden. | 
| mitre-v2024-sysctls | Container können nur sysctls festlegen, die im Feld allowedSysctlsaufgelistet sind. | 
Hinweise
- Installieren und initialisieren Sie das Google Cloud CLI, das die in dieser Anleitung verwendeten Befehle gcloudundkubectlenthält. Wenn Sie Cloud Shell verwenden, ist Google Cloud CLI vorinstalliert.
- Installieren Sie Policy Controller v1.17.2 oder höher in Ihrem Cluster mit der Standardbibliothek mit 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" - group: "admissionregistration.k8s.io" version: "v1" kind: "ValidatingWebhookConfiguration"
- Wenden Sie das - policycontroller-config.yaml-Manifest an:- kubectl apply -f policycontroller-config.yaml
MITRE-Richtlinien-Bundle 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 MITRE-Richtlinien testen können, können Sie diese Einschränkungen im „Audit”-Modus bereitstellen, um Verstöße aufzudecken und vor allem selbst eine Gelegenheit zu geben, um sie zu beheben, bevor Sie sie auf Ihrem Kubernetes-Cluster 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/mitre-v2024 
- Wenden Sie die Richtlinieneinschränkungen mit kubectl an: - kubectl apply -k https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/mitre-v2024 - Die Ausgabe sieht so aus: - k8sallowedrepos.constraints.gatekeeper.sh/mitre-v2024-restrict-repos created k8sblockallingress.constraints.gatekeeper.sh/mitre-v2024-block-all-ingress created k8scronjoballowedrepos.constraints.gatekeeper.sh/mitre-v2024-cronjob-restrict-repos created k8sdisallowanonymous.constraints.gatekeeper.sh/mitre-v2024-no-anonymous created k8snoenvvarsecrets.constraints.gatekeeper.sh/mitre-v2024-no-secrets-as-env-vars created k8spspapparmor.constraints.gatekeeper.sh/mitre-v2024-apparmor created k8spspcapabilities.constraints.gatekeeper.sh/mitre-v2024-restrict-capabilities created k8spspforbiddensysctls.constraints.gatekeeper.sh/mitre-v2024-sysctls created k8spsphostfilesystem.constraints.gatekeeper.sh/mitre-v2024-restrict-hostpath-volumes created k8spsphostnamespace.constraints.gatekeeper.sh/mitre-v2024-host-namespaces-host-pid-ipc created k8spsphostnetworkingports.constraints.gatekeeper.sh/mitre-v2024-host-namespaces-hostnetwork created k8spsphostnetworkingports.constraints.gatekeeper.sh/mitre-v2024-host-ports created k8spspprivilegedcontainer.constraints.gatekeeper.sh/mitre-v2024-privileged-containers created k8spspprocmount.constraints.gatekeeper.sh/mitre-v2024-proc-mount-type created k8spspselinuxv2.constraints.gatekeeper.sh/mitre-v2024-selinux created k8spspseccomp.constraints.gatekeeper.sh/mitre-v2024-seccomp created k8spspwindowshostprocess.constraints.gatekeeper.sh/mitre-v2024-restrict-windows-hostprocess created k8srequirebinauthz.constraints.gatekeeper.sh/mitre-v2024-require-binauthz created k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/mitre-v2024-require-namespace-networkpolicy created k8srestrictadmissioncontroller.constraints.gatekeeper.sh/mitre-v2024-restrict-admission-controller created k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/mitre-v2024-restrict-automountserviceaccounttoken created k8srestrictnamespaces.constraints.gatekeeper.sh/mitre-v2024-restrict-kubernetes-dashboard-namespace created k8srestrictrbacsubjects.constraints.gatekeeper.sh/mitre-v2024-restrict-rbac-subjects created k8srestrictrolebindings.constraints.gatekeeper.sh/mitre-v2024-restrict-cluster-admin-role created k8srestrictrolerules.constraints.gatekeeper.sh/mitre-v2024-restrict-pods-exec created k8srestrictrolerules.constraints.gatekeeper.sh/mitre-v2024-restrict-role-secrets 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=mitre-v2024 - Die Ausgabe sieht in etwa so aus: - NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sallowedrepos.constraints.gatekeeper.sh/mitre-v2024-restrict-repos dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sblockallingress.constraints.gatekeeper.sh/mitre-v2024-block-all-ingress dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8scronjoballowedrepos.constraints.gatekeeper.sh/mitre-v2024-cronjob-restrict-repos dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8sdisallowanonymous.constraints.gatekeeper.sh/mitre-v2024-no-anonymous dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8snoenvvarsecrets.constraints.gatekeeper.sh/mitre-v2024-no-secrets-as-env-vars dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspapparmor.constraints.gatekeeper.sh/mitre-v2024-apparmor dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspcapabilities.constraints.gatekeeper.sh/mitre-v2024-restrict-capabilities dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspforbiddensysctls.constraints.gatekeeper.sh/mitre-v2024-sysctls dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostfilesystem.constraints.gatekeeper.sh/mitre-v2024-restrict-hostpath-volumes dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnamespace.constraints.gatekeeper.sh/mitre-v2024-host-namespaces-host-pid-ipc dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spsphostnetworkingports.constraints.gatekeeper.sh/mitre-v2024-host-namespaces-hostnetwork dryrun 0 k8spsphostnetworkingports.constraints.gatekeeper.sh/mitre-v2024-host-ports dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprivilegedcontainer.constraints.gatekeeper.sh/mitre-v2024-privileged-containers dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspprocmount.constraints.gatekeeper.sh/mitre-v2024-proc-mount-type dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspseccomp.constraints.gatekeeper.sh/mitre-v2024-seccomp dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspselinuxv2.constraints.gatekeeper.sh/mitre-v2024-selinux dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8spspwindowshostprocess.constraints.gatekeeper.sh/mitre-v2024-restrict-windows-hostprocess dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirebinauthz.constraints.gatekeeper.sh/mitre-v2024-require-binauthz dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srequirenamespacenetworkpolicies.constraints.gatekeeper.sh/mitre-v2024-require-namespace-networkpolicy dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictadmissioncontroller.constraints.gatekeeper.sh/mitre-v2024-restrict-admission-controller dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictautomountserviceaccounttokens.constraints.gatekeeper.sh/mitre-v2024-restrict-automountserviceaccounttoken dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictnamespaces.constraints.gatekeeper.sh/mitre-v2024-restrict-kubernetes-dashboard-namespace dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrbacsubjects.constraints.gatekeeper.sh/mitre-v2024-restrict-rbac-subjects dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolebindings.constraints.gatekeeper.sh/mitre-v2024-restrict-cluster-admin-role dryrun 0 NAME ENFORCEMENT-ACTION TOTAL-VIOLATIONS k8srestrictrolerules.constraints.gatekeeper.sh/mitre-v2024-restrict-pods-exec dryrun 0 k8srestrictrolerules.constraints.gatekeeper.sh/mitre-v2024-restrict-role-secrets dryrun 0 
KPT
- Installieren und richten Sie kpt ein. kpt wird in dieser Anleitung verwendet, um Kubernetes-Ressourcen anzupassen und bereitzustellen. 
- Laden Sie das MITRE-Richtlinien-Bundle von GitHub mit kpt herunter: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/mitre-v2024 
- Führen Sie die kpt-Funktion - set-enforcement-actionaus, um die Erzwingungsaktion der Richtlinien auf- dryrunfestzulegen:- kpt fn eval mitre-v2024 -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 mitre-v2024 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 - CURRENTbestä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.yamloder hängen es an- .gitignorean:- echo resourcegroup.yaml >> .gitignore 
- Erstellen Sie ein dediziertes - policies-Verzeichnis:- mkdir -p policies 
- Laden Sie das MITRE-Richtlinien-Bundle von GitHub mit kpt herunter: - kpt pkg get https://github.com/GoogleCloudPlatform/gke-policy-library.git/anthos-bundles/mitre-v2024 policies/mitre-v2024 
- Führen Sie die kpt-Funktion - set-enforcement-actionaus, um die Erzwingungsaktion der Richtlinien auf- dryrunfestzulegen:- kpt fn eval policies/mitre-v2024 -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/mitre-v2024 kpt live apply --dry-run policies/mitre-v2024 
- Wenn Ihr Synchronisierungsverzeichnis für Config Sync Kustomize verwendet, fügen Sie - policies/mitre-v2024Ihrer Stamm-- kustomization.yamlhinzu. Andernfalls entfernen Sie die Datei- policies/mitre-v2024/kustomization.yaml:- rm SYNC_ROOT_DIR/policies/mitre-v2024/kustomization.yaml 
- Übertragen Sie Änderungen per Push in das Config Sync-Repository: - git add SYNC_ROOT_DIR/policies/mitre-v2024 git commit -m 'Adding MITRE 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 - SYNCEDbestä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=mitre-v2024 -o json | jq -cC '.items[]| [.metadata.name,.status.totalViolations]'
Wenn Verstöße vorhanden sind, kann eine Liste der Verstoßmeldungen pro Einschränkung angezeigt werden; dazu nutzen Sie:
kubectl get constraint -l policycontroller.gke.io/bundleName=mitre-v2024 -o json | jq -C '.items[]| select(.status.totalViolations>0)| [.metadata.name,.status.violations[]?]'
Erzwingungsaktion des MITRE-Richtlinien-Bundles ändern
Nachdem Sie die Richtlinienverstöße in Ihrem Cluster überprüft haben, können Sie den Erzwingungsmodus ändern, sodass der Zulassungs-Controller entweder den Modus warn aktiviert oder sogar deny verhindert, dass nicht konforme Ressourcen auf das Cluster angewendet werden.
kubectl
- Verwenden Sie kubectl, um die Maßnahme der Richtlinien auf - warnfestzulegen:- kubectl get constraint -l policycontroller.gke.io/bundleName=mitre-v2024 -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 constraint -l policycontroller.gke.io/bundleName=mitre-v2024 
KPT
- Führen Sie die kpt-Funktion - set-enforcement-actionaus, um die Erzwingungsaktion der Richtlinien auf- warnfestzulegen:- 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-actionaus, um die Erzwingungsaktion der Richtlinien auf- warnfestzulegen:- kpt fn eval policies/mitre-v2024 -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/mitre-v2024 git commit -m 'Adding MITRE policy bundle warn enforcement' git push 
- Prüfen Sie den Status der Installation: - nomos status - Der Cluster sollte den Status - SYNCEDmit den installierten Richtlinien anzeigen.
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: [mitre-v2024-restrict-repos] container <wordpress> has an invalid image repo <wordpress>, allowed repos are ["gcr.io/gke-release/", "gcr.io/anthos-baremetal-release/", "gcr.io/gke-on-prem-release/", "gcr.io/gke-multi-cloud-release/", "gcr.io/config-management-release/", "gcr.io/kubebuilder/", "gcr.io/gkeconnect/", "gke.gcr.io/"] pod/wp-non-compliant created
MITRE-Richtlinien-Bundle entfernen
Bei Bedarf kann das MITRE-Richtlinien-Bundle aus dem Cluster entfernt werden.
kubectl
- Verwenden Sie kubectl, um die Richtlinien zu entfernen: - kubectl delete constraint -l policycontroller.gke.io/bundleName=mitre-v2024 
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/mitre-v2024 git commit -m 'Removing MITRE policies' git push 
- Prüfen Sie den Status: - nomos status - Der Cluster sollte den Status - SYNCEDhaben und die Ressourcen sollten entfernt sein.