Benchmark CIS

Questo documento introduce il benchmark CIS per Kubernetes. Spiega inoltre:

  • Come verificare la conformità con il benchmark
  • Cosa configura GKE su Azure dove non puoi implementare autonomamente un suggerimento.

Utilizzo di CIS Benchmarks

Il Center for Internet Security (CIS) rilascia benchmark per suggerimenti di sicurezza basati sulle best practice. Il Benchmark per CIS per Kubernetes fornisce un insieme di suggerimenti per configurare Kubernetes al fine di supportare una solida strategia di sicurezza. Il benchmark è legato a una specifica release di Kubernetes. Il benchmark per Kubernetes CIS è scritto per la distribuzione Kubernetes open source ed è progettato per essere il più possibile applicabile a livello globale tra le distribuzioni.

Versioni

Tieni presente che i numeri di versione dei diversi benchmark potrebbero non coincidere.

Il presente documento si riferisce alle seguenti versioni:

Versione Anthos Versione di Kubernetes Versione CIS Benchmark Kubernetes
1.14.0 1.25.3 1,23

Benchmark CIS Kubernetes

Accesso al Benchmark

Il CIS Kubernetes Benchmark è disponibile sul sito web di CIS.

Livelli dei consigli

Nel CIS Kubernetes Benchmark esistono due livelli di suggerimenti.

Livello Descrizione
Livello 1

