Partage via


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.9.0 Kubernetes CIS V1.27 sur AKS. Les résultats s’appliquent aux versions 1.27.x à 1.29.x d’AKS.

Niveaux de sécurité

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.

Statut de l’évaluation

Un état d’évaluation est inclus pour chaque recommandation. L’état de l’évaluation indique si la recommandation donnée peut être automatisée ou nécessite des étapes manuelles à implémenter. Les deux états sont tout aussi importants et sont déterminés et pris en charge comme indiqué ci-dessous :

  • Automatisée : représente des recommandations pour lesquelles l’évaluation d’un contrôle technique peut être entièrement automatisée et validée en état de réussite/échec. Les recommandations incluent les informations nécessaires pour mettre en œuvre l’automatisation.
  • Manuelle : représente des recommandations pour lesquelles l’évaluation d’un contrôle technique ne peut pas être entièrement automatisée et nécessite toutes ou certaines étapes manuelles pour vérifier que l’état configuré est défini comme prévu. L’état attendu peut varier en fonction de l’environnement.

Les recommandations automatisées affectent le score du point de référence si elles ne sont pas appliquées, ce qui n’est pas le cas des recommandations manuelles.

État de l'attestation

Les recommandations peuvent avoir l’un des statuts d’attestation 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 du fichier manifeste qui ne sont pas pertinentes pour 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 automatisé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.

Détails du point de référence

