Point de référence Kubernetes CIS (Center for Internet Security)

En tant que service sécurisé, Azure Kubernetes Service (AKS) est conforme aux normes SOC, ISO, PCI DSS et HIPAA. Cet article couvre le renforcement de la sécurité appliqué à AKS en fonction du point de référence Kubernetes CIS. Pour plus d’informations sur la sécurité AKS, consultez Concepts de sécurité pour les applications et les clusters dans AKS (Azure Kubernetes Service). Pour plus d’informations sur le point de référence CIS, consultez Points de référence CIS (Center for Internet Security).

Point de référence Kubernetes CIS

Voici les résultats des recommandations du point de référence v1.0.0 Kubernetes CIS V1.24 sur AKS. Elles s’appliquent aux versions 1.21.x à 1.24.x d’à AKS.

Les recommandations notées affectent le score de point de référence si elles ne sont pas appliquées, alors que les recommandations non notées ne le font pas.

Les points de référence CIS fournissent deux niveaux de paramètres de sécurité :

  • L1, ou niveau 1, recommande des exigences de sécurité de base essentielles qui peuvent être configurées sur n’importe quel système et qui doivent entraîner peu ou pas d’interruption de service ni de réduction de fonctionnalités.
  • L2, ou niveau 2, recommande des paramètres de sécurité pour les environnements nécessitant une plus grande sécurité pouvant entraîner une réduction de fonctionnalités.

Les recommandations peuvent avoir l’un des statuts suivants :

  • Réussite – La recommandation a été appliquée.
  • Échec – La recommandation n’a pas été appliquée.
  • N/A – La recommandation concerne les exigences d’autorisation de fichier manifeste qui ne correspondent pas à AKS. Par défaut, les clusters Kubernetes utilisent un modèle de manifeste pour déployer les pods du plan de contrôle, qui reposent sur les fichiers de la machine virtuelle du nœud. Le point de référence Kubernetes CIS recommande que ces fichiers disposent de certaines exigences d’autorisation. Les clusters AKS utilisent un graphique Helm pour déployer les pods du plan de contrôle et ne reposent pas sur les fichiers figurant sur la machine virtuelle du nœud.
  • Dépend de l’environnement – La recommandation est appliquée dans l’environnement spécifique de l’utilisateur et n’est pas contrôlée par AKS. Les recommandations notées affectent le score du point de référence, que la recommandation s’applique ou non à l’environnement spécifique de l’utilisateur.
  • Contrôle équivalent – La recommandation a été implémentée de manière équivalente et différente.
