Benchmark CIS

Questo documento presenta il benchmark CIS Kubernetes, spiega come controllare la tua conformità con il benchmark e spiega in che modo Cluster Anthos on bare metal configura dove non puoi implementare un suggerimento in autonomia.

Utilizzo dei benchmark CIS

Il Center for Internet Security (CIS) offre analisi comparative e suggerimenti relativi alle best practice in materia di sicurezza. CIS Kubernetes Benchmark fornisce un insieme di suggerimenti per la configurazione di Kubernetes al fine di supportare una solida strategia di sicurezza. Il benchmark è associato a una specifica release di Kubernetes. Il benchmark benchmark Kubernetes CIS è stato creato per la distribuzione Kubernetes open source ed è pensato per essere il più possibile applicabile a tutte le distribuzioni.

Versioni

Tieni presente che i numeri di versione per i benchmark diversi potrebbero non essere uguali.

Questo documento fa riferimento alle seguenti versioni:

Versione Anthos Versione di Kubernetes Versione benchmark CIS Kubernetes
1,13,0 1,24,2 1,23

Benchmark CIS Kubernetes

Accesso al benchmark

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

Livelli dei consigli

Nel benchmark CIS di Kubernetes,

Livello Descrizione
Livello 1

I consigli hanno lo scopo di:

  • essere pratici e prudenti;
  • Offrire un chiaro vantaggio per la sicurezza; e
  • non inibire l'utilità della tecnologia al di là dei mezzi accettabili.
  • Livello 2

    Estende il profilo di livello 1.

    I consigli presentano una o più delle seguenti caratteristiche:

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

    Per ogni consiglio viene incluso uno stato della valutazione. Lo stato della valutazione indica se il suggerimento consigliato può essere automatizzato o se richiede passaggi manuali per l'implementazione. Entrambi gli stati sono ugualmente importanti e vengono 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 in stato di superamento/approvazione. I suggerimenti includeranno le informazioni necessarie per implementare l'automazione.
    Manuale Rappresenta i suggerimenti per i quali la valutazione di un controllo tecnico non può essere completamente automatizzata e richiede alcuni 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 Cluster Anthos on bare metal

    Utilizziamo i seguenti valori per specificare lo stato dei suggerimenti Kubernetes nei cluster Anthos su Bare Metal:

    Stato Descrizione
    Conforme Conforme a un consiglio di benchmark.
    Non conforme Non rispetta un consiglio di benchmark.
    Controllo equivalente Non rispetta i termini esatti nel suggerimento del benchmark, ma esistono altri meccanismi nei cluster Anthos su Bare Metal per fornire controlli di sicurezza equivalenti.
    Dipende dall'ambiente Cluster Anthos on bare metal non configura elementi correlati a questo suggerimento. La configurazione dell'utente determina se il suo ambiente è conforme a un suggerimento di benchmark.

    Architettura di Cluster Anthos on bare metal

    Cluster Anthos su Bare Metal supporta più configurazioni e tipi di cluster. Ogni tipo di cluster, amministratore, utente, ibrido e autonomo supportato viene valutato in base al benchmark CIS. Le seguenti valutazioni e giustificazioni si applicano a tutti i tipi di cluster supportati. Maggiori informazioni sulle configurazioni dei cluster supportate da Cluster Anthos on bare metal sono disponibili in Scelta dei modelli di deployment.

    Stato su Cluster Anthos on bare metal

    Quando crei un nuovo cluster con la versione specificata, ecco come funzionerà con il benchmark CIS Kubernetes.

    Stato dei cluster Anthos su Bare Metal Cluster:

    # Suggerimento Livello Stato
    1 cis-1,23
    1,1 File di configurazione dei nodi del piano di controllo
    1,1,1 Assicurati che le autorizzazioni del file della specifica dei pod del server API siano impostate su 644 o su un valore più restrittivo (automatico) Livello 1 Conforme
    1,1,2 Assicurati che la proprietà del file della specifica del pod del server API sia impostata su root:root (automatica) Livello 1 Conforme
    1,1,3 Assicurati che le autorizzazioni del file della specifica dei pod del gestore del controller siano impostate su 644 o su un valore più restrittivo (automatico). Livello 1 Conforme
    1,1,4 Assicurati che la proprietà del file della specifica dei pod del gestore del controller sia impostata su root:root (automatica) Livello 1 Conforme
    1,1,5 Assicurati che le autorizzazioni del file delle specifiche del pod dello scheduler siano impostate su 644 o su un valore più restrittivo (automatico) Livello 1 Conforme
    1,1,6 Assicurati che la proprietà del file della specifica del pod dello scheduler sia impostata su root:root (automatica) Livello 1 Conforme
    1,1,7 Assicurati che le autorizzazioni del file della specifica del pod etcd siano impostate su 644 o su un valore più restrittivo (automatico) Livello 1 Conforme
    1,1,8 Assicurati che la proprietà del file della specifica del pod etcd sia impostata su root:root (automatica) Livello 1 Conforme
    1,1,9 Assicurati che le autorizzazioni del file Container Network Interface siano impostate su 644 o su un valore più restrittivo (manuale). Livello 1 Controllo equivalente
    1,1,10 Assicurati che la proprietà del file Container Network Interface sia impostata su root:root (manuale) Livello 1 Conforme
    1,1,11 Assicurati che le autorizzazioni per la directory dei dati etcd siano impostate su 700 o su un valore più restrittivo (automatico). Livello 1 Controllo equivalente
    1,1,12 Assicurati che la proprietà della directory dei dati etcd sia impostata su etcd:etcd (automatica) Livello 1 Controllo equivalente
    1,1,13 Assicurati che le autorizzazioni del .file dell'amministratore siano impostate su 600 o su un valore più restrittivo (automatico) Livello 1 Conforme
    1,1,14 Assicurati che la proprietà .del file conf dell'amministratore sia impostata su root:root (Automatico) Livello 1 Conforme
    1,1,15 Assicurati che le autorizzazioni del file conf. dello scheduler siano impostate su 644 o su un valore più restrittivo (automatico) Livello 1 Conforme
    1,1,16 Assicurati che la proprietà.del file dello scheduler sia impostata su root:root (Automatico) Livello 1 Controllo equivalente
    1,1,17 Assicurati che le autorizzazioni del file .conf controller-manager siano impostate su 644 o su un valore più restrittivo (automatico). Livello 1 Conforme
    1,1,18 Assicurati che la proprietà del file .conf controller-manager sia impostata su root:root (automatica) Livello 1 Controllo equivalente
    1,1,19 Assicurati che la directory PKI di Kubernetes e la proprietà del file siano impostate su root:root (Automatico) Livello 1 Controllo equivalente
    1,1,20 Assicurati che le autorizzazioni del file del certificato PKI di Kubernetes siano impostate su 644 o su un valore più restrittivo (manuale) Livello 1 Conforme
    1,1,21 Assicurati che le autorizzazioni del file della chiave PKI di Kubernetes siano impostate su 600 (Manuale) Livello 1 Controllo equivalente
    1,2 Server API
    1,2,1 Assicurati che l'argomento --anonymous-auth sia impostato su false (Manuale) Livello 1 Avviso
    1,2,2 Assicurati che il parametro --token-auth-file non sia impostato (automatico) Livello 1 Conforme
    1,2,3 Assicurati che --denServiceExternalIPs non sia impostato (Automatico) Livello 1 Conforme
    1,2,4 Assicurati che l'argomento --kubelet-https sia impostato su true (automatico) Livello 1 Conforme
    1,2,5 Assicurati che gli argomenti --kubelet-client-certificate e --kubelet-client-key siano impostati come appropriati (Automatico) Livello 1 Conforme
    1,2,6 Assicurati che l'argomento --kubelet-certificate-authority sia impostato come appropriato (Automatico) Livello 1 Conforme
    1,2,7 Assicurati che l'argomento --authorization-mode non sia impostato su AlwaysAllow (automatico) Livello 1 Conforme
    1,2,8 Assicurati che l'argomento --authorization-mode includa il nodo (automatico) Livello 1 Conforme
    1,2,9 Assicurati che l'argomento --authorization-mode includa RBAC (automatico) Livello 1 Conforme
    1,2.10 Assicurati che il plug-in EventRateLimit per il controllo di ammissione sia impostato (Manuale) Livello 1 Avviso
    1,2.11 Assicurati che il plug-in per il controllo di ammissione AlwaysAdmit non sia impostato (Automatico) Livello 1 Conforme
    1,2.12 Assicurati che il plug-in di controllo di ammissione AlwaysPullImages sia impostato (Manuale) Livello 1 Avviso
    1,2.13 Assicurati che il plug-in di controllo di ammissione SecurityContextNega sia impostato se PodSecurityPolicy non viene utilizzato (manuale) Livello 1 Avviso
    1,2,14 Assicurati che il plug-in di controllo dell'ammissione ServiceAccount sia impostato su (Automatico) Livello 1 Conforme
    1,2.15 Assicurati che il plug-in per il controllo di ammissione NamespaceLifecycle sia impostato (Automatico) Livello 1 Conforme
    1,2,16 Assicurati che il plug-in di controllo di ammissione NodeRestriction sia impostato (automatico) Livello 1 Conforme
    1,2.17 Assicurati che l'argomento --secure-port non sia impostato su 0 (automatico) Livello 1 Conforme
    1,2,18 Assicurati che l'argomento --profiling sia impostato su false (automatico) Livello 1 Conforme
    1,2.19 Assicurati che l'argomento --audit-log-path sia impostato (Automatico) Livello 1 Conforme
    1,2,20 Assicurati che l'argomento --audit-log-maxage sia impostato su 30 o come appropriato (Automatico) Livello 1 Conforme
    1,2.21 Assicurati che l'argomento --audit-log-maxbackup sia impostato su 10 o come appropriato (Automatico) Livello 1 Conforme
    1,2.22 Assicurati che l'argomento --audit-log-maxsize sia impostato su 100 o come appropriato (Automatico) Livello 1 Conforme
    1,2,23 Assicurati che l'argomento --request-timeout sia impostato come appropriato (Manuale) Livello 1 Conforme
    1,2,24 Assicurati che l'argomento --service-account-lookup sia impostato su true (automatico) Livello 1 Conforme
    1,2,25 Assicurati che l'argomento --service-account-key-file sia impostato come appropriato (Automatico) Livello 1 Conforme
    1,2,26 Assicurati che gli argomenti --etcd-certfile e --etcd-keyfile siano impostati come appropriati (Automatico) Livello 1 Conforme
    1,2.27 Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati come appropriati (Automatico) Livello 1 Conforme
    1,2,28 Assicurati che l'argomento --client-ca-file sia impostato come appropriato (Automatico) Livello 1 Conforme
    1,2,29 Assicurati che l'argomento --etcd-cafile sia impostato come appropriato (Automatico) Livello 1 Conforme
    1,2,30 Assicurati che l'argomento --encryption-provider-config sia impostato come appropriato (Manuale) Livello 1 Conforme
    1,2,31 Assicurati che i fornitori di crittografia siano configurati correttamente (manuale) Livello 1 Conforme
    1,2,32 Assicurati che il server API utilizzi solo crittografie crittografiche efficaci (manuale) Livello 1 Conforme
    1,3 Gestore del controller
    1,3,1 Assicurati che l'argomento --terminated-pod-gc-threshold sia impostato come appropriato (Manuale) Livello 1 Conforme
    1,3,2 Assicurati che l'argomento --profiling sia impostato su false (automatico) Livello 1 Conforme
    1,3,3 Assicurati che l'argomento --use-service-account-credentials sia impostato su true (automatico) Livello 1 Conforme
    1,3,4 Assicurati che l'argomento --service-account-private-key-file sia impostato come appropriato (Automatico) Livello 1 Conforme
    1,3,5 Assicurati che l'argomento --root-ca-file sia impostato come appropriato (Automatico) Livello 1 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) Livello 1 Conforme
    1,4 Programma di pianificazione
    1,4,1 Assicurati che l'argomento --profiling sia impostato su false (automatico) Livello 1 Conforme
    1,4,2 Assicurati che l'argomento --bind-address sia impostato su 127.0.0.1 (automatico) Livello 1 Conforme
    2 cis-1,23
    2 Configurazione nodo Ethernet
    2.1 Assicurati che gli argomenti --cert-file e --key-file siano impostati come appropriati (Automatico) Livello 1 Conforme
    2.2 Assicurati che l'argomento --client-cert-auth sia impostato su true (automatico) Livello 1 Conforme
    2,3 Assicurati che l'argomento --auto-tls non sia impostato su true (automatico) Livello 1 Conforme
    2,4 Assicurati che gli argomenti --peer-cert-file e --peer-key-file siano impostati come appropriati (Automatico) Livello 1 Conforme
    2,5 Assicurati che l'argomento --peer-client-cert-auth sia impostato su true (automatico) Livello 1 Conforme
    2,6 Assicurati che l'argomento --peer-auto-tls non sia impostato su true (automatico) Livello 1 Conforme
    2.7 Assicurati che venga utilizzata un'autorità di certificazione univoca per etcd (manuale) L2 Conforme
    3 cis-1,23
    3,1 Autenticazione e autorizzazione
    3,1,1 L'autenticazione dei certificati client non deve essere utilizzata per gli utenti (manuale) L2 Conforme
    3,2 Logging
    3,2,1 Assicurati che venga creato un criterio di controllo minimo (manuale). Livello 1 Conforme
    3,2,2 Assicurati che i criteri di controllo coprano problemi di sicurezza chiave (manuali) L2 Controllo equivalente
    4 cis-1,23
    4,1 File di configurazione dei nodi worker
    4,1 Assicurati che le autorizzazioni del file del servizio kubelet siano impostate su 644 o su un valore più restrittivo (automatico) Livello 1 Conforme
    4,1,2 Assicurati che la proprietà del file del servizio kubelet sia impostata su root:root (automatica) Livello 1 Conforme
    4,1,3 Se il file kubeconfig del proxy esiste, imposta le autorizzazioni su 644 o su un valore più restrittivo (manuale) Livello 1 Conforme
    4,1,4 Se il file kubeconfig del proxy esiste, verifica che la proprietà sia impostata su root:root (manuale) Livello 1 Conforme
    4,1,5 Assicurati che le autorizzazioni del file kubelet.conf di --kubeconfig siano impostate su 644 o su un valore più restrittivo (automatico) Livello 1 Conforme
    4,1,6 Assicurati che la proprietà del file --kubeconfig kubelet.conf sia impostata su root:root (Automatico) Livello 1 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). Livello 1 Conforme
    4,1,8 Assicurati che la proprietà del file delle autorità di certificazione del client sia impostata su root:root (manuale) Livello 1 Conforme
    4,1,9 Assicurati che le autorizzazioni del file di configurazione --config di kubelet siano impostate su 644 o su un valore più restrittivo (automatico) Livello 1 Conforme
    4,1,10 Assicurati che la proprietà del file di configurazione --config di kubelet sia impostata su root:root (Automatica) Livello 1 Conforme
    4,2 Kubelet
    4,2,1 Assicurati che l'argomento --anonymous-auth sia impostato su false (automatico) Livello 1 Conforme
    4,2,2 Assicurati che l'argomento --authorization-mode non sia impostato su AlwaysAllow (automatico) Livello 1 Conforme
    4,2,3 Assicurati che l'argomento --client-ca-file sia impostato come appropriato (Automatico) Livello 1 Conforme
    4,2,4 Assicurati che l'argomento --read-only-port sia impostato su 0 (Manuale) Livello 1 Non conforme
    4,2,5 Assicurati che l'argomento --streaming-connection-idle-timeout non sia impostato su 0 (Manuale) Livello 1 Conforme
    4,2,6 Assicurati che l'argomento --protect-kernel-defaults sia impostato su true (automatico) Livello 1 Non conforme
    4,2,7 Assicurati che l'argomento --make-iptables-util-chains sia impostato su true (automatico) Livello 1 Conforme
    4,2,8 Assicurati che l'argomento --hostname-override non sia impostato (Manuale) Livello 1 Conforme
    4,2,9 Assicurati che l'argomento --event-qps sia impostato su 0 o su un livello che garantisca l'acquisizione di eventi appropriata (manuale) L2 Avviso
    4,2,10 Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati come appropriati (Manuale) Livello 1 Controllo equivalente
    4,2,11 Assicurati che l'argomento --rotate-certificates non sia impostato su false (automatico) Livello 1 Conforme
    4,2,12 Verifica che l'argomento RuotaKubeletServerServer sia impostato su true (Manuale) Livello 1 Conforme
    4,2,13 Assicurati che il Kubelet utilizzi solo crittografie crittografiche efficaci (manuale) Livello 1 Controllo equivalente
    Descrizioni di errori e controlli equivalenti per i cluster Anthos su cluster di amministrazione Bare Metal:
    # Suggerimento Livello Stato Valore Motivazione
    1,1,9 Assicurati che le autorizzazioni del file Container Network Interface siano impostate su 644 o su un valore più restrittivo (manuale). Livello 1 Controllo equivalente 755 Il percorso dei cluster Anthos su Bare Metal Container Network Interface è /opt/cni/bin e la sua autorizzazione è impostata su 755 per il normale funzionamento del cluster.
    1,1,11 Assicurati che le autorizzazioni per la directory dei dati etcd siano impostate su 700 o su un valore più restrittivo (automatico). Livello 1 Controllo equivalente 755 La directory dei dati etcd dispone delle autorizzazioni 755 predefinite, ma le sue sottodirectory sono 700.
    1,1,12 Assicurati che la proprietà della directory dei dati etcd sia impostata su etcd:etcd (automatica) Livello 1 Controllo equivalente 2003:2003 La directory dei dati etcd, /var/lib/etcd, è di proprietà di 2003:2003 come risultato del piano di controllo rootless per una maggiore sicurezza.
    1,1,16 Assicurati che la proprietà.del file dello scheduler sia impostata su root:root (Automatico) Livello 1 Controllo equivalente 2002:2002 Cluster Anthos on bare metal, a partire dalla release 1.9.0, implementa il piano di controllo senza root per una maggiore sicurezza.
    1,1,18 Assicurati che la proprietà del file .conf controller-manager sia impostata su root:root (automatica) Livello 1 Controllo equivalente 2001:2001 Cluster Anthos on bare metal, a partire dalla release 1.9.0, implementa il piano di controllo senza root per una maggiore sicurezza.
    1,1,19 Assicurati che la directory PKI di Kubernetes e la proprietà del file siano impostate su root:root (Automatico) Livello 1 Controllo equivalente variable:variable Cluster Anthos on bare metal, a partire dalla release 1.9.0, implementa il piano di controllo senza root per una maggiore sicurezza.
    1,1,21 Assicurati che le autorizzazioni del file della chiave PKI di Kubernetes siano impostate su 600 (Manuale) Livello 1 Controllo equivalente 600~640 Cluster Anthos on bare metal, a partire dalla release 1.9.0, implementa il piano di controllo senza root per una maggiore sicurezza.
    1,2,1 Assicurati che l'argomento --anonymous-auth sia impostato su false (Manuale) Livello 1 Avviso non impostato Alcuni cluster Anthos su operazioni Bare Metal, come l'alta disponibilità, richiedono l'abilitazione dell'autenticazione anonima.
    1,2.10 Assicurati che il plug-in EventRateLimit per il controllo di ammissione sia impostato (Manuale) Livello 1 Avviso
    1,2.12 Assicurati che il plug-in di controllo di ammissione AlwaysPullImages sia impostato (Manuale) Livello 1 Avviso non impostato Il controller di ammissione AlwaysPullImages fornisce una certa protezione per le immagini del registro privato in cluster multitenant non cooperativi, al costo di rendere i registri del container un single-point-of-failure per la creazione di nuovi pod in tutto il cluster. Cluster Anthos on bare metal non abilita il controller di ammissione AlwaysPullImages, che lascia agli amministratori del cluster l'implementazione di criteri di ammissione che comportino da soli questo compromesso.
    1,2.13 Assicurati che il plug-in di controllo di ammissione SecurityContextNega sia impostato se PodSecurityPolicy non viene utilizzato (manuale) Livello 1 Avviso non impostato Cluster Anthos on bare metal non abilita il criterio di sicurezza dei pod. L'ammissione in sicurezza dei pod è abilitata nei cluster Kubernetes 1.23 per impostazione predefinita, vedi https://kubernetes.io/docs/concepts/security/pod-security-admission/
    3,2,2 Assicurati che i criteri di controllo coprano problemi di sicurezza chiave (manuali) L2 Controllo equivalente non impostato Cluster Anthos on bare metal acquisisce gli audit log, ma non usa questi flag per l'audit, ovvero più su logging e monitoraggio.
    4,2,4 Assicurati che l'argomento --read-only-port sia impostato su 0 (Manuale) Livello 1 Non conforme 10255 Al momento, Cluster Anthos on bare metal imposta l'argomento --read-only-port su 10255 per raccogliere metriche da kubelet.
    4,2,6 Assicurati che l'argomento --protect-kernel-defaults sia impostato su true (automatico) Livello 1 Non conforme false Le macchine cluster Anthos su Bare Metal non proteggono i valori predefiniti del kernel da Kubernetes, poiché i carichi di lavoro del cliente potrebbero volerli modificare.
    4,2,9 Assicurati che l'argomento --event-qps sia impostato su 0 o su un livello che garantisca l'acquisizione di eventi appropriata (manuale) L2 Avviso non impostato Gli eventi sono oggetti Kubernetes archiviati in etcd. Per evitare di confondersi con etcd, vengono conservati solo per un'ora e non sono meccanismi di controllo di sicurezza appropriati. Consentire eventi illimitati come suggerito in questo controllo espone il cluster a rischi DoS non necessari e contraddice il consiglio di utilizzare EventRateLimit per l'ammissione. Gli eventi pertinenti per la sicurezza che richiedono un'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) Livello 1 Controllo equivalente non impostato Cluster Anthos on bare metal gestisce il TLS kubelet server utilizzando il flag --rotate-server-certificates.
    4,2,13 Assicurati che il Kubelet utilizzi solo crittografie crittografiche efficaci (manuale) Livello 1 Controllo equivalente Nei cluster Anthos su nodi Bare Metal, kubelet utilizza le suite di crittografia Go predefinite. I cluster Anthos su Bare Metal non forniscono opzioni di configurazione per consentire all'utente di personalizzare la selezione delle suite di crittografia. Tieni presente che i clienti moderni negoziano le suite di crittografia e non utilizzeranno quelle meno efficaci se queste si escludono a vicenda.

    Come controllare i benchmark

    Istruzioni specifiche per il controllo di ciascun suggerimento sono disponibili nell'ambito del benchmark CIS pertinente. Tuttavia, potresti voler automatizzare alcuni di questi controlli per semplificare la verifica di questi controlli nel tuo ambiente. Gli strumenti elencati di seguito possono esserti utili.

    Controllo automatico del benchmark CIS Kubernetes

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

    Assicurati di specificare la versione appropriata, ad esempio

    kube-bench node --benchmark cis-1.23