I suggerimenti intendono:

  • sia pratico e prudente;
  • fornire un chiaro vantaggio in termini di sicurezza; e
  • non inibire l'utilità della tecnologia al di là dei mezzi accettabili.
  • Livello 2

    Estende il profilo del livello 1.

    I consigli presentano una o più delle seguenti caratteristiche:

  • sono destinati ad ambienti o casi d'uso in cui la sicurezza è fondamentale;
  • funge da misura di difesa in profondità; o
  • potrebbero inibire negativamente l'utilità o le prestazioni della tecnologia.
  • Stato valutazione

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

    Punteggio Descrizione
    Automatico Rappresenta i suggerimenti per i quali la valutazione di un controllo tecnico può essere completamente automatizzata e convalidata fino a uno stato Superato/Non superato. I suggerimenti includeranno le informazioni necessarie per implementare l'automazione.
    Manuale Rappresenta suggerimenti per i quali la valutazione di un controllo tecnico non può essere completamente automatizzata e richiede tutti o alcuni passaggi manuali per convalidare che lo stato configurato sia impostato come previsto. Lo stato previsto può variare a seconda dell'ambiente.

    Valutazione su GKE su Azure

    Utilizziamo i valori seguenti per specificare lo stato dei suggerimenti Kubernetes in GKE su Azure:

    Stato Descrizione
    Conforme Conforme a un consiglio sui benchmark.
    Non conforme Non è conforme a un consiglio sui benchmark.
    Controllo equivalente Non rispetta i termini esatti nel suggerimento di benchmark, ma esistono altri meccanismi in GKE su Azure per fornire controlli di sicurezza equivalenti.
    Dipende dall'ambiente GKE su Azure non configura gli elementi relativi a questo suggerimento. La configurazione dell'utente determina se il suo ambiente è conforme a un suggerimento di benchmark.

    Stato su GKE su Azure

    Quando crei un nuovo cluster con la versione specificata, ecco le prestazioni che avrà rispetto al benchmark CIS Kubernetes.

    Stato di GKE sui cluster Azure:

    # Suggerimento Livello Stato
    1 Configurazione di sicurezza del piano di controllo
    1,10 File di configurazione dei nodi del piano di controllo
    1.1.1 Assicurati che le autorizzazioni del file delle specifiche dei pod del server API siano impostate su 644 o più restrittive (Automatico) L1 Conforme
    1.1.2 Assicurati che la proprietà del file delle specifiche dei pod del server API sia impostata su root:root (Automatico) L1 Conforme
    1.1.3 Assicurati che le autorizzazioni del file delle specifiche dei pod del gestore del controller siano impostate su 644 o su valori più restrittivi (Automatico) L1 Conforme
    1.1.4 Assicurati che la proprietà del file della specifica del pod del gestore del controller sia impostata su root:root (Automatico) L1 Conforme
    1.1.5 Assicurati che le autorizzazioni del file delle specifiche dei pod dello scheduler siano impostate su 644 o più restrittive (automatico) L1 Conforme
    1.1.6 Assicurati che la proprietà del file delle specifiche del pod dello scheduler sia impostata su root:root (Automatico) L1 Conforme
    1.1.7 Assicurati che le autorizzazioni del file delle specifiche dei pod etcd siano impostate su 644 o su valori più restrittivi (automatico) L1 Conforme
    1.1.8 Assicurati che la proprietà del file della specifica del pod etcd sia impostata su root:root (automatico) L1 Conforme
    1.1.9 Assicurati che le autorizzazioni del file dell'interfaccia di rete del container siano impostate su 644 o su un valore più restrittivo (manuale) L1 Controllo equivalente
    1.1.10 Assicurati che la proprietà del file dell'interfaccia di rete del container sia impostata su root:root (manuale) L1 Controllo equivalente
    1.1.11 Assicurati che le autorizzazioni della directory dei dati etcd siano impostate su 700 o su valori più restrittivi (automatici) L1 Controllo equivalente
    1.1.12 Assicurati che la proprietà della directory dei dati etcd sia impostata su etcd:etcd (automatico) L1 Controllo equivalente
    1.1.13 Assicurati che le autorizzazioni del file di configurazione.di amministrazione siano impostate su 600 o su valori più restrittivi (Automatico) L1 Controllo equivalente
    1.1.14 Assicurati che la proprietà del file di configurazione.di amministrazione sia impostata su root:root (Automatico) L1 Controllo equivalente
    1.1.15 Assicurati che le autorizzazioni del file di configurazione. dello scheduler siano impostate su 644 o su un valore più restrittivo (Automatico) L1 Conforme
    1.1.16 Assicurati che la proprietà del file di configurazione. dello scheduler sia impostata su root:root (Automatico) L1 Conforme
    1.1.17 Assicurati che le autorizzazioni dei file di configurazione.controller-manager siano impostate su 644 o su un valore più restrittivo (Automatico) L1 Conforme
    1.1.18 Assicurati che la proprietà del file di configurazione.controller-manager sia impostata su root:root (Automatico) L1 Conforme
    1.1.19 Assicurati che la directory PKI di Kubernetes e la proprietà del file siano impostati su root:root (Automatico) L1 Conforme
    1.1.20 Assicurati che le autorizzazioni del file del certificato dell'infrastruttura a chiave pubblica di Kubernetes siano impostate su 644 o su un valore più restrittivo (manuale) L1 Conforme
    1.1.21 Assicurati che le autorizzazioni del file di chiavi PKI di Kubernetes siano impostate su 600 (manuale) L1 Conforme
    1,20 Server API
    1.2.1 Assicurati che l'argomento --anonymous-auth sia impostato su false (Manuale) L1 Conforme
    1.2.2 Assicurati che il parametro --token-auth-file non sia impostato (Automatico) L1 Conforme
    1.2.3 Assicurati che l'opzione --DenyServiceExternalIPs non sia impostata (Automatico) L1 Conforme
    1.2.4 Assicurati che l'argomento --kubelet-https sia impostato su true (automatico) L1 Conforme
    1.2.5 Assicurati che gli argomenti --kubelet-client-certificate e --kubelet-client-key siano impostati come appropriati (Automatico) L1 Conforme
    1.2.6 Assicurati che l'argomento --kubelet-certificate-authority sia impostato come appropriato (Automatico) L1 Conforme
    1.2.7 Assicurati che l'argomento --authorization-mode non sia impostato su AlwaysAllow (Automated) L1 Conforme
    1.2.8 Assicurati che l'argomento --authorization-mode includa il nodo (automatico) L1 Conforme
    1.2.9 Assicurati che l'argomento --authorization-mode includa RBAC (Automatico) L1 Conforme
    1.2.10 Assicurati che il plug-in di controllo di ammissione EventRateLimit sia impostato (Manuale) L1 Avviso
    1.2.11 Assicurati che il plug-in di controllo di ammissione AlwaysAdmit non sia impostato (Automatico) L1 Conforme
    1.2.12 Assicurati che il plug-in per il controllo di ammissione AlwaysPullImages sia impostato (Manuale) L1 Avviso
    1.2.13 Assicurati che il plug-in per il controllo di ammissione SecurityContextDeny sia impostato se non viene utilizzato PodSecurityPolicy (Manuale) L1 Controllo equivalente
    1.2.14 Assicurati che il plug-in di controllo di ammissione ServiceAccount sia impostato (Automatico) L1 Conforme
    1.2.15 Assicurati che il plug-in di controllo di ammissione NamespaceLifecycle sia impostato (Automatico) L1 Conforme
    1.2.16 Assicurati che il plug-in di controllo di ammissione NodeRestriction sia impostato (Automatico) L1 Conforme
    1.2.17 Assicurati che l'argomento --secure-port non sia impostato su 0 (Automatico) L1 Conforme
    1.2.18 Assicurati che l'argomento --profiling sia impostato su false (automatico) L1 Conforme
    1.2.19 Assicurati che l'argomento --audit-log-path sia impostato (automatico) L1 Controllo equivalente
    1.2.20 Assicurati che l'argomento --audit-log-maxage sia impostato su 30 o come appropriato (automatico) L1 Controllo equivalente
    1.2.21 Assicurati che l'argomento --audit-log-maxbackup sia impostato su 10 o come appropriato (automatico) L1 Controllo equivalente
    1.2.22 Assicurati che l'argomento --audit-log-maxsize sia impostato su 100 o come appropriato (automatico) L1 Controllo equivalente
    1.2.23 Assicurati che l'argomento --request-timeout sia impostato appropriato (manuale) L1 Conforme
    1.2.24 Assicurati che l'argomento --service-account-lookup sia impostato su true (automatico) L1 Conforme
    1.2.25 Assicurati che l'argomento --service-account-key-file sia impostato come appropriato (Automatico) L1 Conforme
    1.2.26 Assicurati che gli argomenti --etcd-certfile e --etcd-keyfile siano impostati come appropriati (Automatico) L1 Conforme
    1.2.27 Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati come appropriati (Automatico) L1 Conforme
    1.2.28 Assicurati che l'argomento --client-ca-file sia impostato come appropriato (Automatico) L1 Conforme
    1.2.29 Assicurati che l'argomento --etcd-cafile sia impostato come appropriato (Automatico) L1 Conforme
    1.2.30 Assicurati che l'argomento --encryption-provider-config sia impostato appropriato (manuale) L1 Conforme
    1.2.31 Assicurati che i provider di crittografia siano configurati in modo appropriato (manuale) L1 Conforme
    1.2.32 Assicurati che il server API utilizzi solo crittografie crittografiche efficaci (manuali) L1 Conforme
    1,30 Gestore del controller
    1.3.1 Assicurati che l'argomento --terminated-pod-gc-threshold sia impostato appropriato (manuale) L1 Conforme
    1.3.2 Assicurati che l'argomento --profiling sia impostato su false (automatico) L1 Conforme
    1.3.3 Assicurati che l'argomento --use-service-account-credentials sia impostato su true (automatico) L1 Conforme
    1.3.4 Assicurati che l'argomento --service-account-private-key-file sia impostato come appropriato (Automatico) L1 Conforme
    1.3.5 Assicurati che l'argomento --root-ca-file sia impostato come appropriato (Automatico) L1 Conforme
    1.3.6 Assicurati che l'argomento RuotaKubeletServerCertificate sia impostato su true (automatico) L2 Conforme
    1.3.7 Assicurati che l'argomento --bind-address sia impostato su 127.0.0.1 (Automatico) L1 Conforme
    1,40 Programma di pianificazione
    1.4.1 Assicurati che l'argomento --profiling sia impostato su false (automatico) L1 Conforme
    1.4.2 Assicurati che l'argomento --bind-address sia impostato su 127.0.0.1 (Automatico) L1 Conforme
    2 Configurazione dei nodi Etcd
    2 Configurazione dei nodi Etcd
    2.1 Assicurati che gli argomenti --cert-file e --key-file siano impostati come appropriati (Automatico) L1 Conforme
    2.2 Assicurati che l'argomento --client-cert-auth sia impostato su true (automatico) L1 Conforme
    2.3 Assicurati che l'argomento --auto-tls non sia impostato su true (automatico) L1 Conforme
    2,4 Assicurati che gli argomenti --peer-cert-file e --peer-key-file siano impostati come appropriati (Automatico) L1 Conforme
    2,5 Assicurati che l'argomento --peer-client-cert-auth sia impostato su true (automatico) L1 Conforme
    2,6 Assicurati che l'argomento --peer-auto-tls non sia impostato su true (automatico) L1 Conforme
    2.7 Assicurati che venga utilizzata un'autorità di certificazione univoca per etcd (manuale) L2 Conforme
    3 Configurazione del piano di controllo
    3,10 Autenticazione e autorizzazione
    3.1.1 Non utilizzare l'autenticazione del certificato client per gli utenti (manuale) L2 Controllo equivalente
    3,20 Logging
    3.2.1 Assicurati che venga creato un criterio di controllo minimo (manuale) L1 Conforme
    3.2.2 Assicurati che i criteri di controllo coprano i principali problemi di sicurezza (manuale) L2 Controllo equivalente
    4 Configurazione della sicurezza dei nodi worker
    4,10 File di configurazione dei nodi worker
    4.1.1 Assicurati che le autorizzazioni del file di servizio kubelet siano impostate su 644 o su valori più restrittivi (Automatico) L1 Conforme
    4.1.2 Assicurati che la proprietà del file del servizio kubelet sia impostata su root:root (Automatico) L1 Conforme
    4.1.3 Se esiste un file kubeconfig proxy, assicurati che le autorizzazioni siano impostate su 644 o su un valore più restrittivo (Manuale) L1 Conforme
    4.1.4 Se esiste un file kubeconfig del proxy, assicurati che la proprietà sia impostata su root:root (Manuale) L1 Conforme
    4.1.5 Assicurati che le autorizzazioni del file --kubeconfig kubelet.conf siano impostate su 644 o più restrittive (Automatico) L1 Conforme
    4.1.6 Assicurati che la proprietà del file --kubeconfig kubelet.conf sia impostata su root:root (Automatico) L1 Conforme
    4.1.7 Assicurati che le autorizzazioni dei file delle autorità di certificazione siano impostate su 644 o su un valore più restrittivo (Manuale) L1 Conforme
    4.1.8 Assicurati che la proprietà dei file delle autorità di certificazione client sia impostata su root:root (Manuale) L1 Conforme
    4.1.9 Assicurati che le autorizzazioni del file di configurazione kubelet --config siano impostate su 644 o più restrittive (Automatico) L1 Conforme
    4.1.10 Assicurati che la proprietà del file di configurazione kubelet --config sia impostata su root:root (Automatico) L1 Conforme
    4,20 Cubelet
    4.2.1 Assicurati che l'argomento --anonymous-auth sia impostato su false (automatico) L1 Conforme
    4.2.2 Assicurati che l'argomento --authorization-mode non sia impostato su AlwaysAllow (Automated) L1 Conforme
    4.2.3 Assicurati che l'argomento --client-ca-file sia impostato come appropriato (Automatico) L1 Conforme
    4.2.4 Assicurati che l'argomento --read-only-port sia impostato su 0 (Manuale) L1 Non conforme
    4.2.5 Assicurati che l'argomento --streaming-connection-idle-timeout non sia impostato su 0 (Manuale) L1 Conforme
    4.2.6 Assicurati che l'argomento --protect-kernel-defaults sia impostato su true (automatico) L1 Non conforme
    4.2.7 Assicurati che l'argomento --make-iptables-util-chains sia impostato su true (automatico) L1 Conforme
    4.2.8 Assicurati che l'argomento --hostname-override non sia impostato (Manuale) L1 Conforme
    4.2.9 Assicurati che l'argomento --event-qps sia impostato su 0 o su un livello che garantisca l'acquisizione appropriata degli eventi (manuale) L2 Avviso
    4.2.10 Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati come appropriati (Manuale) L1 Controllo equivalente
    4.2.11 Assicurati che l'argomento --rotate-certificates non sia impostato su false (Automatico) L1 Conforme
    4.2.12 Verificare che l'argomento RuotaKubeletServerCertificate sia impostato su true (Manuale) L1 Conforme
    4.2.13 Assicurati che il kubelet utilizzi solo crittografie crittografiche efficaci (manuali) L1 Conforme
    Descrizioni degli errori e dei controlli equivalenti per GKE sul cluster di amministrazione Azure:
    # Suggerimento Livello Stato Valore Motivazione
    1.1.9 Assicurati che le autorizzazioni del file dell'interfaccia di rete del container siano impostate su 644 o su un valore più restrittivo (manuale) L1 Controllo equivalente 755 Il percorso dell'interfaccia di rete dei container Cluster Anthos su Azure è /opt/cni/bin e la relativa autorizzazione è impostata su 755 per la normale operazione del cluster.
    1.1.10 Assicurati che la proprietà del file dell'interfaccia di rete del container sia impostata su root:root (manuale) L1 Controllo equivalente root:root Il percorso dell'interfaccia di rete dei container Cluster Anthos su Azure è /opt/cni/bin e la sua proprietà è impostata su root:root.
    1.1.11 Assicurati che le autorizzazioni della directory dei dati etcd siano impostate su 700 o su valori più restrittivi (automatici) L1 Controllo equivalente 755 La directory dati etcd /opt/data/var/lib/etcd ha le autorizzazioni 755 predefinite, ma le relative sottodirectory sono 700.
    1.1.12 Assicurati che la proprietà della directory dei dati etcd sia impostata su etcd:etcd (automatico) L1 Controllo equivalente root:root Il container etcd viene eseguito come root e la directory dati etcd è di proprietà di root:root.
    1.1.13 Assicurati che le autorizzazioni del file di configurazione.di amministrazione siano impostate su 600 o su valori più restrittivi (Automatico) L1 Controllo equivalente non impostato Cluster Anthos on Azure non supporta kubeadm.
    1.1.14 Assicurati che la proprietà del file di configurazione.di amministrazione sia impostata su root:root (Automatico) L1 Controllo equivalente non impostato Cluster Anthos on Azure non supporta kubeadm.
    1.2.10 Assicurati che il plug-in di controllo di ammissione EventRateLimit sia impostato (Manuale) L1 Avviso non impostato Cluster Anthos on Azure non supporta il controller di ammissione Limite di frequenza degli eventi in quanto è una funzionalità alpha di Kubernetes.
    1.2.12 Assicurati che il plug-in per il controllo di ammissione AlwaysPullImages sia impostato (Manuale) L1 Avviso non impostato Il controller di ammissione AlwaysPullImages offre una certa protezione per le immagini del registro private nei cluster multitenant non cooperativi, a costo di rendere i registry dei container un singolo punto di errore per la creazione di nuovi pod nell'intero cluster. GKE su Azure non abilita il controller di ammissione AlwaysPullImages, lasciando agli amministratori del cluster la responsabilità di implementare il criterio di ammissione e di raggiungere autonomamente questo compromesso.
    1.2.13 Assicurati che il plug-in per il controllo di ammissione SecurityContextDeny sia impostato se non viene utilizzato PodSecurityPolicy (Manuale) L1 Controllo equivalente non impostato Cluster Anthos on Azure definisce i criteri di sicurezza predefiniti. I clienti possono impostare opzioni relative alla sicurezza con un contesto di sicurezza. Scopri di più sulla panoramica della sicurezza.
    1.2.19 Assicurati che l'argomento --audit-log-path sia impostato (automatico) L1 Controllo equivalente non impostato Cluster Anthos on Azure offre un'opzione di audit logging del cloud. Scopri di più su Cloud Audit Logs.
    1.2.20 Assicurati che l'argomento --audit-log-maxage sia impostato su 30 o come appropriato (automatico) L1 Controllo equivalente non impostato Cluster Anthos on Azure offre un'opzione di audit logging del cloud. Scopri di più su Cloud Audit Logs.
    1.2.21 Assicurati che l'argomento --audit-log-maxbackup sia impostato su 10 o come appropriato (automatico) L1 Controllo equivalente non impostato Cluster Anthos on Azure offre un'opzione di audit logging del cloud. Scopri di più su Cloud Audit Logs.
    1.2.22 Assicurati che l'argomento --audit-log-maxsize sia impostato su 100 o come appropriato (automatico) L1 Controllo equivalente non impostato Cluster Anthos on Azure offre un'opzione di audit logging del cloud. Scopri di più su Cloud Audit Logs.
    3.1.1 Non utilizzare l'autenticazione del certificato client per gli utenti (manuale) L2 Controllo equivalente Cluster Anthos on Azure supporta OIDC come uno dei meccanismi di autenticazione per la connessione al cluster. Per saperne di più, vedi Connettiti e autentica nel tuo cluster.
    3.2.2 Assicurati che i criteri di controllo coprano i principali problemi di sicurezza (manuale) L2 Controllo equivalente non impostato Cluster Anthos on Azure offre un'opzione di audit logging del cloud. Scopri di più su Cloud Audit Logs.
    4.2.4 Assicurati che l'argomento --read-only-port sia impostato su 0 (Manuale) L1 Non conforme 10255 Cluster Anthos on Azure attualmente imposta l'argomento --read-only-port su 10255 per la raccolta di metriche da kubelet.
    4.2.6 Assicurati che l'argomento --protect-kernel-defaults sia impostato su true (automatico) L1 Non conforme false Cluster Anthos on Azure consente a kubelet di impostare le impostazioni necessarie del kernel.
    4.2.9 Assicurati che l'argomento --event-qps sia impostato su 0 o su un livello che garantisca l'acquisizione appropriata degli eventi (manuale) L2 Avviso non impostato Gli eventi sono oggetti Kubernetes archiviati in etcd. Per evitare sovraccarichi eccetera, vengono conservati solo per un'ora e non costituiscono un meccanismo di controllo di sicurezza appropriato. Se consenti un numero illimitato di eventi come suggerito in questo controllo, il cluster espone il cluster a rischi DoS non necessari e contraddice il suggerimento di utilizzare EventRateLimits di ammissione. Gli eventi rilevanti per la sicurezza che richiedono l'archiviazione permanente devono essere inviati ai log.
    4.2.10 Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati come appropriati (Manuale) L1 Controllo equivalente non impostato Cluster Anthos on Azure gestisce il protocollo TLS del server kubelet utilizzando il flag serverTLSBootstrap.

    Come eseguire il controllo dei benchmark

    Istruzioni specifiche per la verifica di ogni suggerimento sono disponibili all'interno del CIS Benchmark pertinente. Tuttavia, ti consigliamo di automatizzare alcuni di questi controlli per semplificare la verifica di questi controlli nel tuo ambiente. Gli strumenti elencati di seguito possono aiutarti a farlo.

    Controllo automatico del benchmark CIS per Kubernetes

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

    Assicurati di specificare la versione appropriata, ad esempio

    kube-bench node --benchmark cis-1.23