Guide de renforcement de la sécurité CIS
Ce document fournit des conseils prescriptifs pour le renforcement d’une installation de production de SUSE® Rancher Prime: RKE2. Il décrit les configurations et les contrôles nécessaires pour répondre aux contrôles de référence Kubernetes du Center for Internet Security (CIS).
Pour plus de détails sur l’évaluation d’un cluster renforcé par rapport à la référence CIS officielle, veuillez consulter le guide d’auto-évaluation CIS approprié :
-
CIS Self-Assessment Guide v1.11 pour RKE2 v1.29 et versions ultérieures
-
CIS Self-Assessment Guide v1.10 pour RKE2 v1.29-v1.31
-
CIS Self-Assessment Guide v1.9 pour RKE2 v1.27-v1.29
RKE2 est conçu pour être "renforcé par défaut" et passer la majorité des contrôles CIS Kubernetes sans modification. Il existe quelques exceptions notables qui nécessitent une intervention manuelle pour passer pleinement la référence CIS :
-
RKE2 ne modifiera pas le système d’exploitation hôte. Par conséquent, vous, l’opérateur, devez effectuer quelques modifications au niveau de l’hôte.
-
Certains contrôles CIS pour les politiques réseau et les normes de sécurité des pods (ou les politiques de sécurité des pods (PSP) sur les versions RKE2 antérieures à v1.25) limiteront la fonctionnalité du cluster. Vous devez choisir de laisser RKE2 configurer cela pour vous. Pour aider à garantir que ces exigences sont respectées, RKE2 peut être démarré avec le drapeau
profiledéfini surcisoucis-1.23selon la version de RKE2.
|
Ce guide suppose que RKE2 a été installé, mais n’est pas encore en cours d’exécution. Si vous avez déjà démarré RKE2, vous devrez interrompre le service RKE2. |
Exigences au niveau de l’hôte
Il existe trois domaines d’exigences au niveau de l’hôte : les paramètres du kernel, la protection des valeurs par défaut du kubelet et la configuration du processus/répertoire etcd. Ceci est décrit dans cette section.
Paramètres du kernel
La référence CIS nécessite la configuration de certains paramètres spécifiques du noyau Linux. Lorsque RKE2 est installé, il crée un fichier de configuration sysctl pour définir les paramètres requis de manière appropriée. Cependant, il ne configure pas automatiquement l’hôte pour utiliser cette configuration. Vous devez le faire manuellement. L’emplacement du fichier de configuration dépend de la méthode d’installation utilisée.
Si RKE2 a été installé via RPM, YUM ou DNF (la méthode par défaut sur les systèmes d’exploitation utilisant des RPM, comme CentOS), exécutez les commandes suivantes :
sudo cp -f /usr/share/rke2/rke2-cis-sysctl.conf /etc/sysctl.d/60-rke2-cis.conf
sudo systemctl restart systemd-sysctl
Si RKE2 a été installé via l’archive tar (la méthode par défaut sur les systèmes d’exploitation qui n’utilisent pas de RPM, comme Ubuntu), exécutez les commandes suivantes :
sudo cp -f /usr/local/share/rke2/rke2-cis-sysctl.conf /etc/sysctl.d/60-rke2-cis.conf
sudo systemctl restart systemd-sysctl
Si votre système manque du répertoire systemd-sysctl.service et/ou du répertoire /etc/sysctl.d, vous voudrez vous assurer que les sysctls sont appliqués au démarrage en exécutant la commande suivante lors du démarrage :
sudo sysctl -p /usr/local/share/rke2/rke2-cis-sysctl.conf
Veuillez effectuer cette étape uniquement sur des installations fraîches, avant d’utiliser réellement RKE2 pour déployer Kubernetes. De nombreux composants Kubernetes, y compris les plugins CNI, configurent leurs propres sysctls. Redémarrer le service systemd-sysctl sur un cluster Kubernetes en cours d’exécution peut entraîner des effets secondaires inattendus.
Le paramètre Kubelet protect-kernel-defaults est défini sur true
C’est un drapeau kubelet qui fera quitter le kubelet si les paramètres du noyau requis ne sont pas définis ou sont définis sur des valeurs différentes des valeurs par défaut du kubelet.
RKE2 définira automatiquement le drapeau sur true lorsque le drapeau profile est défini.
|
|
RKE2 vérifiera également les mêmes paramètres du noyau que le kubelet et abandonnera avec une erreur en suivant les mêmes règles que le kubelet. Cela est fait par commodité pour aider l’opérateur à identifier plus rapidement et facilement quels paramètres du noyau violent les valeurs par défaut du kubelet.
etcd est configuré correctement
Le CIS Benchmark exige que le répertoire de données etcd soit possédé par l’utilisateur et le groupe etcd. Cela nécessite implicitement que le processus etcd s’exécute en tant qu’utilisateur etcd au niveau de l’hôte. Pour y parvenir, RKE2 prend plusieurs mesures lorsqu’il est démarré avec un profil cis ou cis-1.XX valide :
-
Vérifiez que l’utilisateur et le groupe
etcdexistent sur l’hôte. S’ils n’existent pas, abandonnez avec une erreur. -
Créez le répertoire de données d’etcd avec
etcdcomme propriétaire utilisateur et groupe. -
Assurez-vous que le processus etcd est exécuté en tant qu’utilisateur et groupe
etcden configurant correctement leSecurityContextdu pod statique etcd.
Sur certaines distributions Linux, la commande useradd ne créera pas de groupe. Le drapeau -U est inclus ci-dessous pour tenir compte de cela. Ce drapeau indique à useradd de créer un groupe portant le même nom que l’utilisateur.
sudo useradd -r -c "etcd user" -s /sbin/nologin -M etcd -U
|
L’utilisateur et le groupe |
Configuration RKE2
-
v1.29 et versions ultérieures
-
v1.25 - v1.28
-
v1.24 et versions antérieures
profile: "cis"
# For cis-1.11 only, not needed on cis-1.9/cis-1.10
kube-apiserver-arg:
- 'service-account-extend-token-expiration=false'
Configuration CIS générique
profile: "cis"
L’utilisation du profil générique cis garantira que le cluster passe le benchmark CIS (rke2-cis-1.XX-profile-hardened) associé à la version de Kubernetes que RKE2 exécute. Par exemple, RKE2 v1.26.XX avec le profile: cis passera le rke2-cis-1.8-profile-hardened dans Rancher.
L’utilisation du profil générique cis garantit que les mises à jour de RKE2 ne nécessitent pas de modification de la configuration existante. Tous les changements nécessaires pour passer le benchmark CIS applicable seront appliqués automatiquement.
Une correspondance approximative des versions RKE2 aux versions de benchmark CIS est la suivante :
Versions mineures de RKE2 |
Benchmark CIS applicable |
Drapeau de profil |
1.27-1.28 |
1.9 |
|
1.26 |
1.8 |
|
1.25 |
1.7 |
|
1.24 |
1.24 |
|
1.23 |
1.23 |
|
1.19-1.22 |
1.6 |
|
profile: "cis-1.23"
Le fichier de configuration doit être nommé config.yaml et placé dans /etc/rancher/rke2. Le répertoire doit être créé avant d’installer RKE2.
Lorsque le drapeau profile est activé, il fait ce qui suit :
-
v1.25 et versions ultérieures
-
v1.24 et versions antérieures
-
Vérifie que les exigences au niveau de l’hôte ont été satisfaites. Si ce n’est pas le cas, RKE2 se terminera avec une erreur fatale décrivant les exigences non satisfaites.
-
Configure le pod statique etcd pour s’exécuter en tant qu’utilisateur et groupe etcd, comme expliqué dans le guide de renforcement de la sécurité etcd.
-
Applique des politiques réseau qui permettent au cluster de passer les contrôles associés.
-
Applique des permissions de fichier plus restrictives (600 contre 644) aux manifestes d’agent et à d’autres fichiers de configuration.
-
Configure le contrôleur d’admission de sécurité des pods pour appliquer le mode restreint dans tous les espaces de noms, à l’exception des espaces de noms
kube-system,cis-operator-systemettigera-operator. Ces espaces de noms sont exemptés pour permettre aux pods système de s’exécuter sans restrictions, ce qui est nécessaire pour le bon fonctionnement du cluster. Pour plus d’informations sur la configuration du PSA, voir les configurations par défaut de l’admission de sécurité des pods. Pour plus d’informations sur les normes de sécurité des pods, veuillez vous référer à la documentation officielle.
-
Vérifie que les exigences au niveau de l’hôte ont été satisfaites. Si ce n’est pas le cas, RKE2 se terminera avec une erreur fatale décrivant les exigences non satisfaites.
-
Applique des politiques réseau qui permettent au cluster de passer les contrôles associés.
-
Configure des politiques de sécurité des pods d’exécution qui permettent au cluster de passer les contrôles associés.
Exigences d’exécution de Kubernetes
Les exigences d’exécution pour passer le CIS Benchmark sont centrées sur la sécurité des pods et les politiques réseau. La plupart de cela est automatiquement géré par RKE2 lors de l’utilisation d’un profil cis-1.XX valide, mais une intervention supplémentaire de l’opérateur est requise.
Sécurité des Pods
RKE2 fonctionne toujours avec un certain niveau de sécurité des pods.
-
v1.25 et versions ultérieures
-
v1.24 et versions antérieures
Sur v1.25 et versions ultérieures, Admission de Sécurité des Pods (PSA) sont utilisés pour la sécurité des pods. Un fichier de configuration par défaut pour l’Admission de Sécurité des Pods sera ajouté au cluster au démarrage comme suit :
Avec le profil cis/cis-1.23 :
-
RKE2 appliquera une norme de sécurité des pods restreinte via un fichier de configuration qui imposera le mode
restricteddans tout le cluster, à l’exception des espaces de nomskube-system,cis-operator-systemettigera-operatorpour garantir le bon fonctionnement des pods système.
Sans le profil cis/cis-1.23 :
-
RKE2 appliquera une norme de sécurité des pods non restreinte via un fichier de configuration qui imposera le mode
privilegeddans tout le cluster, ce qui permet un mode complètement non restreint pour tous les pods dans le cluster. Voir la page Politiques de Sécurité des Pods pour plus de détails.
Sur v1.24 et versions antérieures, le contrôleur d’admission PodSecurityPolicy est toujours activé. Une stratégie est appliquée en fonction du profil passé à RKE2.
Avec le cis-1.6 profil:
-
RKE2 mettra en place un ensemble de stratégies beaucoup plus restrictives. Ces stratégies répondent aux exigences décrites dans la section 5.2 du CIS Benchmark.
Sans le profil cis-1.6 :
-
RKE2 mettra en place une stratégie non restreinte qui permet à Kubernetes de fonctionner comme si le contrôleur d’admission
PodSecurityPolicyn’était pas activé. Voir la page Politiques de Sécurité des Pods pour plus de détails.
|
Les composants du plan de contrôle Kubernetes et les ajouts critiques tels que CNI, DNS et Ingress sont exécutés en tant que pods dans l’espace de noms |
Politiques Réseau
Lorsqu’il est exécuté avec un profil valide "cis-1.XX", RKE2 mettra en place NetworkPolicies qui respecte le CIS Benchmark pour les espaces de noms intégrés de Kubernetes. Ces espaces de noms sont : kube-system, kube-public et default.
Le NetworkPolicy utilisé ne permettra qu’aux pods du même espace de noms de communiquer entre eux. Il y a quelques exceptions notables à cela, car cela permet de résoudre les requêtes DNS.
-
Les requêtes DNS sont autorisées à atteindre le serveur DNS
-
Les requêtes HTTP/s sont autorisées à atteindre le service ingress-nginx
-
Les requêtes HTTPs sont autorisées à atteindre le metrics-server
-
Les requêtes vers le webhook ingress-nginx sur le pod spécifié par le pod ingress-nginx (normalement 8443)
-
Les requêtes HTTPs vers le rke2-snapshot-validation-webhook
|
Intervention de l’opérateur requise
Les opérateurs doivent gérer les stratégies réseau normalement pour les espaces de noms supplémentaires qui sont créés. |
Configurer le compte de service default
|
Définir |
Kubernetes fournit un compte de service default qui est utilisé par les charges de travail du cluster lorsque aucun compte de service spécifique n’est assigné au pod. Lorsque l’accès à l’API Kubernetes depuis un pod est requis, un compte de service spécifique doit être créé pour ce pod, et des droits doivent être accordés à ce compte de service. Le compte de service default doit être configuré de manière à ne pas fournir de token et à ne pas avoir d’attributions de droits explicites.
Pour chaque espace de noms incluant default et kube-system sur une installation RKE2 standard, le compte de service default doit inclure cette valeur :
automountServiceAccountToken: false
RKE2 définira automatiquement la valeur correctement pour les espaces de noms kube-system, cis-operator-system, kube-node-lease et tigera-operator.
|
Intervention de l’opérateur requise
Pour les espaces de noms créés par l’opérateur de cluster, le script et le fichier de configuration suivants peuvent être utilisés pour configurer le compte de service La configuration ci-dessous doit être enregistrée dans un fichier appelé
Créer un fichier de script bash appelé
Exécutez ce script pour appliquer la configuration |
Configuration de l’audit du serveur API
Les exigences CIS 1.2.22 à 1.2.25 sont liées à la configuration des journaux d’audit pour le serveur API. Lorsque RKE2 est démarré avec le drapeau profile activé, il configurera automatiquement les paramètres --audit-log- renforcés dans le serveur API pour passer ces vérifications CIS.
La politique d’audit par défaut de RKE2 est configurée pour ne pas enregistrer les requêtes dans le serveur API. Cela est fait pour permettre aux opérateurs de cluster de personnaliser une politique d’audit qui répond à leurs exigences et besoins d’audit, car ceux-ci sont spécifiques à l’environnement et aux politiques de chaque utilisateur.
Une politique d’audit par défaut est créée par RKE2 lorsqu’il est démarré avec le drapeau profile activé. La politique est définie dans /etc/rancher/rke2/audit-policy.yaml.
apiVersion: audit.k8s.io/v1
kind: Policy
metadata:
creationTimestamp: null
rules:
- level: None
|
Intervention de l’opérateur requise
Pour commencer à enregistrer les requêtes vers le serveur API, au moins le paramètre Après avoir adapté la politique d’audit, RKE2 doit être redémarré pour charger la nouvelle configuration.
|
Les journaux d’audit du serveur API seront écrits dans /var/lib/rancher/rke2/server/logs/audit.log.
Problèmes connus
Les contrôles suivants sont ceux que RKE2 par défaut ne passent actuellement pas. Chaque lacune sera expliquée et comment elle est traitée.
Contrôle 1.1.12
Assurez-vous que la propriété du répertoire de données etcd est définie sur etcd:etcd.
Utilisation
etcd est un magasin de valeurs-clés hautement disponible utilisé par les déploiements Kubernetes pour le stockage persistant de tous ses objets API REST. Ce répertoire de données doit être protégé contre toute lecture ou écriture non autorisée. Il doit être la propriété de etcd:etcd.
Correction
Cela peut être remédié en créant un utilisateur et un groupe etcd comme décrit ci-dessus.
Contrôle 5.1.5
Assurez-vous que les comptes de service par défaut ne sont pas utilisés activement.
Utilisation
Kubernetes fournit un compte de service default qui est utilisé par les charges de travail du cluster lorsque aucun compte de service spécifique n’est assigné au pod.
Lorsque l’accès à l’API Kubernetes depuis un pod est requis, un compte de service spécifique doit être créé pour ce pod, et des droits doivent être accordés à ce compte de service.
Le compte de service default doit être configuré de manière à ne pas fournir de token de compte de service et ne doit avoir aucune attribution de droits explicite.
Cela peut être remédié en mettant à jour le champ automountServiceAccountToken à false pour le compte de service default dans chaque espace de noms.