Erstelle die Datei pod-securitycontext.yaml
:
apiVersion: v1
kind: Pod
metadata:
name: secure-pod
spec:
securityContext:
runAsUser: 1000 # User ID, unter der der Container läuft
runAsGroup: 3000 # Gruppen ID
fsGroup: 2000 # Gruppen ID für Volumes (Dateisystem)
runAsNonRoot: true # Container darf nicht als root laufen
containers:
- name: busybox
image: busybox
command: ["sh", "-c", "sleep 3600"]
securityContext:
readOnlyRootFilesystem: true # Root-Dateisystem ist schreibgeschützt
allowPrivilegeEscalation: false # Keine Privilege Escalation erlaubt
kubectl apply -f pod-securitycontext.yaml
kubectl get pods secure-pod
kubectl describe pod secure-pod
kubectl exec -it secure-pod -- sh
Überprüfe User und Rechte:
id
touch /tmp/testfile # sollte funktionieren (tmp ist schreibbar)
touch /root/testfile # sollte **fehlschlagen** (read-only root FS)
Feld | Bedeutung |
---|---|
runAsUser |
User-ID, unter der der Container läuft |
runAsGroup |
Gruppen-ID für den Prozess |
fsGroup |
Gruppen-ID, die auf gemounteten Volumes gesetzt wird (für Dateisystemrechte) |
runAsNonRoot |
Erzwingt, dass der Container nicht als root läuft |
readOnlyRootFilesystem |
Root-Dateisystem wird schreibgeschützt |
allowPrivilegeEscalation |
Verbietet Privilegien-Erweiterung im Container |
Erstelle pod-no-seccontext.yaml
:
apiVersion: v1
kind: Pod
metadata:
name: insecure-pod
spec:
containers:
- name: busybox
image: busybox
command: ["sh", "-c", "sleep 3600"]
Dann:
kubectl apply -f pod-no-seccontext.yaml
kubectl exec -it insecure-pod -- sh
id
Hier läuft der Container meist als root (UID 0).