Identifiants CIS Description de la recommandation Type de score Level État
1 Composants du plan de contrôle
1.1 Fichiers de configuration du nœud de plan de contrôle
1.1.1 Veiller à ce que les autorisations du fichier de spécification du pod de serveur d’API soient définies sur 600 ou soient plus restrictives Notées L1 N/A
1.1.2 Veiller à ce que la propriété du fichier de spécification du pod de serveur d’API soit définie sur root:root Notées L1 N/A
1.1.3 Veiller à ce que les autorisations du fichier de spécification du pod de gestionnaire de contrôleurs soient définies sur 600 ou soient plus restrictives Notées L1 N/A
1.1.4 Veiller à ce que la propriété du fichier de spécification du pod de gestionnaire de contrôleurs soit définie sur root:root Notées L1 N/A
1.1.5 Veiller à ce que les autorisations du fichier de spécification du pod de planificateur soient définies sur 600 ou soient plus restrictives Notées L1 N/A
1.1.6 Veiller à ce que la propriété du fichier de spécification du pod de planificateur soit définie sur root:root Notées L1 N/A
1.1.7 Veiller à ce que les autorisations du fichier de spécification du pod etcd soient définies sur 600 ou soient plus restrictives Notées L1 N/A
1.1.8 Veiller à ce que la propriété du fichier de spécification du pod etcd soit définie sur root:root Notées L1 N/A
1.1.9 Veiller à ce que les autorisations du fichier d’interface réseau du conteneur soient définies sur 600 ou soient plus restrictives Non notées L1 N/A
1.1.10 Veiller à ce que la propriété du fichier de l’interface réseau du conteneur soit définie sur root:root Non notées L1 N/A
1.1.11 Veiller à ce que les autorisations du répertoire de données etcd soient définies sur 700 ou plus restrictives Notées L1 N/A
1.1.12 Veiller à ce que la propriété du répertoire de données etcd soit définie sur etcd:etcd Notées L1 N/A
1.1.13 Veiller à ce que les autorisations du fichier admin.conf soient définies sur 600 ou soient plus restrictives Notées L1 N/A
1.1.14 Veiller à ce que la propriété du fichier admin.conf soit définie sur root:root Notées L1 N/A
1.1.15 Veiller à ce que les autorisations du fichier scheduler.conf soient définies sur 600 ou soient plus restrictives Notées L1 N/A
1.1.16 Veiller à ce que la propriété du fichier scheduler.conf soit définie sur root:root Notées L1 N/A
1.1.17 Veiller à ce que les autorisations du fichier controller-manager.conf soient définies sur 600 ou soient plus restrictives Notées L1 N/A
1.1.18 Veiller à ce que la propriété du fichier controller-manager.conf soit définie sur root:root Notées L1 N/A
1.1.19 Veiller à ce que la propriété du fichier et du répertoire PKI Kubernetes soit définie sur root:root Notées L1 N/A
1.1.20 Veiller à ce que les autorisations du fichier de certificat PKI Kubernetes soient définies sur 600 ou soient plus restrictives Notées L1 N/A
1.1.21 Veiller à ce que les autorisations du fichier de clés PKI Kubernetes soient définies sur 600 Notées L1 N/A
1.2 Serveur d’API
1.2.1 Veiller à ce que l’argument --anonymous-auth soit défini sur false Non notées L1 Réussite
1.2.2 Veiller à ce que le paramètre --token-auth-file ne soit pas défini Notées L1 Échec
1.2.3 Veiller à ce que --DenyServiceExternalIPs ne soit pas défini Notées L1 Réussite
1.2.4 Veiller à ce que les arguments --kubelet-client-certificate et --kubelet-client-key soient définis comme il convient Notées L1 Réussite
1.2.5 Veiller à ce que l’argument --kubelet-certificate-authority soit défini comme il convient Notées L1 Échec
1.2.6 Veiller à ce que l’argument --authorization-mode ne soit pas défini sur AlwaysAllow Notées L1 Réussite
1.2.7 Veiller à ce que l’argument --authorization-mode inclue Node Notées L1 Réussite
1.2.8 Veiller à ce que l’argument --authorization-mode inclue RBAC Notées L1 Réussite
1.2.9 Veiller à ce que le plug-in de contrôle d’admission EventRateLimit soit défini Non notées L1 Échec
1.2.10 Veiller à ce que le plug-in de contrôle d’admission AlwaysAdmit ne soit pas défini Notées L1 Réussite
1.2.11 Veiller à ce que le plug-in de contrôle d’admission AlwaysPullImages soit défini Non notées L1 Échec
1.2.12 Veiller à ce que le plug-in de contrôle d’admission SecurityContextDeny soit défini si PodSecurityPolicy n’est pas utilisé Non notées L1 Échec
1.2.13 Veiller à ce que le plug-in de contrôle d’admission ServiceAccount soit défini Notées L1 Réussite
1.2.14 Veiller à ce que le plug-in de contrôle d’admission NamespaceLifecycle soit défini Notées L1 Réussite
1.2.15 Veiller à ce que le plug-in de contrôle d’admission NodeRestriction soit défini Notées L1 Réussite
1.2.16 Veiller à ce que l’argument --secure-port ne soit pas défini sur 0 Notées L1 Réussite
1.2.17 Veiller à ce que l’argument --profiling soit défini sur false Notées L1 Réussite
1.2.18 Veiller à ce que l’argument --audit-log-path soit défini Notées L1 Réussite
1.2.19 Veiller à ce que l’argument --audit-log-maxage soit défini sur 30 ou comme il convient Notées L1 Contrôle équivalent
1.2.20 Veiller à ce que l’argument --audit-log-maxbackup soit défini sur 10 ou comme il convient Notées L1 Contrôle équivalent
1.2.21 Veiller à ce que l’argument --audit-log-maxsize soit défini sur 100 ou comme il convient Notées L1 Réussite
1.2.22 Veiller à ce que l’argument --request-timeout soit défini comme il convient Notées L1 Réussite
1.2.23 Veiller à ce que l’argument --service-account-lookup soit défini sur true Notées L1 Réussite
1.2.24 Veiller à ce que l’argument --service-account-key-file soit défini comme il convient Notées L1 Réussite
1.2.25 Veiller à ce que les arguments --etcd-certfile et --etcd-keyfile soient définis comme il convient Notées L1 Réussite
1.2.26 Veiller à ce que les arguments --tls-cert-file et --tls-private-key-file soient définis comme il convient Notées L1 Réussite
1.2.27 Veiller à ce que l’argument --client-ca-file soit défini comme il convient Notées L1 Réussite
1.2.28 Veiller à ce que l’argument --etcd-cafile soit défini comme il convient Notées L1 Réussite
1.2.29 Veiller à ce que l’argument --encryption-provider-config soit défini comme il convient Notées L1 Dépend de l’environnement
1.2.30 Veiller à ce que les fournisseurs de chiffrement soient correctement configurés Notées L1 Dépend de l’environnement
1.2.31 Veiller à ce que le serveur d’API utilise uniquement des chiffrements forts Non notées L1 Réussite
1.3 Gestionnaire de contrôleurs
1.3.1 Veiller à ce que l’argument --terminated-pod-gc-threshold soit défini comme il convient Notées L1 Réussite
1.3.2 Veiller à ce que l’argument --profiling soit défini sur false Notées L1 Réussite
1.3.3 Veiller à ce que l’argument --use-service-account-credentials soit défini sur true Notées L1 Réussite
1.3.4 Veiller à ce que l’argument --service-account-private-key-file soit défini comme il convient Notées L1 Réussite
1.3.5 Veiller à ce que l’argument --root-ca-file soit défini comme il convient Notées L1 Réussite
1.3.6 Veiller à ce que l’argument RotateKubeletServerCertificate soit défini sur true Notées L2 Échec
1.3.7 Veiller à ce que l’argument --bind-address soit défini sur 127.0.0.1 Notées L1 Contrôle équivalent
1.4 Scheduler
1.4.1 Veiller à ce que l’argument --profiling soit défini sur false Notées L1 Réussite
1.4.2 Veiller à ce que l’argument --bind-address soit défini sur 127.0.0.1 Notées L1 Contrôle équivalent
2 etcd
2.1 Veiller à ce que les arguments --cert-file et --key-file soient définis comme il convient Notées L1 Réussite
2,2 Veiller à ce que l’argument --client-cert-auth soit défini sur true Notées L1 Réussite
2.3 Veiller à ce que l’argument --auto-tls ne soit pas défini sur true Notées L1 Réussite
2.4 Veiller à ce que les arguments --peer-cert-file et --peer-key-file soient définis comme il convient Notées L1 Réussite
2.5 Veiller à ce que l’argument --peer-client-cert-auth soit défini sur true Notées L1 Réussite
2.6 Veiller à ce que l’argument --peer-auto-tls ne soit pas défini sur true Notées L1 Réussite
2.7 Veiller à ce qu’une autorité de certification unique soit utilisée pour etcd Non notées L2 Réussite
3 Configuration du plan de contrôle
3.1 Authentification et autorisation
3.1.1 L’authentification par certificat client ne doit pas être utilisée pour les utilisateurs Non notées L2 Réussite
3.2 Journalisation
3.2.1 Veiller à ce qu’une stratégie d’audit minimale soit créée Notées L1 Réussite
3.2.2 Veiller à ce que la stratégie d’audit couvre les problèmes de sécurité clés Non notées L2 Réussite
4 Nœuds de travail
4,1 Fichiers de configuration du nœud Worker
4.1.1 Veiller à ce que les autorisations du fichier de service kubelet soient définies sur 600 ou soient plus restrictives Notées L1 Réussite
4.1.2 Veiller à ce que la propriété du fichier de service kubelet soit définie sur root:root Notées L1 Réussite
4.1.3 S’il existe un fichier kubeconfig de proxy, veiller à ce que les autorisations soient définies sur 600 ou soient plus restrictives Notées L1 N/A
4.1.4 S’il existe un fichier kubeconfig de proxy, veiller à ce que la propriété soit définie sur root:root Notées L1 N/A
4.1.5 Veiller à ce que les autorisations du fichier kubelet.conf --kubeconfig soient définies sur 600 ou soient plus restrictives Notées L1 Réussite
4.1.6 Veiller à ce que la propriété du fichier kubelet.conf --kubeconfig soit définie sur root:root Notées L1 Réussite
4.1.7 Veiller à ce que les autorisations du fichier des autorités de certification soient définies sur 600 ou soient plus restrictives Notées L1 Réussite
4.1.8 Veiller à ce que la propriété du fichier des autorités de certification client soit définie sur root:root Notées L1 Réussite
4.1.9 Si le fichier de configuration kubelet config.yaml est utilisé, veiller à ce que les autorisations sont définies sur 600 ou soient plus restrictives Notées L1 Réussite
4.1.10 Si le fichier de configuration kubelet config.yaml est utilisé, veiller à ce que la propriété du fichier soit définie sur root:root Notées L1 Réussite
4,2 Kubelet
4.2.1 Veiller à ce que l’argument --anonymous-auth soit défini sur false Notées L1 Réussite
4.2.2 Veiller à ce que l’argument --authorization-mode ne soit pas défini sur AlwaysAllow Notées L1 Réussite
4.2.3 Veiller à ce que l’argument --client-ca-file soit défini comme il convient Notées L1 Réussite
4.2.4 Veiller à ce que l’argument --read-only-port soit défini sur 0 Notées L1 Réussite
4.2.5 Veiller à ce que l’argument --streaming-connection-idle-timeout ne soit pas défini sur 0 Notées L1 Réussite
4.2.6 Veiller à ce que l’argument --protect-kernel-defaults soit défini sur true Notées L1 Réussite
4.2.7 Veiller à ce que l’argument --make-iptables-util-chains soit défini sur true Notées L1 Réussite
4.2.8 Veiller à ce que l’argument --hostname-override ne soit pas défini Non notées L1 Réussite
4.2.9 Veiller à ce que l’argument eventRecordQPS soit défini sur un niveau qui garantit la capture d’événements appropriée Non notées L2 Réussite
4.2.10 Veiller à ce que les arguments --tls-cert-file et --tls-private-key-file soient définis comme il convient Notées L1 Réussite
4.2.11 Veiller à ce que l’argument --rotate-certificates ne soit pas défini sur false Notées L1 Réussite
4.2.12 Veiller à ce que l’argument RotateKubeletServerCertificate soit défini sur true Notées L1 Réussite
4.2.13 Veiller à ce que Kubelet utilise uniquement des chiffrements forts Non notées L1 Réussite
5 Stratégies
5.1 RBAC et comptes de service
5.1.1 Veiller à ce que le rôle d’administrateur de cluster soit utilisé uniquement lorsque cela est nécessaire Non notées L1 Dépend de l’environnement
5.1.2 Réduire au maximum l’accès aux secrets Non notées L1 Dépend de l’environnement
5.1.3 Réduire au maximum l’utilisation des caractères génériques dans les rôles et les ClusterRoles Non notées L1 Dépend de l’environnement
5.1.4 Réduire au maximum l’accès pour créer des pods Non notées L1 Dépend de l’environnement
5.1.5 Veiller à ce que les comptes de service par défaut ne soient pas utilisés activement Notées L1 Dépend de l’environnement
5.1.6 Veiller à ce que les jetons de compte de service soient montés uniquement lorsque cela est nécessaire Non notées L1 Dépend de l’environnement
5.2 Stratégies de sécurité des pods
5.2.1 Réduire au maximum l’admission des conteneurs privilégiés Non notées L1 Dépend de l’environnement
5.2.2 Réduire au maximum l’admission des conteneurs souhaitant partager l’espace de noms de l’ID de processus hôte Notées L1 Dépend de l’environnement
5.2.3 Réduire au maximum l’admission des conteneurs souhaitant partager l’espace de noms IPC hôte Notées L1 Dépend de l’environnement
5.2.4 Réduire au maximum l’admission des conteneurs souhaitant partager l’espace de noms de réseau hôte Notées L1 Dépend de l’environnement
5.2.5 Réduire au maximum l’admission des conteneurs avec allowPrivilegeEscalation Notées L1 Dépend de l’environnement
5.2.6 Réduire au maximum l’admission des conteneurs racine Non notées L2 Dépend de l’environnement
5.2.7 Réduire au maximum l’admission des conteneurs avec la fonctionnalité NET_RAW Non notées L1 Dépend de l’environnement
5.2.8 Réduire au maximum l’admission des conteneurs avec des fonctionnalités ajoutées Non notées L1 Dépend de l’environnement
5.2.9 Réduire au maximum l’admission des conteneurs avec des fonctionnalités affectées Non notées L2 Dépend de l’environnement
5.3 Stratégies réseau et CNI
5.3.1 Veiller à ce que le CNI en cours d’utilisation prenne en charge les stratégies réseau Non notées L1 Réussite
5.3.2 Veiller à ce que des stratégies réseau soient définies pour tous les espaces de noms Notées L2 Dépend de l’environnement
5.4 Gestion des secrets
5.4.1 Préférer l’utilisation de secrets comme fichiers aux secrets en tant que variables d’environnement Non notées L1 Dépend de l’environnement
5.4.2 Envisager un stockage externe des secrets Non notées L2 Dépend de l’environnement
5.5 Contrôle d’admission extensible
5.5.1 Configurer la provenance des images à l’aide du contrôleur d’admission ImagePolicyWebhook Non notées L2 Dépend de l’environnement
5.6 Stratégies générales
5.6.1 Créer des limites administratives entre les ressources à l’aide d’espaces de noms Non notées L1 Dépend de l’environnement
5.6.2 Veiller à ce que le profil seccomp soit défini sur docker/par défaut dans vos définitions de pod Non notées L2 Dépend de l’environnement
5.6.3 Appliquer le contexte de sécurité à vos pods et conteneurs Non notées L2 Dépend de l’environnement
5.6.4 L’espace de noms par défaut ne doit pas être utilisé Notées L2 Dépend de l’environnement

Notes

Outre le point de référence Kubernetes CIS, un point de référence AKS CIS est également disponible.

Remarques supplémentaires

  • Le système d’exploitation avec durcissement de la sécurité est conçu et géré spécifiquement pour AKS et n’est pas pris en charge en dehors de la plateforme AKS.
  • Pour réduire encore la surface d’attaque, certains pilotes de module de noyau inutiles ont été désactivés dans le système d’exploitation.

Étapes suivantes

Pour plus d’informations sur la sécurité AKS, consultez les articles suivants :