it-wiki:kubernetes:security
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| it-wiki:kubernetes:security [2024/04/10 09:39] – angelegt marko | it-wiki:kubernetes:security [2025/10/31 03:55] (aktuell) – [Container und Container Image Security] marko | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== Pod Security Admission ====== | ||
| + | Die Kubernetes Pod Security Admission (PSA) ist eine im Core von Kubernetes integrierte Admission-Controller-Strategie, | ||
| + | {{ : | ||
| + | ===== Funktionsweise ===== | ||
| + | Der Pod Security Admission Controller überprüft beim Erstellen oder Aktualisieren eines Pods, ob dessen Spezifikation den im Namespace konfigurierten Sicherheitsstufen entspricht. Pods, die restriktive Einstellungen unterlaufen, | ||
| + | |||
| + | Es stehen drei Sicherheitsprofile zur Verfügung: | ||
| + | * **privileged**: | ||
| + | * **baseline**: | ||
| + | * **restricted**: | ||
| + | |||
| + | ===== Konfiguration ===== | ||
| + | Die Sicherheitsprofile werden auf Namespace-Ebene über Labels definiert. Jedes Profil kann drei Modi haben: | ||
| + | |||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | |||
| + | ==== Beispiel: Namespace-Labelling ==== | ||
| + | <code bash> | ||
| + | kubectl label namespace < | ||
| + | pod-security.kubernetes.io/ | ||
| + | pod-security.kubernetes.io/ | ||
| + | pod-security.kubernetes.io/ | ||
| + | pod-security.kubernetes.io/ | ||
| + | </ | ||
| + | |||
| + | Mit diesem Beispiel: | ||
| + | * Werden nur Pods akzeptiert, die das Profil `baseline` erfüllen. | ||
| + | * Bei Verstoß gegen `restricted` gibt es eine Warnung. | ||
| + | |||
| + | Ein weiteres Beispiel als Manifestfile | ||
| + | <code yaml> | ||
| + | apiVersion: v1 | ||
| + | kind: Namespace | ||
| + | metadata: | ||
| + | name: my-baseline-namespace | ||
| + | labels: | ||
| + | pod-security.kubernetes.io/ | ||
| + | pod-security.kubernetes.io/ | ||
| + | |||
| + | # We are setting these to our _desired_ `enforce` level. | ||
| + | pod-security.kubernetes.io/ | ||
| + | pod-security.kubernetes.io/ | ||
| + | pod-security.kubernetes.io/ | ||
| + | pod-security.kubernetes.io/ | ||
| + | </ | ||
| + | Es besteht auch die Möglichkeit statt einer eindeutigen Version einfach '' | ||
| + | ===== Profile im Detail ===== | ||
| + | - **Privileged** | ||
| + | * Kaum Einschränkungen. | ||
| + | * Erlaubt z. B. privilegierte Container, Host-Networking, | ||
| + | - **Baseline** | ||
| + | * Verbietet die meisten eskalierenden Features. | ||
| + | * Erlaubt, was für viele Anwendungen benötigt wird, wie z. B. einige Capabilities. | ||
| + | - **Restricted** | ||
| + | * Strikte Isolation des Pods. | ||
| + | * Kein privilegierter Zugriff, keine systemkritischen Capabilities. | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ===== Referenzen ===== | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | **Hinweis: | ||
| + | Für eine produktive Umgebung sollte die Konfiguration regelmäßig geprüft und mit weiteren Maßnahmen (z. B. Role-based Access Control, Image Policies) kombiniert werden. | ||
| + | |||
| + | ===== Anwendung von Pod Security Standards verstehen ===== | ||
| + | ''< | ||
| + | - **Privileged** <code bash> | ||
| + | pod-security.kubernetes.io/ | ||
| + | namespace/ | ||
| + | namespace/ | ||
| + | namespace/ | ||
| + | namespace/ | ||
| + | - **Baseline** <code bash> | ||
| + | pod-security.kubernetes.io/ | ||
| + | namespace/ | ||
| + | namespace/ | ||
| + | Warning: existing pods in namespace " | ||
| + | Warning: etcd-psa-wo-cluster-pss-control-plane (and 3 other pods): host namespaces, hostPath volumes | ||
| + | Warning: kindnet-vzj42: | ||
| + | Warning: kube-proxy-m6hwf: | ||
| + | namespace/ | ||
| + | namespace/ | ||
| + | - **Restricted** <code bash> | ||
| + | pod-security.kubernetes.io/ | ||
| + | namespace/ | ||
| + | namespace/ | ||
| + | Warning: existing pods in namespace " | ||
| + | Warning: coredns-7bb9c7b568-hsptc (and 1 other pod): unrestricted capabilities, | ||
| + | Warning: etcd-psa-wo-cluster-pss-control-plane (and 3 other pods): host namespaces, hostPath volumes, allowPrivilegeEscalation != false, unrestricted capabilities, | ||
| + | Warning: kindnet-vzj42: | ||
| + | Warning: kube-proxy-m6hwf: | ||
| + | namespace/ | ||
| + | Warning: existing pods in namespace " | ||
| + | Warning: local-path-provisioner-d6d9f7ffc-lw9lh: | ||
| + | namespace/ | ||
| + | |||
| + | Aus der vorherigen Ausgabe geht hervor, dass die Anwendung des privileged Pod-Sicherheitsstandards keine Warnungen für irgendwelche Namespaces ausgibt. Die Standards '' | ||
| + | |||
| + | ---- | ||
| + | |||
| + | ===== Pod-Sicherheitsstandards auf Clusterebene ===== | ||
| + | Es werden die folgenden Pod-Sicherheitsstandards auf die Version latest angewendet: | ||
| + | * baseline standard in enforce mode | ||
| + | * restricted standard in warn and audit mode | ||
| + | |||
| + | Der baselinePod Security Standard bietet einen praktischen Mittelweg, der es ermöglicht, | ||
| + | Um außerdem zu verhindern, dass Pods in | ||
| + | * kube-system | ||
| + | * calico-system | ||
| + | |||
| + | fehlschlagen, | ||
| + | |||
| + | Bei der Implementierung von Pod Security Admission auf Cluster Ebene sollte Folgendes beachtet werden: | ||
| + | * Abhängig von der Risikobewertung eines Clusters könnte ein strengerer Pod-Sicherheitsstandard die bessere Wahl sein. Beispielsweise '' | ||
| + | |||
| + | Für die Clusterweite Anwendung wird der Admission Controller konfiguriert | ||
| + | <code yaml> | ||
| + | apiVersion: apiserver.config.k8s.io/ | ||
| + | kind: AdmissionConfiguration | ||
| + | plugins: | ||
| + | - name: PodSecurity | ||
| + | configuration: | ||
| + | apiVersion: pod-security.admission.config.k8s.io/ | ||
| + | kind: PodSecurityConfiguration | ||
| + | # Defaults applied when a mode label is not set. | ||
| + | # | ||
| + | # Level label values must be one of: | ||
| + | # - " | ||
| + | # - " | ||
| + | # - " | ||
| + | # | ||
| + | # Version label values must be one of: | ||
| + | # - " | ||
| + | # - specific version like " | ||
| + | defaults: | ||
| + | enforce: " | ||
| + | enforce-version: | ||
| + | audit: " | ||
| + | audit-version: | ||
| + | warn: " | ||
| + | warn-version: | ||
| + | exemptions: | ||
| + | # Array of authenticated usernames to exempt. | ||
| + | usernames: [] | ||
| + | # Array of runtime class names to exempt. | ||
| + | runtimeClasses: | ||
| + | # Array of namespaces to exempt. | ||
| + | namespaces: [kube-system, | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | < | ||
| + | Das obige Manifest muss über den kube-apiserver angegeben werden. | ||
| + | </ | ||
| + | |||
| + | - Bereiten Sie das Konfigurationsverzeichnis vor: <code bash> | ||
| + | cp psa-config.yaml / | ||
| + | - Ändern Sie die API-Serverkonfiguration: | ||
| + | extraArgs: | ||
| + | admission-control-config-file: | ||
| + | extraVolumes: | ||
| + | - name: psa-config | ||
| + | hostPath: | ||
| + | mountPath: | ||
| + | readOnly: | ||
| + | - Starten Sie den API-Server neu:\\ Nach der Aktualisierung der Konfiguration muss der API-Server neu gestartet werden, um die Änderungen anzuwenden. | ||
| + | \\ | ||
| + | \\ | ||
| ====== Container und Container Image Security ====== | ====== Container und Container Image Security ====== | ||
| ===== trivy ===== | ===== trivy ===== | ||
| Zeile 18: | Zeile 190: | ||
| * Software licenses | * Software licenses | ||
| + | ===== kube-bench ===== | ||
| + | [[https:// | ||
| + | |||
| + | ==== CIS Scanning as part of Trivy and the Trivy Operator ==== | ||
| + | [[security# | ||
it-wiki/kubernetes/security.1712741980.txt.gz · Zuletzt geändert: von marko