Aller au contenu principal

Chapitre 9.4 - Pod Security Standards

Objectifs d'Apprentissage​

À la fin de ce chapitre, vous serez capable de:

  • Comprendre les Pod Security Standards (PSS)
  • Appliquer les niveaux de sécurité (Privileged, Baseline, Restricted)
  • Configurer l'admission control
  • Comprendre les restrictions de sécurité
  • Migrer vers des Pods plus sécurisés
  • Utiliser Pod Security Policies (déprécié)

Introduction​

Les Pod Security Standards (PSS) définissent trois niveaux de sécurité pour les Pods dans Kubernetes. Ils remplacent les Pod Security Policies (dépréciées).


Niveaux de Sécurité​

Privileged​

Aucune restriction. Permet toutes les capacités.

Cas d'usage: Systèmes de bas niveau, debugging.

Baseline​

Restrictions minimales. Empêche les configurations les plus dangereuses.

Recommandé pour: La plupart des applications.

Restricted​

Restrictions maximales. Suit les meilleures pratiques de sécurité.

Recommandé pour: Applications critiques, environnements sensibles.


Configuration au Niveau du Namespace​

Via Labels​

apiVersion: v1
kind: Namespace
metadata:
name: production
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/audit: restricted
pod-security.kubernetes.io/warn: restricted

Labels:

  • enforce: Applique le niveau (bloque les Pods non conformes)
  • audit: Enregistre les violations
  • warn: Affiche un avertissement

Via Admission Control​

apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodSecurity
configuration:
defaults:
enforce: "restricted"
enforce-version: "latest"
audit: "restricted"
audit-version: "latest"
warn: "restricted"
warn-version: "latest"
exemptions:
usernames: []
runtimeClasses: []
namespaces: ["kube-system"]

Restrictions Baseline​

Exemples de Restrictions​

  • Pas de hostPID, hostIPC, hostNetwork
  • Pas de volumes hostPath
  • Pas de capabilities dangereuses
  • Pas de runAsUser=0 (root)

Exemple: Pod Baseline​

apiVersion: v1
kind: Pod
metadata:
name: baseline-pod
spec:
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
containers:
- name: app
image: my-app:1.0
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL

Restrictions Restricted​

Restrictions Additionnelles​

  • runAsNonRoot: true obligatoire
  • seccompProfile: RuntimeDefault obligatoire
  • Pas de volumes hostPath
  • Pas de capabilities
  • readOnlyRootFilesystem: true recommandé

Exemple: Pod Restricted​

apiVersion: v1
kind: Pod
metadata:
name: restricted-pod
spec:
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
containers:
- name: app
image: my-app:1.0
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsNonRoot: true
runAsUser: 1000
capabilities:
drop:
- ALL
volumeMounts:
- name: tmp
mountPath: /tmp
volumes:
- name: tmp
emptyDir: {}

Migration Progressive​

Étape 1: Audit​

apiVersion: v1
kind: Namespace
metadata:
name: my-app
labels:
pod-security.kubernetes.io/audit: baseline
pod-security.kubernetes.io/warn: baseline

Résultat: Les violations sont enregistrées mais les Pods sont acceptés.

Étape 2: Warning​

metadata:
labels:
pod-security.kubernetes.io/warn: restricted

Résultat: Les violations affichent des avertissements.

Étape 3: Enforcement​

metadata:
labels:
pod-security.kubernetes.io/enforce: restricted

Résultat: Les Pods non conformes sont rejetés.


Commandes Utiles​

Vérification​

# Voir les labels de sécurité
kubectl get namespace production -o yaml | grep pod-security

# Vérifier la conformité d'un Pod
kubectl get pod my-pod -o yaml | grep -A 10 securityContext

# Tester un Pod
kubectl apply -f pod.yaml --dry-run=server

Bonnes Pratiques​

1. Démarrage avec Baseline​

Commencer par Baseline, puis migrer vers Restricted.

2. Migration Progressive​

Utiliser audit → warn → enforce pour une migration en douceur.

3. Exemptions​

Définir des exemptions pour les namespaces système.

4. Documentation​

Documenter les raisons des exemptions.

5. Monitoring​

Surveiller les violations pour identifier les problèmes.


Résumé​

Dans ce chapitre, vous avez appris:

Pod Security Standards: Trois niveaux (Privileged, Baseline, Restricted)
Configuration: Via labels namespace ou admission control
Baseline: Restrictions minimales, recommandé pour la plupart
Restricted: Restrictions maximales, meilleures pratiques
Migration: Audit → Warn → Enforce
Bonnes pratiques: Démarrage progressif, exemptions, monitoring


Prochaines Étapes​

Module 10: Helm et Package Management
Lab 9.4: Audit de Sécurité


Chapitre créé le: Décembre 2024