Identifiants CIS Description de la recommandation Statut de l’évaluation Niveau É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 Automatisé 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 Automatisé 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 Automatisé 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 Automatisé 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 Automatisé 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 Automatisé 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 Automatisé 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 Automatisé 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 Manuel 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 Manuel 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 Automatisé 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 Automatisé L1 N/A
1.1.13 Veiller à ce que les autorisations du fichier admin.conf soient définies sur 600 ou soient plus restrictives Automatisé L1 N/A
1.1.14 Veiller à ce que la propriété du fichier admin.conf soit définie sur root:root Automatisé L1 N/A
1.1.15 Veiller à ce que les autorisations du fichier scheduler.conf soient définies sur 600 ou soient plus restrictives Automatisé L1 N/A
1.1.16 Veiller à ce que la propriété du fichier scheduler.conf soit définie sur root:root Automatisé 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 Automatisé L1 N/A
1.1.18 Veiller à ce que la propriété du fichier controller-manager.conf soit définie sur root:root Automatisé 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 Automatisé 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 Manuel L1 N/A
1.1.21 Veiller à ce que les autorisations du fichier de clés PKI Kubernetes soient définies sur 600 Manuel L1 N/A
1.2 Serveur d’API
1.2.1 Veiller à ce que l’argument --anonymous-auth soit défini sur false Manuel L1 Réussite
1.2.2 Veiller à ce que le paramètre --token-auth-file ne soit pas défini Automatisé L1 Échec
1.2.3 Veiller à ce que --DenyServiceExternalIPs ne soit pas défini Manuel L1 Échec
1.2.4 Veiller à ce que les arguments --kubelet-client-certificate et --kubelet-client-key soient définis comme il convient Automatisé L1 Réussite
1.2.5 Veiller à ce que l’argument --kubelet-certificate-authority soit défini comme il convient Automatisé L1 Échec
1.2.6 Veiller à ce que l’argument --authorization-mode ne soit pas défini sur AlwaysAllow Automatisé L1 Réussite
1.2.7 Veiller à ce que l’argument --authorization-mode inclue Node Automatisé L1 Réussite
1.2.8 Veiller à ce que l’argument --authorization-mode inclue RBAC Automatisé L1 Réussite
1.2.9 Veiller à ce que le plug-in de contrôle d’admission EventRateLimit soit défini Manuel L1 Échec
1.2.10 Veiller à ce que le plug-in de contrôle d’admission AlwaysAdmit ne soit pas défini Automatisé L1 Réussite
1.2.11 Veiller à ce que le plug-in de contrôle d’admission AlwaysPullImages soit défini Manuel L1 Échec
1.2.12 Veiller à ce que le plug-in de contrôle d’admission ServiceAccount soit défini Automatisé L2 Échec
1.2.13 Veiller à ce que le plug-in de contrôle d’admission NamespaceLifecycle soit défini Automatisé L2 Réussite
1.2.14 Veiller à ce que le plug-in de contrôle d’admission NodeRestriction soit défini Automatisé L2 Réussite
1.2.15 Veiller à ce que l’argument --profiling soit défini sur false Automatisé L1 Réussite
1.2.16 Veiller à ce que l’argument --audit-log-path soit défini Automatisé L1 Réussite
1.2.17 Veiller à ce que l’argument --audit-log-maxage soit défini sur 30 ou comme il convient Automatisé L1 Contrôle équivalent
1.2.18 Veiller à ce que l’argument --audit-log-maxbackup soit défini sur 10 ou comme il convient Automatisé L1 Contrôle équivalent
1.2.19 Veiller à ce que l’argument --audit-log-maxsize soit défini sur 100 ou comme il convient Automatisé L1 Réussite
1.2.20 Veiller à ce que l’argument --request-timeout soit défini comme il convient Manuel L1 Réussite
1.2.21 Veiller à ce que l’argument --service-account-lookup soit défini sur true Automatisé L1 Réussite
1.2.22 Veiller à ce que l’argument --service-account-key-file soit défini comme il convient Automatisé L1 Réussite
1.2.23 Veiller à ce que les arguments --etcd-certfile et --etcd-keyfile soient définis comme il convient Automatisé L1 Réussite
1.2.24 Veiller à ce que les arguments --tls-cert-file et --tls-private-key-file soient définis comme il convient Automatisé L1 Réussite
1.2.25 Veiller à ce que l’argument --client-ca-file soit défini comme il convient Automatisé L1 Réussite
1.2.26 Veiller à ce que l’argument --etcd-cafile soit défini comme il convient Automatisé L1 Réussite
1.2.27 Veiller à ce que l’argument --encryption-provider-config soit défini comme il convient Manuel L1 Dépend de l’environnement
1.2.28 Veiller à ce que les fournisseurs de chiffrement soient correctement configurés Manuel L1 Dépend de l’environnement
1.2.29 Veiller à ce que le serveur d’API utilise uniquement des chiffrements forts Manuel 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 Manuel L1 Réussite
1.3.2 Veiller à ce que l’argument --profiling soit défini sur false Automatisé L1 Réussite
1.3.3 Veiller à ce que l’argument --use-service-account-credentials soit défini sur true Automatisé L1 Réussite
1.3.4 Veiller à ce que l’argument --service-account-private-key-file soit défini comme il convient Automatisé L1 Réussite
1.3.5 Veiller à ce que l’argument --root-ca-file soit défini comme il convient Automatisé L1 Réussite
1.3.6 Veiller à ce que l’argument RotateKubeletServerCertificate soit défini sur true Automatisé L2 Réussite
1.3.7 Veiller à ce que l’argument --bind-address soit défini sur 127.0.0.1 Automatisé L1 Contrôle équivalent
1.4 Scheduler
1.4.1 Veiller à ce que l’argument --profiling soit défini sur false Automatisé L1 Réussite
1.4.2 Veiller à ce que l’argument --bind-address soit défini sur 127.0.0.1 Automatisé L1 Contrôle équivalent
2 etcd
2.1 Veiller à ce que les arguments --cert-file et --key-file soient définis comme il convient Automatisé L1 Réussite
2,2 Veiller à ce que l’argument --client-cert-auth soit défini sur true Automatisé L1 Réussite
2.3 Veiller à ce que l’argument --auto-tls ne soit pas défini sur true Automatisé L1 Réussite
2.4 Veiller à ce que les arguments --peer-cert-file et --peer-key-file soient définis comme il convient Automatisé L1 Réussite
2.5 Veiller à ce que l’argument --peer-client-cert-auth soit défini sur true Automatisé L1 Réussite
2.6 Veiller à ce que l’argument --peer-auto-tls ne soit pas défini sur true Automatisé L1 Réussite
2.7 Veiller à ce qu’une autorité de certification unique soit utilisée pour etcd Manuel 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 Manuel L1 Réussite
3.1.2 L’authentification par jeton de compte de service ne doit pas être utilisée pour les utilisateurs Manuel L1 Réussite
3.1.3 L’authentification par jeton de démarrage ne doit pas être utilisée pour les utilisateurs Manuel L1 Réussite
3.2 Journalisation
3.2.1 Veiller à ce qu’une stratégie d’audit minimale soit créée Manuel L1 Réussite
3.2.2 Veiller à ce que la stratégie d’audit couvre les problèmes de sécurité clés Manuel 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 Automatisé L1 Réussite
4.1.2 Veiller à ce que la propriété du fichier de service kubelet soit définie sur root:root Automatisé 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 Manuel 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 Manuel 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 Automatisé L1 Réussite
4.1.6 Veiller à ce que la propriété du fichier kubelet.conf --kubeconfig soit définie sur root:root Automatisé 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 Manuel 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 Manuel 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 Automatisé 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 Automatisé L1 Réussite
4,2 Kubelet
4.2.1 Veiller à ce que l’argument --anonymous-auth soit défini sur false Automatisé L1 Réussite
4.2.2 Veiller à ce que l’argument --authorization-mode ne soit pas défini sur AlwaysAllow Automatisé L1 Réussite
4.2.3 Veiller à ce que l’argument --client-ca-file soit défini comme il convient Automatisé L1 Réussite
4.2.4 Veiller à ce que l’argument --read-only-port soit défini sur 0 Manuel L1 Réussite
4.2.5 Veiller à ce que l’argument --streaming-connection-idle-timeout ne soit pas défini sur 0 Manuel L1 Réussite
4.2.6 Veiller à ce que l’argument --make-iptables-util-chains soit défini sur true Automatisé L1 Réussite
4.2.7 Veiller à ce que l’argument --hostname-override ne soit pas défini Manuel L1 Réussite
4.2.8 Veiller à ce que l’argument --eventRecordQPS soit défini sur 0 ou à un niveau qui garantit la capture d’événements appropriée Manuel L2 Réussite
4.2.9 Veiller à ce que les arguments --tls-cert-file et --tls-private-key-file soient définis comme il convient Manuel L1 Réussite
4.2.10 Veiller à ce que l’argument --rotate-certificates ne soit pas défini sur false Automatisé L1 Réussite
4.2.11 Vérifiez que l’argument RotateKubeletServerCertificate soit défini sur true Manuel L1 Échec
4.2.12 Veiller à ce que Kubelet utilise uniquement des chiffrements forts Manuel L1 Réussite
4.2.13 Vérifiez qu’une limite est définie sur les PID de pod Manuel L1 Réussite
4.3 kube-proxy
4.3.1 Vérifiez que le service de métriques kube-proxy est lié à localhost Automatisé 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 Automatisé L1 Dépend de l’environnement
5.1.2 Réduire au maximum l’accès aux secrets Automatisé 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 Automatisé L1 Dépend de l’environnement
5.1.4 Réduire au maximum l’accès pour créer des pods Automatisé 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 Automatisé 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 Automatisé L1 Dépend de l’environnement
5.1.7 Éviter d’utiliser le groupe system:masters Manuel L1 Dépend de l’environnement
5.1.8 Limiter l’utilisation des autorisations Bind, Impersonate et Escalate dans le cluster Kubernetes Manuel L1 Dépend de l’environnement
5.1.9 Réduire au maximum l’accès à la création de volumes persistants Manuel L1 Dépend de l’environnement
5.1.10 Réduire au maximum l’accès à la sous-ressource proxy des nœuds Manuel L1 Dépend de l’environnement
5.1.11 Réduire au maximum l’accès à la sous-ressource d’approbation des objets certificatesigningrequests Manuel L1 Dépend de l’environnement
5.1.12 Réduire au maximum l’accès aux objets de configuration de webhook Manuel L1 Dépend de l’environnement
5.1.13 Réduire au maximum l’accès à la création de jetons de compte de service Manuel L1 Dépend de l’environnement
5.2 Normes de sécurité de pod
5.2.1 Vérifier que le cluster dispose au moins d’un mécanisme de contrôle de stratégie actif en place Manuel L1 Dépend de l’environnement
5.2.2 Réduire au maximum l’admission des conteneurs privilégiés Manuel L1 Dépend de l’environnement
5.2.3 Réduire au maximum l’admission des conteneurs souhaitant partager l’espace de noms de l’ID de processus hôte Manuel L1 Dépend de l’environnement
5.2.4 Réduire au maximum l’admission des conteneurs souhaitant partager l’espace de noms IPC hôte Manuel L1 Dépend de l’environnement
5.2.5 Réduire au maximum l’admission des conteneurs souhaitant partager l’espace de noms de réseau hôte Manuel L1 Dépend de l’environnement
5.2.6 Réduire au maximum l’admission des conteneurs avec allowPrivilegeEscalation Manuel L1 Dépend de l’environnement
5.2.7 Réduire au maximum l’admission des conteneurs racine Manuel L2 Dépend de l’environnement
5.2.8 Réduire au maximum l’admission des conteneurs avec la fonctionnalité NET_RAW Manuel L1 Dépend de l’environnement
5.2.9 Réduire au maximum l’admission des conteneurs avec des fonctionnalités ajoutées Manuel L1 Dépend de l’environnement
5.2.10 Réduire au maximum l’admission des conteneurs avec des fonctionnalités affectées Manuel L2 Dépend de l’environnement
5.2.11 Réduire au maximum l’admission des conteneurs HostProcess Windows Manuel L1 Dépend de l’environnement
5.2.12 Réduire au maximum l’admission des volumes HostPath Manuel L1 Dépend de l’environnement
5.2.13 Réduire au maximum l’admission des conteneurs qui utilisent HostPorts Manuel L1 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 Manuel L1 Réussite
5.3.2 Veiller à ce que des stratégies réseau soient définies pour tous les espaces de noms Manuel 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 Manuel L2 Dépend de l’environnement
5.4.2 Envisager un stockage externe des secrets Manuel 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 Manuel L2 Échec
5.6 Stratégies générales
5.6.1 Créer des limites administratives entre les ressources à l’aide d’espaces de noms Manuel 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 Manuel L2 Dépend de l’environnement
5.6.3 Appliquer le contexte de sécurité à vos pods et conteneurs Manuel L2 Dépend de l’environnement
5.6.4 L’espace de noms par défaut ne doit pas être utilisé Manuel 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 sont désactivés dans le système d’exploitation.

Étapes suivantes

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