Pod Security Admission (PSA)

Introduction

La sécurité des applications exécutées dans des conteneurs Kubernetes est une préoccupation majeure pour les équipes de développement et d’exploitation. Pod Security Admission (PSA) est une fonctionnalité clé de Kubernetes qui permet de renforcer la sécurité en définissant des politiques strictes pour les pods déployés dans un cluster Kubernetes. Dans cette section, nous allons explorer ce qu’est exactement PSA, pourquoi il est important et ce que vous pouvez attendre de ce guide.

Définition de Pod Security Admission (PSA)

Pod Security Admission (PSA) est un mécanisme de contrôle d’accès qui permet de définir des politiques de sécurité pour les pods Kubernetes. Il agit comme un filtre entre les requêtes de création ou de mise à jour de pods et le système de contrôle Kubernetes. Avant qu’un pod ne soit autorisé à démarrer ou à être mis à jour, PSA vérifie s’il respecte les politiques de sécurité définies.

Objectif du guide

Ce guide a pour objectif de vous familiariser avec Pod Security Admission, depuis son installation et sa configuration jusqu’à sa mise en œuvre pratique dans un environnement Kubernetes. Nous explorerons les différents modes de fonctionnement de PSA, les niveaux de contrôle disponibles, ainsi que des exemples concrets pour vous aider à comprendre comment l’utiliser efficacement dans votre propre infrastructure Kubernetes.

I – Installation et configuration de PSA

Prérequis

Avant de configurer Pod Security Admission (PSA) sur votre cluster Kubernetes, assurez-vous de disposer des éléments suivants :

  1. Un cluster Kubernetes fonctionnel : PSA est inclus nativement dans Kubernetes à partir de la version 1.23, donc assurez-vous d’utiliser une version compatible de Kubernetes et remplace PSP sur la version 1.25.
  2. Accès administratif : Vous devez disposer des droits d’administration sur le cluster Kubernetes pour configurer PSA.
  3. Connaissance de base de Kubernetes : Une compréhension de base de la façon dont fonctionne Kubernetes est recommandée pour configurer PSA efficacement.

Configuration de PSA

La configuration de Pod Security Admission se fait principalement via des paramètres au niveau du cluster Kubernetes. Voici les étapes générales pour configurer PSA sur votre cluster :

  1. Activation de PSA : Assurez-vous que PSA est activé sur votre cluster Kubernetes. Dans la plupart des cas, il est activé par défaut, mais vous devez vérifier cela dans votre configuration spécifique.
  2. Paramètres de configuration : Vous pouvez configurer différents paramètres pour contrôler le comportement de PSA, tels que les modes de fonctionnement (privileged, baseline, restricted) et les niveaux de contrôle (enforce, audit, warn).

Exemple de configuration de PSA au niveau du cluster

PSA étant une fonctionnalité native de Kubernetes, la configuration se fait via des objets Kubernetes spécifiques. Voici un exemple de configuration de PSA en utilisant une AdmissionControllerConfiguration :

Ce manifeste configure PSA pour utiliser les paramètres par défaut pour chaque aspect de la sécurité des pods. Vous pouvez personnaliser ces paramètres selon les besoins spécifiques de votre cluster.

Les exemptions de certaines règles de sécurité pour des utilisateurs, des classes d’exécution ou des namespaces spécifiques.

  • usernames : Une liste d’utilisateurs authentifiés à exempter des politiques de sécurité.
  • runtimeClasses : Une liste de noms de classes d’exécution à exempter des politiques de sécurité.
  • namespaces : Une liste de namespaces à exempter des politiques de sécurité.

II – Modes de fonctionnements de PSA

Pod Security Admission (PSA) offre plusieurs modes de fonctionnement pour contrôler le niveau de sécurité des pods déployés dans un cluster Kubernetes. Chaque mode définit un ensemble de règles de sécurité spécifiques pour les pods. Dans cette section, nous explorerons les différents modes de fonctionnement de PSA, en expliquant leurs caractéristiques et en fournissant des exemples techniques pour illustrer leur utilisation.

1. Mode privileged

  • Explication : En mode privileged, les pods ont un accès étendu aux ressources du système hôte, ce qui peut entraîner des risques de sécurité. Ce mode est le moins restrictif et permet aux pods de bénéficier de tous les privilèges disponibles sur le système hôte.
  • Exemples techniques : Un exemple de pod en mode privileged pourrait être un conteneur nécessitant un accès direct au matériel ou à des ressources système sensibles.
  • Actions autorisées : Toutes les actions sont autorisées.
  • Actions interdites : Aucune restriction n’est imposée.

2. Mode baseline

  • Explication : Le mode baseline impose des restrictions de sécurité de base aux pods, limitant leur accès aux ressources sensibles du système hôte. Ce mode est plus sécurisé que le mode privileged, mais offre toujours une certaine flexibilité.
  • Exemples techniques : Un exemple de pod en mode baseline pourrait être une application web standard qui n’a pas besoin d’accéder aux ressources système sensibles.
  • Actions autorisées : Les actions qui ne nécessitent pas d’accès privilégié au système hôte.
  • Actions interdites : Les actions qui pourraient compromettre la sécurité du système hôte.

