Benchmark CIS Kubernetes

Questo documento introduce il benchmark CIS Kubernetes, spiega come verificare la conformità al benchmark e cosa configura Google Distributed Cloud (GDC) air-gapped quando non puoi implementare autonomamente un consiglio.

Informazioni sui benchmark CIS

Il Center for Internet Security (CIS) pubblica benchmark per le best practice e consigli sulla sicurezza. Il benchmark CIS Kubernetes fornisce un insieme di consigli per configurare Kubernetes al fine di supportare una solida strategia di sicurezza. Il benchmark è legato a una specifica release di Kubernetes. Il benchmark CIS Kubernetes è scritto per la distribuzione Kubernetes open source e ha lo scopo di essere il più universalmente applicabile possibile alle distribuzioni.

Accedere al benchmark

Il benchmark CIS Kubernetes è disponibile sul sito web del CIS.

Livelli di raccomandazione

La tabella seguente descrive i livelli di consigli nel benchmark CIS Kubernetes.

Livello Descrizione
Livello 1

I consigli presentano una o più delle seguenti caratteristiche:

  • Sii pratico e prudente.
  • Fornisci un chiaro vantaggio in termini di sicurezza.
  • Non inibire l'utilità della tecnologia oltre i mezzi accettabili.
  • Livello 2

    Estende il profilo di livello 1.

    I consigli presentano una o più delle seguenti caratteristiche:

  • Applicali agli ambienti o ai casi d'uso in cui la sicurezza è fondamentale.
  • Funge da misura di difesa in profondità.
  • Potrebbe inibire negativamente l'utilità o le prestazioni della tecnologia.
  • Stato della valutazione

    Per ogni suggerimento è incluso uno stato della valutazione. Lo stato della valutazione indica se il consiglio fornito può essere automatizzato o richiede passaggi manuali per l'implementazione. Entrambi gli stati sono ugualmente importanti e vengono determinati e supportati come definito nelle tabelle seguenti.

    Versioni

    La valutazione si riferisce alle seguenti versioni:

    Versione GDC on bare metal Versione di Kubernetes Versione del benchmark CIS Kubernetes
    1,30 1.30.9 v0.10.4

    Stato del cluster Kubernetes air-gap GDC

    # Consiglio Livello Stato
    1 Configurazione della sicurezza del control plane
    1.1 File di configurazione del nodo del control plane
    1.1.1 Assicurati che le autorizzazioni del file di specifica del pod del server API siano impostate su 600 o su un valore più restrittivo (automatizzato) L1 Pass
    1.1.2 Assicurati che la proprietà del file di specifica del pod del server API sia impostata su root:root (automatico) L1 Pass
    1.1.3 Assicurati che le autorizzazioni del file di specifica del pod del controller manager siano impostate su 600 o su un valore più restrittivo (automatico) L1 Pass
    1.1.4 Assicurati che la proprietà del file di specifica del pod del controller manager sia impostata su root:root (automatica) L1 Pass
    1.1.5 Assicurati che le autorizzazioni del file di specifica del pod dello scheduler siano impostate su 600 o su un valore più restrittivo (automatico) L1 Pass
    1.1.6 Assicurati che la proprietà del file di specifica del pod dello scheduler sia impostata su root:root (automatica) L1 Pass
    1.1.7 Assicurati che le autorizzazioni del file di specifica del pod etcd siano impostate su 600 o su un valore più restrittivo (automatico) L1 Pass
    1.1.8 Assicurati che la proprietà del file di specifica del pod etcd sia impostata su root:root (automatica). L1 Pass
    1.1.9 Assicurati che le autorizzazioni del file Container Network Interface siano impostate su 600 o su un valore più restrittivo (manuale). L1 Avviso
    1.1.10 Assicurati che la proprietà del file Container Network Interface sia impostata su root:root (manuale) L1 Avviso
    1.1.11 Assicurati che le autorizzazioni della directory dei dati etcd siano impostate su 700 o su un valore più restrittivo (automatico) L1 Pass
    1.1.12 Assicurati che la proprietà della directory dei dati etcd sia impostata su etcd:etcd (automatico) L1 Fail
    1.1.13 Assicurati che le autorizzazioni predefinite del file delle credenziali amministrative siano impostate su 600 (automatico) L1 Pass
    1.1.14 Assicurati che la proprietà del file delle credenziali amministrative predefinite sia impostata su root:root (automatico) L1 Pass
    1.1.15 Assicurati che le autorizzazioni del file scheduler.conf siano impostate su 600 o su un valore più restrittivo (automatico) L1 Pass
    1.1.16 Assicurati che la proprietà del file scheduler.conf sia impostata su root:root (automatico) L1 Fail
    1.1.17 Assicurati che le autorizzazioni del file controller-manager.conf siano impostate su 600 o su un valore più restrittivo (automatico) L1 Pass
    1.1.18 Assicurati che la proprietà del file controller-manager.conf sia impostata su root:root (automatico) L1 Fail
    1.1.19 Assicurati che la proprietà della directory e dei file PKI di Kubernetes sia impostata su root:root (automatico) L1 Fail
    1.1.20 Assicurati che le autorizzazioni del file del certificato PKI di Kubernetes siano impostate su 600 o su un valore più restrittivo (manuale). L1 Avviso
    1.1.21 Assicurati che le autorizzazioni del file di chiavi PKI di Kubernetes siano impostate su 600 (manuale) L1 Avviso
    1.2 Server API
    1.2.1 Assicurati che l'argomento --anonymous-auth sia impostato su false (manuale) L1 Avviso
    1.2.2 Assicurati che il parametro --token-auth-file non sia impostato (automatico). L1 Pass
    1.2.3 Assicurati che --DenyServiceExternalIPs sia impostato (manuale) L1 Avviso
    1.2.4 Assicurati che gli argomenti --kubelet-client-certificate e --kubelet-client-key siano impostati in modo appropriato (automatico) L1 Pass
    1.2.5 Assicurati che l'argomento --kubelet-certificate-authority sia impostato in modo appropriato (automatico) L1 Pass
    1.2.6 Assicurati che l'argomento --authorization-mode non sia impostato su AlwaysAllow (automatico) L1 Pass
    1.2.7 Assicurati che l'argomento --authorization-mode includa Node (automatico) L1 Pass
    1.2.8 Assicurati che l'argomento --authorization-mode includa RBAC (automatico) L1 Pass
    1.2.9 Assicurati che il plug-in di controllo dell'ammissione EventRateLimit sia impostato su (Manuale) L1 Avviso
    1.2.10 Assicurati che il plug-in di controllo dell'ammissione AlwaysAdmit non sia impostato (automatico) L1 Pass
    1.2.11 Assicurati che il plug-in di controllo dell'ammissione AlwaysPullImages sia impostato su (Manuale) L1 Avviso
    1.2.12 Assicurati che il plug-in di controllo dell'ammissione ServiceAccount sia impostato (automatico) L1 Pass
    1.2.13 Assicurati che il plug-in di controllo dell'ammissione NamespaceLifecycle sia impostato (automatico) L1 Pass
    1.2.14 Assicurati che il plug-in di controllo dell'ammissione NodeRestriction sia impostato (automatico) L1 Pass
    1.2.15 Assicurati che l'argomento --profiling sia impostato su false (automatico) L1 Pass
    1.2.16 Assicurati che l'argomento --audit-log-path sia impostato (automatico) L1 Pass
    1.2.17 Assicurati che l'argomento --audit-log-maxage sia impostato su 30 o su un valore appropriato (Automated) L1 Pass
    1.2.18 Assicurati che l'argomento --audit-log-maxbackup sia impostato su 10 o su un valore appropriato (Automated) L1 Pass
    1.2.19 Assicurati che l'argomento --audit-log-maxsize sia impostato su 100 o su un valore appropriato (Automated) L1 Pass
    1.2.20 Assicurati che l'argomento --request-timeout sia impostato in modo appropriato (manuale) L1 Avviso
    1.2.21 Assicurati che l'argomento --service-account-lookup sia impostato su true (automatico) L1 Pass
    1.2.22 Assicurati che l'argomento --service-account-key-file sia impostato in modo appropriato (automatico) L1 Pass
    1.2.23 Assicurati che gli argomenti --etcd-certfile e --etcd-keyfile siano impostati in modo appropriato (automatico) L1 Pass
    1.2.24 Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati in modo appropriato (automatico) L1 Pass
    1.2.25 Assicurati che l'argomento --client-ca-file sia impostato in modo appropriato (automatico) L1 Pass
    1.2.26 Assicurati che l'argomento --etcd-cafile sia impostato in modo appropriato (automatico) L1 Pass
    1.2.27 Assicurati che l'argomento --encryption-provider-config sia impostato in modo appropriato (manuale) L1 Pass
    1.2.28 Assicurati che i fornitori di servizi di crittografia siano configurati correttamente (manuale) L1 Pass
    1.2.29 Assicurati che il server API utilizzi solo crittografie sicure (manuale) L1 Pass
    1.3 Controller Manager
    1.3.1 Assicurati che l'argomento --terminated-pod-gc-threshold sia impostato in modo appropriato (manuale) L1 Pass
    1.3.2 Assicurati che --profiling argument sia impostato su false (automatico). L1 Pass
    1.3.3 Assicurati che l'argomento --use-service-account-credentials sia impostato su true (automatico) L1 Pass
    1.3.4 Assicurati che l'argomento --service-account-private-key-file sia impostato in modo appropriato (automatico) L1 Pass
    1.3.5 Assicurati che l'argomento --root-ca-file sia impostato in modo appropriato (automatico) L1 Pass
    1.3.6 Assicurati che l'argomento RotateKubeletServerCertificate sia impostato su true (automatico) L2 Pass
    1.3.7 Assicurati che l'argomento --bind-address sia impostato su 127.0.0.1 (automatico) L1 Fail
    1.4 Pianificatore
    1.4.1 Assicurati che l'argomento --profiling sia impostato su false (automatico) L1 Pass
    1.4.2 Assicurati che l'argomento --bind-address sia impostato su 127.0.0.1 (automatico) L1 Fail

    Benchmark di controllo

    Istruzioni specifiche per il controllo di ogni suggerimento sono disponibili nella relativa benchmark CIS. Tuttavia, potresti voler automatizzare alcuni di questi controlli per semplificare la verifica di questi controlli nel tuo ambiente. Il seguente strumento può aiutarti.

    Controllo automatizzato del benchmark CIS Kubernetes

    Puoi utilizzare uno strumento open source kube-bench per testare la configurazione del cluster rispetto al benchmark CIS Kubernetes.

    Assicurati di specificare la versione appropriata. Ad esempio:

    kube-bench --benchmark BENCHMARK_VERSION
    

    Sostituisci BENCHMARK_VERSION con la versione del benchmark CIS Kubernetes che utilizzi per valutare il cluster.

    Per eseguire sezioni specifiche del benchmark CIS, ad esempio master, nodo o etcd, utilizza il comando run --targets. Ad esempio:

    kube-bench run --targets master,node
    

    Per ulteriori informazioni, consulta la documentazione di kube-bench su esecuzione di kube-bench e comandi e flag.