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.8.0 Kubernetes CIS V1.27 sur AKS. Les résultats s’appliquent aux versions 1.21.x à 1.27.x d’AKS.
Les recommandations noté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 non notées.
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 | Échec |
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 | Contrôle équivalent |
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 | Réussite |
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 | Dépend de l’environnement |
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.1.2 | L’authentification par jeton de compte de service ne doit pas être utilisée pour les utilisateurs | Non notées | L2 | Réussite |
3.1.3 | L’authentification par jeton de démarrage 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.1.7 | Éviter d’utiliser le groupe system:masters | Non notées | L1 | Dépend de l’environnement |
5.1.8 | Limiter l’utilisation des autorisations Bind, Impersonate et Escalate dans le cluster Kubernetes | Non notées | L1 | Dépend de l’environnement |
5.1.9 | Réduire au maximum l’accès à la création de volumes persistants | Non notées | L1 | Dépend de l’environnement |
5.1.10 | Réduire au maximum l’accès à la sous-ressource proxy des nœuds | Non notées | L1 | Dépend de l’environnement |
5.1.11 | Réduire au maximum l’accès à la sous-ressource d’approbation des objets certificatesigningrequests | Non notées | L1 | Dépend de l’environnement |
5.1.12 | Réduire au maximum l’accès aux objets de configuration de webhook | Non notées | 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 | Non notées | L1 | Dépend de l’environnement |
5.2 | Stratégies de sécurité des pods | |||
5.2.1 | Vérifier que le cluster dispose au moins d’un mécanisme de contrôle de stratégie actif en place | Non notées | L1 | Dépend de l’environnement |
5.2.2 | Réduire au maximum l’admission des conteneurs privilégiés | Non 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 de l’ID de processus 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 IPC hôte | Notées | 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 | Notées | L1 | Dépend de l’environnement |
5.2.6 | 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 | L1 | Dépend de l’environnement |
5.2.10 | Réduire au maximum l’admission des conteneurs avec des fonctionnalités affectées | Non notées | L2 | |
5.2.11 | Réduire au maximum l’admission des conteneurs HostProcess Windows | Non notées | L1 | Dépend de l’environnement |
5.2.12 | Réduire au maximum l’admission des volumes HostPath | Non notées | L1 | Dépend de l’environnement |
5.2.13 | Réduire au maximum l’admission des conteneurs qui utilisent HostPorts | Non notées | 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 | 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 | Échec |
5.7 | Stratégies générales | |||
5.7.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.7.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.7.3 | Appliquer le contexte de sécurité à vos pods et conteneurs | Non notées | L2 | Dépend de l’environnement |
5.7.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 :