3. Mode restricted

  • Explication : Le mode restricted est le plus restrictif des modes de fonctionnement de PSA. Il impose des règles de sécurité strictes aux pods, limitant drastiquement leur accès aux ressources sensibles du système hôte.
  • Exemples techniques : Un exemple de pod en mode restricted pourrait être un conteneur exécutant un service réseau isolé qui n’a besoin d’aucun accès au système hôte.
  • Actions autorisées : Seules les actions strictement nécessaires à l’exécution du pod sont autorisées.
  • Actions interdites : Toutes les actions qui pourraient compromettre la sécurité du système hôte sont interdites.

Chaque mode de fonctionnement de PSA offre un niveau différent de sécurité et de contrôle sur les pods déployés dans un cluster Kubernetes. Vous trouverez tous les Pods security standards ici: https://kubernetes.io/docs/concepts/security/pod-security-standards/

II – Niveaux de contrôle de PSA

Pod Security Admission (PSA) offre différents niveaux de contrôle pour appliquer les politiques de sécurité aux pods déployés dans un cluster Kubernetes. Chaque niveau de contrôle détermine la manière dont les politiques de sécurité sont appliquées et les actions à prendre en cas de non-conformité. Dans cette section, nous explorerons les différents niveaux de contrôle de PSA et comment les utiliser efficacement.

1. Enforce

  • Explication : En mode Enforce, PSA applique strictement les politiques de sécurité définies aux pods. Les pods qui ne respectent pas ces politiques sont refusés et ne sont pas autorisés à démarrer ou à être mis à jour.
  • Utilisation : Le mode Enforce est idéal pour garantir un niveau élevé de conformité aux politiques de sécurité, en empêchant les pods non conformes de s’exécuter dans le cluster.
  • Exemple : Si une politique exige que tous les pods soient démarrés avec un utilisateur non-root, PSA enforcera cette politique en refusant tout pod démarré avec un utilisateur root.

2. Audit

  • Explication : En mode Audit, PSA surveille et enregistre les actions qui contreviennent aux politiques de sécurité définies, mais n’empêche pas les pods non conformes de s’exécuter.
  • Utilisation : Le mode Audit est utile pour évaluer la conformité aux politiques de sécurité sans bloquer le déploiement des pods. Il permet de détecter les violations potentielles et de prendre des mesures correctives.
  • Exemple : Si un pod est démarré avec des privilèges élevés, PSA enregistrera cette action dans les journaux d’audit pour examen ultérieur, mais autorisera tout de même le déploiement du pod.

3. Warn

  • Explication : En mode Warn, PSA avertit les utilisateurs lorsqu’un pod ne respecte pas les politiques de sécurité définies, mais autorise tout de même le déploiement du pod.
  • Utilisation : Le mode Warn est utile pour sensibiliser les utilisateurs aux problèmes de sécurité potentiels sans bloquer le déploiement des pods. Cela permet aux équipes de développement de prendre des mesures correctives tout en maintenant la continuité des opérations.
  • Exemple : Si un pod est démarré avec un volume monté en lecture/écriture, PSA émettra un avertissement, mais permettra tout de même le déploiement du pod.

Chaque niveau de contrôle de PSA offre un équilibre différent entre la sécurité et la flexibilité, permettant aux équipes de choisir celui qui correspond le mieux à leurs besoins en matière de sécurité

III – Configuration technique de PSA au niveau du cluster

Pod Security Admission (PSA) offre un moyen intégré de gérer la sécurité des pods dans un cluster Kubernetes. Voici comment vous pouvez configurer PSA au niveau du cluster sans recourir aux Pod Security Policies :

1. Utilisation de labels dans les namespaces

Vous pouvez utiliser des annotations spécifiques dans les namespaces pour indiquer à PSA le niveau de sécurité à appliquer aux pods. Par exemple, vous pouvez spécifier des annotations telles que pod-security.kubernetes.io/enforce dans vos namespaces pour définir le niveau de sécurité requis pour les pods dans ce namespace. Voici un exemple :

Dans cet exemple, les annotations pod-security.kubernetes.io/enforce et pod-security.kubernetes.io/enforce-version indiquent à PSA de quel niveau de sécurité appliquer et quelle version utiliser.

Une autre alternative est d’utiliser des annotations directement dans les définitions de déploiement (Deployments), de réplica sets (ReplicaSets) ou d’autres ressources Kubernetes pour spécifier les exigences de sécurité pour chaque pod individuellement.

Conclusion

Pod Security Admission (PSA) est une fonctionnalité essentielle de Kubernetes pour renforcer la sécurité des conteneurs. En définissant des politiques de sécurité et en les appliquant à l’aide de PSA, les administrateurs peuvent limiter les risques de sécurité dans leur cluster.

Ce guide a exploré en détail l’installation, la configuration et l’utilisation pratique de PSA, mettant en évidence ses différents modes de fonctionnement et niveaux de contrôle. En utilisant des annotations dans les namespaces ou directement dans les définitions de déploiement, PSA permet une gestion flexible et précise des politiques de sécurité.

En adoptant PSA, vous pouvez renforcer la sécurité de vos applications Kubernetes tout en maintenant une certaine flexibilité opérationnelle. Nous espérons que ce guide vous a fourni les connaissances nécessaires pour sécuriser efficacement votre infrastructure Kubernetes.