Le chargement sécurisé des modules de noyau Google Kubernetes Engine (GKE) vous permet d'exécuter des charges de travail qui nécessitent des modules de noyau signés et hors arbre (OOT) sur des images sécurisées de Container-Optimized OS. Le chargement sécurisé des modules de noyau permet d'améliorer la sécurité de vos clusters et de vos pools de nœuds en vous offrant un meilleur contrôle sur le chargement des modules sur les nœuds de processeur ou de TPU grâce à la validation de la signature.
Fonctionnement du chargement sécurisé des modules de noyau
Par défaut, les nœuds GKE utilisent différentes images Container-Optimized OS avec différentes configurations de sécurité, en fonction du type de nœud :
- Nœuds de CPU et de TPU : utilisez une image Container-Optimized OS avec le module de sécurité Linux (LSM) Loadpin activé. Loadpin restreint le chargement de tout module de noyau OOT. Ce paramètre est sécurisé, mais empêche le chargement des modules OOT.
- Nœuds GPU : utilisez une image Container-Optimized OS avec Loadpin désactivé. Ce paramètre permet de charger des modules OOT, comme l'installation de pilotes NVIDIA, mais il est moins sécurisé par défaut.
Vous pouvez activer le chargement sécurisé des modules du noyau à l'aide du paramètre NodeKernelModuleLoading.Policy dans le LinuxNodeConfig d'un pool de nœuds ou en transmettant l'indicateur --enable-kernel-module-signature-enforcement lors de la création ou de la mise à jour d'un cluster ou d'un pool de nœuds. Lorsque vous définissez la règle sur ENFORCE_SIGNED_MODULES dans vos pools de nœuds de processeur ou de TPU, Loadpin est activé, mais configuré pour autoriser le chargement de modules de noyau en dehors du système de fichiers racine. Les modules doivent être signés, et le système n'autorise que les modules signés par Google.
Quand utiliser le chargement sécurisé des modules de noyau
Utilisez le chargement sécurisé de kernel modules lorsque vous devez charger des kernel modules OOT signés par Google, tels que des pilotes personnalisés ou des systèmes de fichiers comme Lustre, sur n'importe quel type de nœud GKE. Cette fonctionnalité vous permet d'utiliser ces modules sans réduire le niveau de sécurité du nœud. Par exemple, vous pouvez charger un pilote requis sur un nœud de processeur sans avoir à utiliser le type d'image GPU moins restrictif.
Conditions requises et limites
Lorsque vous activez le chargement sécurisé des modules du noyau sur vos pools de nœuds, les exigences et limites suivantes s'appliquent :
- Modules compatibles : seuls les modules OOT signés par Google sont autorisés.
- cgroup v2 : le pool de nœuds doit utiliser cgroup v2. L'API Google Kubernetes Engine refuse les requêtes visant à activer cette règle sur les pools de nœuds qui utilisent cgroup v1. Pour en savoir plus, consultez la documentation sur les cgroups Kubernetes.
- Version GKE : cette fonctionnalité est disponible dans les versions de cluster GKE 1.34.1-gke.2364000 et ultérieures.
- Types d'images GPU : seuls les images de CPU et de TPU sont compatibles avec le chargement sécurisé des modules du noyau. Les GPU ne sont pas compatibles.
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez la gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande
gcloud components update. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.
Configurer la stratégie de chargement du module de noyau sécurisé
Vous pouvez configurer la stratégie de chargement sécurisé des modules du noyau sur des clusters individuels ou en tant que paramètre de pool de nœuds. Les règles disponibles sont les suivantes :
ENFORCE_SIGNED_MODULES: garantit que tous les modules de noyau hors arbre sont signés par Google. Cette règle exige que le pool de nœuds utilise cgroup v2.DO_NOT_ENFORCE_SIGNED_MODULES: permet de charger n'importe quel module de noyau, signé ou non. Il s'agit du comportement par défaut.
Si vous ne spécifiez pas de règle, GKE utilise le comportement par défaut, qui n'applique pas les modules signés.
Activer le chargement sécurisé des modules de noyau sur un cluster
Pour activer le chargement sécurisé des modules du noyau dans un cluster, procédez comme suit :
Pour l'activer sur un nouveau cluster, exécutez la commande suivante :
Standard
gcloud container clusters create CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementAutopilot
gcloud container clusters create-auto CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementRemplacez les éléments suivants :
CLUSTER_NAME: nom de votre nouveau clusterLOCATION: région ou zone du cluster.PROJECT_ID: ID de votre projet.
Pour l'activer sur un cluster existant, exécutez la commande suivante :
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementRemplacez les éléments suivants :
CLUSTER_NAME: nom du clusterLOCATION: région ou zone du cluster.PROJECT_ID: ID de votre projet.
Lorsque vous mettez à jour un cluster existant, les nœuds sont recréés à la prochaine occasion disponible, sauf si un intervalle de maintenance l'empêche.
Activer le chargement sécurisé des modules du noyau sur un pool de nœuds
Pour activer le chargement sécurisé des modules de noyau sur un pool de nœuds, procédez comme suit :
Pour l'activer sur un nouveau pool de nœuds, exécutez la commande suivante :
gcloud container node-pools create NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementRemplacez les éléments suivants :
NODEPOOL_NAME: nom de votre nouveau pool de nœuds.CLUSTER_NAME: nom du clusterLOCATION: région ou zone du cluster.PROJECT_ID: ID de votre projet.
Pour l'activer sur un pool de nœuds existant, exécutez la commande suivante :
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --enable-kernel-module-signature-enforcementRemplacez les éléments suivants :
NODEPOOL_NAME: nom du pool de nœuds à mettre à jour.CLUSTER_NAME: nom du clusterLOCATION: région ou zone du cluster.PROJECT_ID: ID de votre projet.
Vérifier que la règle du module de noyau sécurisé est définie
Pour vérifier qu'une stratégie est définie pour un cluster, exécutez la commande suivante :
gcloud container node-pools describe NODEPOOL_NAME \
--cluster=CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID
Dans le résultat, vérifiez la section linuxNodeConfig. Le champ kernelModuleLoading affiche la stratégie actuelle :
...
config:
linuxNodeConfig:
kernelModuleLoading:
policy: ENFORCE_SIGNED_MODULES
cgroupMode: CGROUP_MODE_V2
Désactiver le chargement sécurisé des modules du noyau
Pour désactiver le chargement sécurisé des modules du noyau, procédez comme suit :
Pour désactiver la fonctionnalité sur un cluster, exécutez la commande suivante :
gcloud container clusters update CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --no-enable-kernel-module-signature-enforcementPour désactiver le streaming d'images sur un pool de nœuds existant, exécutez la commande suivante :
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --location=LOCATION \ --project=PROJECT_ID \ --no-enable-kernel-module-signature-enforcement
Étapes suivantes
- Découvrez comment renforcer la sécurité de votre cluster.