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