Benchmarks CIS

Cette page présente le benchmark CIS de Kubernetes, fournit une évaluation et explique ce que fait Google Distributed Cloud Connected pour répondre aux recommandations.

Benchmark 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.

Versions

Le tableau suivant répertorie les versions de Distributed Cloud connected, de Kubernetes et du benchmark CIS de Kubernetes qui ont été utilisées pour effectuer l'évaluation décrite dans ce document :

Version de Distributed Cloud connecté Version de Kubernetes Version du benchmark CIS de Kubernetes
1.4.0 – Plan de contrôle local 1.25 1,70

Accéder au benchmark

Le benchmark CIS de Kubernetes est disponible sur le site Web du CIS.

Niveaux de recommandation

Dans le benchmark CIS de Kubernetes :

Niveau Description
Niveau 1

Les recommandations visent à :

  • être pratiques et prudentes ;
  • fournir un avantage clair en matière de sécurité ;
  • ne pas entraver l'utilité de la technologie au-delà du raisonnable.
  • Niveau 2

    Étend le profil du niveau 1.

    Les recommandations présentent une ou plusieurs des caractéristiques suivantes :

  • Elles sont destinés aux environnements ou aux cas d'utilisation où la sécurité est primordiale.
  • Elles servent de mesures de défense en profondeur.
  • Elles peuvent entraver l'utilité ou les performances de la technologie.
  • É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. Ils sont déterminés et pris en charge comme défini ci-dessous :

    Notation Description
    Automatiques Représente les recommandations pour lesquelles l'évaluation d'un contrôle technique peut être entièrement automatisée et validée par un état de réussite/échec. Les recommandations comprennent les informations nécessaires à la mise en œuvre de l'automatisation.
    Manuel Représente les recommandations pour lesquelles l'évaluation d'un contrôle technique ne peut pas être entièrement automatisée et nécessite une exécution manuelle de certaines étapes ou de toutes les étapes permettant de valider que l'état configuré est défini comme attendu. L'état attendu peut varier en fonction de l'environnement.

    État des clusters de plan de contrôle local connectés à Distributed Cloud

    # 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 644 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 644 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 644 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 644 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 644 ou sur une option plus restrictive (Manuelle). L1 Contrôle équivalent
    1.1.10 Assurez-vous que la propriété du fichier de la Container Network Interface est définie sur root:root (Manuelle). L1 Réussite
    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 Contrôle équivalent
    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 Contrôle équivalent
    1.1.13 Assurez-vous que les autorisations du fichier admin.conf sont définies sur 600 ou sur une option plus restrictive (Automatisée). L1 Réussite
    1.1.14 Assurez-vous que la propriété du fichier admin.conf 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 644 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 Contrôle équivalent
    1.1.17 Assurez-vous que les autorisations du fichier controller-manager.conf sont définies sur 644 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 Contrôle équivalent
    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 Contrôle équivalent
    1.1.20 Assurez-vous que les autorisations du fichier de certificat PKI de Kubernetes sont définies sur 644 ou sur une option plus restrictive (Manuelle). L1 Contrôle équivalent
    1.1.21 Assurez-vous que les autorisations du fichier de clé PKI de Kubernetes sont définies sur 600 (Manuelle). L1 Réussite
    1.2 Serveur d'API
    1.2.1 Assurez-vous que l'argument --anonymous-auth est défini sur "false" (Manuelle). L1 Réussite
    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 n'est pas défini (Automatisé) L1 Échec
    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 Échec
    1.2.9 Assurez-vous que le plug-in de contrôle d'admission "EventRateLimit" est défini (Manuelle). L1 Réussite
    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 Échec
    1.2.12 Assurez-vous que le plug-in de contrôle d'admission "SecurityContextDeny" est défini si "PodSecurityPolicy" n'est pas utilisé (Manuelle). L1 Avertir
    1.2.13 Assurez-vous que le plug-in de contrôle d'admission "ServiceAccount" est défini (Automatisée). L1 Réussite
    1.2.14 Assurez-vous que le plug-in de contrôle d'admission "NamespaceLifecycle" est défini (Automatisée). L1 Réussite
    1.2.15 Assurez-vous que le plug-in de contrôle d'admission "NodeRestriction" est défini (Automatisée). L1 Réussite
    1.2.16 Assurez-vous que l'argument --secure-port n'est pas défini sur 0 (Automatisée). L1 Réussite
    1.2.17 Assurez-vous que l'argument --profiling est défini sur "false" (Automatisée). L1 Réussite
    1.2.18 Assurez-vous que l'argument --audit-log-path est défini (Automatisée). L1 Échec
    1.2.19 Assurez-vous que l'argument --audit-log-maxage est défini sur 30 ou de la manière appropriée (Automatisée). L1 Échec
    1.2.20 Assurez-vous que l'argument --audit-log-maxbackup est défini sur 10 ou de la manière appropriée (Automatisée). L1 Échec
    1.2.21 Assurez-vous que l'argument --audit-log-maxsize est défini sur 100 ou de la manière appropriée (Automatisée). L1 Échec
    1.2.22 Assurez-vous que l'argument --request-timeout est défini de la manière appropriée (Manuelle). L1 Échec
    1.2.23 Assurez-vous que l'argument --service-account-lookup est défini sur "true" (Automatisée). L1 Réussite
    1.2.24 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.25 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.26 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.27 Assurez-vous que l'argument --client-ca-file est défini de la manière appropriée (Automatisée). L1 Réussite
    1.2.28 Assurez-vous que l'argument --etcd-cafile est défini de la manière appropriée (Automatisée). L1 Réussite
    1.2.29 Assurez-vous que l'argument --encryption-provider-config est défini de la manière appropriée (Manuelle). L1 Réussite
    1.2.30 Assurez-vous que les fournisseurs de services de chiffrement sont configurés de la manière appropriée (Manuelle). L1 Réussite
    1.2.31 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 l'argument --profiling 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 Réussite
    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 Réussite
    2 ** Configuration des nœuds etcd**
    2.1 Assurez-vous que les arguments --cert-file et --key-file sont définis de la manière appropriée (Automatisée). L1 Réussite
    2.2 Assurez-vous que l'argument --client-cert-auth est défini sur "true" (Automatisée). L1 Réussite
    2,3 Assurez-vous que l'argument --auto-tls n'est pas défini sur "true" (Automatisée). L1 Réussite
    2.4 Assurez-vous que les arguments --peer-cert-file et --peer-key-file sont définis de la manière appropriée (Automatisée). L1 Réussite
    2.5 Assurez-vous que l'argument --peer-client-cert-auth est défini sur "true" (Automatisée). L1 Réussite
    2.6 Assurez-vous que l'argument --peer-auto-tls n'est pas défini sur "true" (Automatisée). L1 Réussite
    2.7 Assurez-vous qu'une autorité de certification unique est utilisée pour etcd (Manuelle). 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 (Manuelle). L2 Réussite
    3.2 Logging
    3.2.1 Assurez-vous qu'une stratégie d'audit minimale est créée (Manuelle). L1 Réussite
    3.2.2 Assurez-vous que la stratégie d'audit couvre les principaux problèmes de sécurité (Manuelle). L2 Échec
    4 Configuration de la sécurité des nœuds de calcul
    4.1 Fichiers de configuration du nœud de calcul
    4.1.1 Assurez-vous que les autorisations du fichier du service kubelet sont définies sur 644 ou sur une option plus restrictive (Automatisée). L1 Échec
    4.1.2 Assurez-vous que la propriété du fichier du service kubelet est définie sur root:root (Automatisée). L1 Réussite
    4.1.3 Si le fichier kubeconfig du proxy existe, assurez-vous que les autorisations sont définies sur 644 ou sur une option plus restrictive (Manuelle). L1 Réussite
    4.1.4 Si le fichier kubeconfig du proxy existe, assurez-vous que la définition du propriétaire est définie sur root:root (Manuelle). L1 Réussite
    4.1.5 Assurez-vous que les autorisations du fichier --kubeconfig kubelet.conf sont définies sur 644 ou sur une option plus restrictive (Automatisée). L1 Réussite
    4.1.6 Assurez-vous que la propriété du fichier --kubeconfig kubelet.conf est définie sur root:root (Automatisée). L1 Réussite
    4.1.7 Assurez-vous que les autorisations du fichier des autorités de certification sont définies sur 644 ou sur une option plus restrictive (Manuelle). L1 Échec
    4.1.8 Assurez-vous que la propriété du fichier des autorités de certification du client est définie sur root:root (Manuelle). L1 Réussite
    4.1.9 Assurez-vous que les autorisations du fichier de configuration --config du service kubelet sont définies sur 644 ou sur une option plus restrictive (Automatisée). L1 Échec
    4.1.10 Assurez-vous que la propriété du fichier de configuration --config du service kubelet est définie sur root:root (Automatisée). L1 Réussite
    4.2 Kubelet
    4.2.1 Assurez-vous que l'argument --anonymous-auth est défini sur "false" (Automatisée). L1 Réussite
    4.2.2 Assurez-vous que l'argument --authorization-mode n'est pas défini sur "AlwaysAllow" (Automatisée). L1 Réussite
    4.2.3 Assurez-vous que l'argument --client-ca-file est défini de la manière appropriée (Automatisée). L1 Réussite
    4.2.4 Assurez-vous que l'argument --read-only-port est défini sur 0 (Manuelle). L1 Échec
    4.2.5 Assurez-vous que l'argument --streaming-connection-idle-timeout n'est pas défini sur 0 (Manuelle). L1 Réussite
    4.2.6 Assurez-vous que l'argument --protect-kernel-defaults est défini sur "true" (Automatisée). L1 Réussite
    4.2.7 Assurez-vous que l'argument --make-iptables-util-chains est défini sur "true" (Automatisée). L1 Réussite
    4.2.8 Assurez-vous que l'argument --hostname-override n'est pas défini (Manuelle). L2 Réussite
    4.2.9 Assurez-vous que l'argument --event-qps est défini sur 0 ou un niveau garantissant une capture d'événement appropriée (Manuelle). L1 Contrôle équivalent
    4.2.10 Assurez-vous que les arguments --tls-cert-file et --tls-private-key-file sont définis de la manière appropriée (Manuelle). L1 Réussite
    4.2.11 Assurez-vous que l'argument --rotate-certificates n'est pas défini sur "false" (Manuelle). L1 Réussite
    4.2.12 Vérifiez que l'argument "RotateKubeletServerCertificate" est défini sur "true" (Manuelle). L1 Réussite
    4.2.13 Assurez-vous que le kubelet n'utilise que des algorithmes de chiffrement sécurisés (Manuelle). L1 Échec

    Défaillances et contrôles équivalents pour les clusters de plan de contrôle local Distributed Cloud Connected

    # Recommandation Level État Value Justification
    1 Configuration de la sécurité du plan de contrôle
    1.1.9 Assurez-vous que les autorisations du fichier de la Container Network Interface sont définies sur 644 ou sur une option plus restrictive (Manuelle). L1 Contrôle équivalent 755 Aucune.
    1.1.11 Assurez-vous que les autorisations du répertoire de données etcd sont définies sur 700 ou sur une option plus restrictive (Automatisée). L1 Contrôle équivalent 755 Le répertoire de données etcd dispose des autorisations 755 par défaut, mais ses sous-répertoires utilisent 700.
    1.1.12 Assurez-vous que la propriété du répertoire de données etcd est définie sur etcd:etcd (Automatisée). L1 Contrôle équivalent 2003:2003 Le répertoire de données etcd, /var/lib/etcd, est détenu par 2003:2003 en raison d'un plan de contrôle sans racine afin de renforcer la sécurité.
    1.1.16 Assurez-vous que la propriété du fichier scheduler.conf est définie sur root:root (Automatisée). L1 Contrôle équivalent 2002:2002 scheduler.conf appartient à 2002:2002 en raison du plan de contrôle sans racine pour une sécurité renforcée.
    1.1.18 Assurez-vous que la propriété du fichier controller-manager.conf est définie sur root:root (Automatisée). L1 Contrôle équivalent 2001:2001 controller-manager.conf appartient à 2001:2001 en raison du plan de contrôle sans racine pour une sécurité renforcée.
    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 Contrôle équivalent Variable Le répertoire PKI, /etc/kubernetes/pki, appartient à root:root. Les fichiers qu'il contient ont différents propriétaires. Cela est dû au plan de contrôle sans racine qui permet de renforcer la sécurité.
    1.1.20 Assurez-vous que les autorisations du fichier de certificat PKI de Kubernetes sont définies sur 644 ou sur une option plus restrictive (Manuelle). L1 Contrôle équivalent 644 Cela est dû au plan de contrôle sans racine qui permet de renforcer la sécurité.
    1.2 Serveur d'API
    1.2.3 Assurez-vous que le paramètre --DenyServiceExternalIPs n'est pas défini (Automatisé) L1 Échec
    1.2.9 Assurez-vous que l'argument --authorization-mode inclut "RBAC" (Automatisée). L1 Échec Le contrôleur d'admission Event Rate Limit est une fonctionnalité alpha de Kubernetes. Google Distributed Cloud n'est pas compatible avec les fonctionnalités non disponibles en disponibilité générale.
    1.2.11 Assurez-vous que le plug-in de contrôle d'admission AlwaysAdmit n'est pas défini (Automatisée). L1 Échec
    1.2.12 Assurez-vous que le plug-in de contrôle d'admission AlwaysPullImages est défini (Manuelle). L1 Échec Le contrôleur d'admission AlwaysPullImages fournit une protection pour les images de registre privé dans des clusters mutualisés non coopératifs, et pour ce faire, il fait en sorte que les registres de conteneurs soient un point de défaillance unique pour la création des pods sur l'ensemble du cluster. Les clusters Distributed Cloud n'activent pas le contrôleur d'admission AlwaysPullImages. Ce sont donc les administrateurs du cluster qui décident de la mise en œuvre de la règle d'admission.
    1.2.18 Assurez-vous que l'argument --audit-log-path est défini (Automatisée). L1 Échec Distributed Cloud capture les journaux d'audit, mais n'utilise pas cet indicateur pour les audits. Pour en savoir plus, consultez Journalisation d'audit.
    1.2.19 Assurez-vous que l'argument --audit-log-maxage est défini sur 30 ou de la manière appropriée (Automatisée). L1 Échec Distributed Cloud capture les journaux d'audit, mais n'utilise pas cet indicateur pour les audits. Pour en savoir plus, consultez Journalisation d'audit.
    1.2.20 Assurez-vous que l'argument --audit-log-maxbackup est défini sur 10 ou de la manière appropriée (Automatisée). L1 Échec Distributed Cloud Connected capture les journaux d'audit, mais n'utilise pas cet indicateur pour les audits. Pour en savoir plus, consultez Journalisation d'audit.
    1.2.21 Assurez-vous que l'argument --audit-log-maxsize est défini sur 100 ou de la manière appropriée (Automatisée). L1 Échec Distributed Cloud Connected capture les journaux d'audit, mais n'utilise pas cet indicateur pour les audits. Pour en savoir plus, consultez Journalisation d'audit.
    1.2.22 Assurez-vous que l'argument --request-timeout est défini de la manière appropriée (Manuelle). L1 Échec Distributed Cloud Connected capture les journaux d'audit, mais n'utilise pas cet indicateur pour les audits. Pour en savoir plus, consultez Journalisation d'audit.
    3 Configuration du plan de contrôle
    3.2.2 Assurez-vous que la stratégie d'audit couvre les principaux problèmes de sécurité (Manuelle). L2 Échec
    4 Configuration de la sécurité des nœuds de calcul
    4.1.1 Assurez-vous que les autorisations du fichier du service kubelet sont définies sur 644 ou sur une option plus restrictive (Automatisée). L1 Échec 755
    4.1.7 Assurez-vous que les autorisations du fichier des autorités de certification sont définies sur 644 ou sur une option plus restrictive (Manuelle). L1 Échec
    4.1.9 Assurez-vous que les autorisations du fichier de configuration --config du service kubelet sont définies sur 644 ou sur une option plus restrictive (Automatisée). L1 Échec 644
    4.2.4 Assurez-vous que l'argument --read-only-port est défini sur 0 (Manuelle). L1 Échec Les clusters Distributed Cloud connectés définissent l'argument --read-only-port sur 10255 pour collecter les métriques kubelet.
    4.2.9 Assurez-vous que l'argument --event-qps est défini sur 0 ou un niveau garantissant une capture d'événement appropriée (Manuelle). L1 Contrôle équivalent Les clusters Distributed Cloud gèrent le protocole TLS du serveur kubelet à l'aide de l'indicateur –rotate-server-certificates.
    4.2.13 Assurez-vous que le kubelet n'utilise que des algorithmes de chiffrement sécurisés (Manuelle). L1 Échec