Ce document présente le benchmark CIS de Kubernetes, explique comment auditer votre conformité avec le benchmark et décrit ce que Google Distributed Cloud (GDC) air-gapped configure lorsque vous ne pouvez pas mettre en œuvre vous-même une recommandation.
À propos des benchmarks CIS
Le Center for Internet Security (CIS) publie des benchmarks sur les bonnes pratiques de sécurité. Le benchmark CIS de Kubernetes fournit un ensemble de recommandations pour configurer Kubernetes afin de garantir une sécurité élevée. Le benchmark est lié à une version spécifique de Kubernetes. Le benchmark CIS de Kubernetes est écrit pour la distribution en Open Source de Kubernetes. Il est destiné à être appliqué de manière aussi universelle que possible entre les différentes distributions.
Accéder au benchmark
Le benchmark CIS de Kubernetes est disponible sur le site Web du CIS.
Niveaux de recommandation
Le tableau suivant décrit les niveaux de recommandation dans le benchmark CIS de Kubernetes.
| Level | Description |
|---|---|
| Niveau 1 | Les recommandations présentent une ou plusieurs des caractéristiques suivantes : |
| Niveau 2 | Étend le profil du niveau 1. Les recommandations présentent une ou plusieurs des caractéristiques suivantes : |
État d'évaluation
Un état d'évaluation est inclus pour chaque recommandation. L'état d'évaluation indique si la recommandation concernée peut être automatisée ou si elle nécessite une mise en œuvre manuelle. Les deux états sont tout aussi importants l'un que l'autre et sont déterminés et acceptés comme défini dans les tableaux suivants.
Versions
L'évaluation fait référence aux versions suivantes :
| Version de GDC sur bare metal | Version de Kubernetes | Version du benchmark CIS de Kubernetes |
|---|---|---|
| 1,30 | 1.30.9 | v0.10.4 |
État du cluster Kubernetes GDC air-gapped
| # | Recommandation | Level | État |
|---|---|---|---|
| 1 | Configuration de la sécurité du plan de contrôle | ||
| 1.1 | Fichiers de configuration de nœud du plan de contrôle | ||
| 1.1.1 | Assurez-vous que les autorisations du fichier de spécification du pod du serveur d'API sont définies sur 600 ou sur une option plus restrictive (Automatisée). |
L1 | Réussite |
| 1.1.2 | Assurez-vous que la propriété du fichier de spécification du pod du serveur d'API est définie sur root:root (Automatisée). |
L1 | Réussite |
| 1.1.3 | Assurez-vous que les autorisations du fichier de spécification du pod du gestionnaire de contrôleurs sont définies sur 600 ou sur une option plus restrictive (Automatisée). |
L1 | Réussite |
| 1.1.4 | Assurez-vous que la propriété du fichier de spécification du pod du gestionnaire de contrôleurs est définie sur root:root (Automatisée). |
L1 | Réussite |
| 1.1.5 | Assurez-vous que les autorisations du fichier de spécification du pod du programmeur sont définies sur 600 ou sur une option plus restrictive (Automatisée). |
L1 | Réussite |
| 1.1.6 | Assurez-vous que la propriété du fichier de spécification du pod du programmeur est définie sur root:root (Automatisée). |
L1 | Réussite |
| 1.1.7 | Assurez-vous que les autorisations du fichier de spécification du pod d'etcd sont définies sur 600 ou sur une option plus restrictive (Automatisée). |
L1 | Réussite |
| 1.1.8 | Assurez-vous que la propriété du fichier de spécification du pod d'etcd est définie sur root:root (Automatisée). |
L1 | Réussite |
| 1.1.9 | Assurez-vous que les autorisations du fichier de la Container Network Interface sont définies sur 600 ou sur une option plus restrictive (Manuelle). |
L1 | Avertissement |
| 1.1.10 | Assurez-vous que la propriété du fichier de la Container Network Interface est définie sur root:root (Manuelle). |
L1 | Avertissement |
| 1.1.11 | Assurez-vous que les autorisations du répertoire de données d'etcd sont définies sur 700 ou sur une option plus restrictive (Automatisée). |
L1 | Réussite |
| 1.1.12 | Assurez-vous que la propriété du répertoire de données d'etcd est définie sur etcd:etcd (Automatisée). |
L1 | Échec |
| 1.1.13 | Assurez-vous que les autorisations du fichier d'identifiants administratifs par défaut sont définies sur 600 (Automatisée). |
L1 | Réussite |
| 1.1.14 | Assurez-vous que la propriété du fichier d'identifiants administratifs par défaut est définie sur root:root (Automatisée). |
L1 | Réussite |
| 1.1.15 | Assurez-vous que les autorisations du fichier scheduler.conf sont définies sur 600 ou sur une option plus restrictive (Automatisée). |
L1 | Réussite |
| 1.1.16 | Assurez-vous que la propriété du fichier scheduler.conf est définie sur root:root (Automatisée). |
L1 | Échec |
| 1.1.17 | Assurez-vous que les autorisations du fichier controller-manager.conf sont définies sur 600 ou sur une option plus restrictive (Automatisée). |
L1 | Réussite |
| 1.1.18 | Assurez-vous que la propriété du fichier controller-manager.conf est définie sur root:root (Automatisée). |
L1 | Échec |
| 1.1.19 | Assurez-vous que la propriété du fichier et du répertoire PKI de Kubernetes est définie sur root:root (Automatisée). |
L1 | Échec |
| 1.1.20 | Assurez-vous que les autorisations du fichier de certificat PKI de Kubernetes sont définies sur 600 ou sur une option plus restrictive (Manuelle). |
L1 | Avertissement |
| 1.1.21 | Assurez-vous que les autorisations du fichier de clé PKI de Kubernetes sont définies sur 600 (Manuelle). |
L1 | Avertissement |
| 1.2 | Serveur d'API | ||
| 1.2.1 | Assurez-vous que l'argument --anonymous-auth est défini sur false (Manuelle). |
L1 | Avertir |
| 1.2.2 | Assurez-vous que le paramètre --token-auth-file n'est pas défini (Automatisée). |
L1 | Réussite |
| 1.2.3 | Assurez-vous que le paramètre --DenyServiceExternalIPs est défini (Manuelle). |
L1 | Avertissement |
| 1.2.4 | Assurez-vous que les arguments --kubelet-client-certificate et --kubelet-client-key sont définis de la manière appropriée (Automatisée). |
L1 | Réussite |
| 1.2.5 | Assurez-vous que l'argument --kubelet-certificate-authority est défini de la manière appropriée (Automatisée). |
L1 | Réussite |
| 1.2.6 | Assurez-vous que l'argument --authorization-mode n'est pas défini sur "AlwaysAllow" (Automatisée). |
L1 | Réussite |
| 1.2.7 | Assurez-vous que l'argument --authorization-mode inclut "Node" (Automatisée). |
L1 | Réussite |
| 1.2.8 | Assurez-vous que l'argument --authorization-mode inclut "RBAC" (Automatisée). |
L1 | Réussite |
| 1.2.9 | Assurez-vous que le plug-in de contrôle d'admission EventRateLimit est défini (Manuelle). |
L1 | Avertissement |
| 1.2.10 | Assurez-vous que le plug-in de contrôle d'admission AlwaysAdmit n'est pas défini (Automatisée). |
L1 | Réussite |
| 1.2.11 | Assurez-vous que le plug-in de contrôle d'admission AlwaysPullImages est défini (Manuelle). |
L1 | Avertissement |
| 1.2.12 | Assurez-vous que le plug-in de contrôle d'admission ServiceAccount est défini (Automatisée). |
L1 | Réussite |
| 1.2.13 | Assurez-vous que le plug-in de contrôle d'admission NamespaceLifecycle est défini (Automatisée). |
L1 | Réussite |
| 1.2.14 | Assurez-vous que le plug-in de contrôle d'admission NodeRestriction est défini (Automatisée). |
L1 | Réussite |
| 1.2.15 | Assurez-vous que l'argument --profiling est défini sur false (Automatisée). |
L1 | Réussite |
| 1.2.16 | Assurez-vous que l'argument --audit-log-path est défini (Automatisée). |
L1 | Réussite |
| 1.2.17 | Assurez-vous que l'argument --audit-log-maxage est défini sur 30 ou de la manière appropriée (Automatisée). |
L1 | Réussite |
| 1.2.18 | Assurez-vous que l'argument --audit-log-maxbackup est défini sur 10 ou de la manière appropriée (Automatisée). |
L1 | Réussite |
| 1.2.19 | Assurez-vous que l'argument --audit-log-maxsize est défini sur 100 ou de la manière appropriée (Automatisée). |
L1 | Réussite |
| 1.2.20 | Assurez-vous que l'argument --request-timeout est défini de la manière appropriée (Manuelle). |
L1 | Avertissement |
| 1.2.21 | Assurez-vous que l'argument --service-account-lookup est défini sur true (Automatisée). |
L1 | Réussite |
| 1.2.22 | Assurez-vous que l'argument --service-account-key-file est défini de la manière appropriée (Automatisée). |
L1 | Réussite |
| 1.2.23 | Assurez-vous que les arguments --etcd-certfile et --etcd-keyfile sont définis de la manière appropriée (Automatisée). |
L1 | Réussite |
| 1.2.24 | Assurez-vous que les arguments --tls-cert-file et --tls-private-key-file sont définis de la manière appropriée (Automatisée). |
L1 | Réussite |
| 1.2.25 | Assurez-vous que l'argument --client-ca-file est défini de la manière appropriée (Automatisée). |
L1 | Réussite |
| 1.2.26 | Assurez-vous que l'argument --etcd-cafile est défini de la manière appropriée (Automatisée). |
L1 | Réussite |
| 1.2.27 | Assurez-vous que l'argument --encryption-provider-config est défini de la manière appropriée (Manuelle). |
L1 | Réussite |
| 1.2.28 | Assurez-vous que les fournisseurs de services de chiffrement sont configurés de la manière appropriée (Manuelle). | L1 | Réussite |
| 1.2.29 | Assurez-vous que le serveur d'API utilise uniquement des algorithmes de chiffrement sécurisés (Manuelle). | L1 | Réussite |
| 1.3 | Gestionnaire de contrôleurs | ||
| 1.3.1 | Assurez-vous que l'argument --terminated-pod-gc-threshold est défini de la manière appropriée (Manuelle). |
L1 | Réussite |
| 1.3.2 | Assurez-vous que le paramètre --profiling argument est défini sur false (Automatisée). |
L1 | Réussite |
| 1.3.3 | Assurez-vous que l'argument --use-service-account-credentials est défini sur true (Automatisée). |
L1 | Réussite |
| 1.3.4 | Assurez-vous que l'argument --service-account-private-key-file est défini de la manière appropriée (Automatisée). |
L1 | Réussite |
| 1.3.5 | Assurez-vous que l'argument --root-ca-file est défini de la manière appropriée (Automatisée). |
L1 | Réussite |
| 1.3.6 | Assurez-vous que l'argument RotateKubeletServerCertificate est défini sur true (Automatisée). |
L2 | Réussite |
| 1.3.7 | Assurez-vous que l'argument --bind-address est défini sur 127.0.0.1 (Automatisée). |
L1 | Échec |
| 1.4 | Scheduler | ||
| 1.4.1 | Assurez-vous que l'argument --profiling est défini sur false (Automatisée). |
L1 | Réussite |
| 1.4.2 | Assurez-vous que l'argument --bind-address est défini sur 127.0.0.1 (Automatisée). |
L1 | Échec |
Benchmarks d'audit
Des instructions spécifiques pour l'audit de chaque recommandation sont disponibles dans le benchmark CIS approprié. Toutefois, vous souhaiterez peut-être automatiser certaines de ces vérifications afin de simplifier le contrôle de ces commandes dans votre environnement. L'outil suivant peut vous y aider.
Audit automatisé du benchmark CIS de Kubernetes
Vous pouvez utiliser un outil Open Source kube-bench pour tester la configuration de votre cluster vis-à-vis du benchmark CIS de Kubernetes.
Assurez-vous de spécifier la version appropriée, par exemple :
kube-bench --benchmark BENCHMARK_VERSION
Remplacez BENCHMARK_VERSION par la version du benchmark CIS de Kubernetes que vous utilisez pour évaluer votre cluster.
Pour exécuter des sections spécifiques du benchmark CIS, telles que "master", "node" ou "etcd", utilisez la commande run --targets. Exemple :
kube-bench run --targets master,node
Pour en savoir plus, consultez la documentation kube-bench sur l'exécution de kube-bench et les commandes et indicateurs.