Le chargement sécurisé des modules de noyau dans Google Kubernetes Engine (GKE) vous permet d'exécuter des charges de travail qui nécessitent des modules de noyau hors arborescence signés sur des images de système d'exploitation sécurisées et optimisées pour les conteneurs. Le chargement sécurisé des modules de noyau contribue à améliorer la stratégie de sécurité de vos clusters et pools de nœuds en vous offrant plus de contrôle sur le chargement des modules sur les nœuds de processeur ou de TPU avec validation de signature.
Fonctionnement du chargement sécurisé des modules de noyau
Par défaut, les nœuds GKE utilisent différentes images de Container-Optimized OS avec différentes configurations de sécurité, en fonction du type de nœud :
- Nœuds de processeur et de TPU : utilisez une image de Container-Optimized OS avec le module de sécurité Linux (LSM) Loadpin activé. Loadpin limite le chargement de tout module de noyau hors arborescence. Ce paramètre est sécurisé, mais empêche le chargement des modules hors arborescence.
- Nœuds GPU : utilisez une image de Container-Optimized OS avec Loadpin désactivé. Ce paramètre permet de charger des modules hors arborescence, tels que l'installation de pilotes NVIDIA, mais il est moins sécurisé par défaut.
Vous activez le chargement sécurisé des modules de noyau à l'aide du paramètre NodeKernelModuleLoading.Policy dans LinuxNodeConfig pour un pool de nœuds ou en transmettant le flag --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 sur vos pools de nœuds de processeur ou de TPU, Loadpin est activé, mais configuré pour autoriser le chargement des 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é des modules de noyau lorsque vous devez charger des modules de noyau hors arborescence 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 la stratégie 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 de noyau sur vos pools de nœuds, les conditions requises et limites suivantes s'appliquent :
- Modules compatibles : seuls les modules hors arborescence signés par Google sont autorisés.
- cgroup v2 : le pool de nœuds doit utiliser cgroup v2. L'API Kubernetes Engine rejette 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 Kubernetes cgroup.
- Version GKE : cette fonctionnalité est disponible dans les versions de cluster GKE 1.34.1-gke.2364000 et ultérieures.
- Types d'images GPU : seules les images de processeur et de TPU sont compatibles avec le chargement sécurisé des modules de 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 la Google Cloud CLI pour cette tâche, installez et 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 règle de chargement sécurisé des modules de noyau
Vous pouvez configurer la règle de chargement sécurisé des modules de 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: impose que tous les modules de noyau hors arborescence soient signés par Google. Cette règle nécessite 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 de noyau sur un cluster, effectuez l'une des étapes suivantes :
Pour activer cette fonctionnalité 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 clusterPROJECT_ID: ID de votre projet
Pour activer cette fonctionnalité 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 clusterPROJECT_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 de noyau sur un pool de nœuds
Pour activer le chargement sécurisé des modules de noyau sur un pool de nœuds, effectuez l'une des étapes suivantes :
Pour activer cette fonctionnalité 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 clusterPROJECT_ID: ID de votre projet
Pour activer cette fonctionnalité 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 clusterPROJECT_ID: ID de votre projet
Vérifier que la règle de chargement sécurisé des modules de noyau est définie
Pour vérifier qu'une règle 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 la sortie, vérifiez la section linuxNodeConfig. Le champ kernelModuleLoading affiche la règle actuelle :
...
config:
linuxNodeConfig:
kernelModuleLoading:
policy: ENFORCE_SIGNED_MODULES
cgroupMode: CGROUP_MODE_V2
Désactiver le chargement sécurisé des modules de noyau
Pour désactiver le chargement sécurisé des modules de noyau, effectuez l'une des étapes suivantes :
Pour désactiver cette 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 cette fonctionnalité 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
Étape suivante
- Découvrez comment renforcer la sécurité de votre cluster.