Kubernetes-Security, Teil 2: Container-Rechte verwalten mit PodSecurityPolicies

Teil 2 der Serie zu Kubernetes und Security behandelt Pod Security Policies (PSP) – diese verbinden das Linux-Erbe mit der Kubernetes-Rechteverwaltung.

Lesezeit: 10 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen
Kubernetes-Security, Teil 2: Container-Rechte verwalten mit PodSecurityPolicies

(Bild: Illus_man/Shutterstock.com)

Von
  • Thomas Fricke
Inhaltsverzeichnis

PodSecurityPolicies (PSP) verbinden das Linux-Erbe mit der Rechteverwaltung von Kubernetes. Der erste Teil der Serie ist auf die Bedeutung der Linux Namespaces eingegangen, in diesem Teil geht es darum, die Rechte aus Kubernetes heraus zu steuern. Dafür gilt es zunächst, die Pod Security Policies zu aktivieren.

Kubernetes-Security - die Serie

In der Sicherheitsarchitektur von Kubernetes sind zahlreiche Elemente miteinander verwoben, die die Beiträge dieser Artikelstrecke jeweils vorstellen:

Um schnelle Fortschritte bei der Entwicklung zu erzielen, ist der Bereich Sicherheit bei der Entwicklung von Kubernetes hintenangestellt worden. Zunächst gilt es deshalb, in den Clustern die PodSecurityPolicy einzuschalten. Der ApiServer muss dazu im Argument --enable-admission-plugins einen Eintrag PodSecurityPolicy haben. Bei Minikube ist das nicht von Anfang an aktiv, dort muss die entsprechende Zeile in /etc/kubernetes/manifests/kube-apiserver.yaml etwa so aussehen:

--enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,\ DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction, \ MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota, \
PodSecurityPolicy

In Ubuntus Microk8s ist die Aktivierung auf GitHub dokumentiert. PSP werden durch einen Admission Controller implementiert. In einem der folgenden Artikel dieser Reihe wird das Thema noch eine Rolle spielen.

Durch Eintrag in die Datei wird der API-Server sofort neu gestartet. Jetzt funktioniert erst mal nichts mehr, das Starten eines Pods wird generell abgelehnt. Wenn etwa ein Nginx-Deployment gestartet wird:

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: default
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
EOF