Questo documento presenta il benchmark CIS di Kubernetes, spiega come controllare la tua conformità con il benchmark e spiega cosa configura Anthos clusters on bare metal dove non puoi implementare personalmente un suggerimento.
Utilizzo dei benchmark CIS
Il Centro per la sicurezza su Internet (CIS) rilascia i benchmark per fornire suggerimenti in merito alle best practice per la sicurezza. CIS Kubernetes Benchmark fornisce un insieme di suggerimenti per la configurazione di Kubernetes in modo da supportare una solida strategia di sicurezza. Il benchmark è legato a una specifica versione di Kubernetes. Il benchmark Kubernetes di CSS è scritto per la distribuzione Kubernetes open source e deve essere il più possibile universalmente applicabile tra le distribuzioni.
Versioni
Tieni presente che i numeri di versione di diversi benchmark potrebbero non coincidere.
Questo documento fa riferimento alle seguenti versioni:
Versione Anthos | Versione di Kubernetes | Versione di CIS Kubernetes Benchmark |
---|---|---|
1,14,0 | 1,25,3 |
Benchmark CIS Kubernetes
Accesso al benchmark
Il benchmark CIS per Kubernetes è disponibile sul sito web della CSS.
Livelli dei consigli
Nel benchmark CIS di Kubernetes,
Livello | Descrizione |
---|---|
Livello 1 | I consigli hanno lo scopo di: |
Livello 2 | Estende il profilo di livello 1. I consigli mostrano una o più delle seguenti caratteristiche: |
Stato della valutazione
Per ogni consiglio è incluso uno stato di valutazione. Lo stato della valutazione indica se il suggerimento consigliato può essere automatizzato o se richiede l'implementazione manuale di passaggi. Entrambi gli stati sono ugualmente importanti e sono determinati e supportati come definito di seguito:
Punteggio | Descrizione |
---|---|
Automatizzata | Rappresenta i consigli per i quali la valutazione di un controllo tecnico può essere completamente automatizzata e convalidata in uno stato di superamento. 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 Anthos clusters on bare metal
Utilizziamo i seguenti valori per specificare lo stato dei suggerimenti Kubernetes nei Anthos clusters on bare metal:
Stato | Descrizione |
---|---|
Conforme | Conforme a un consiglio di benchmark. |
Non conforme | Non è conforme a un consiglio di benchmark. |
Controllo equivalente | Non rispetta i termini esatti indicati nel suggerimento di benchmark, ma esistono altri meccanismi nei Anthos clusters on bare metal per fornire controlli di sicurezza equivalenti. |
Dipende dall'ambiente | Anthos clusters on bare metal non configura gli elementi relativi a questo suggerimento. La configurazione dell'utente determina se il suo ambiente è conforme a un suggerimento di benchmark. |
Architettura di Anthos clusters on bare metal
Anthos clusters on bare metal supporta più configurazioni di cluster 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. Ulteriori informazioni sulle configurazioni di cluster supportate da Anthos clusters on bare metal sono disponibili in Scelta dei modelli di deployment.
Stato su Anthos clusters on bare metal
Quando crei un nuovo cluster con la versione specificata, ecco le sue prestazioni rispetto al benchmark CIS Kubernetes.
Stato dei cluster Anthos su cluster Bare Metal:
# | 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 del pod del server API siano impostate su un valore pari o superiore a 644 (automatico) |
L1 | Conforme |
1,1,2 | Assicurati che la proprietà del file della specifica del pod del server API sia impostata su root:root (automatica) |
L1 | Conforme |
1,1,3 | Assicurati che le autorizzazioni del file della specifica dei pod del gestore del controller siano impostate su un valore pari o superiore a 644 (automatico) |
L1 | Conforme |
1,1,4 | Assicurati che la proprietà del file della specifica dei pod del gestore del controller sia impostata su root:root (automatica) |
L1 | Conforme |
1,1,5 | Assicurati che le autorizzazioni del file della specifica del pod dello scheduler siano impostate su 644 o più restrittive (automatiche) |
L1 | Conforme |
1,1,6 | Assicurati che la proprietà del file della specifica del pod dello scheduler sia impostata su root:root (automatica) |
L1 | 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). |
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 di Container Network Interface siano impostate su 644 o su un valore più restrittivo (manuale). |
L1 | Controllo equivalente |
1,1.10 | Assicurati che la proprietà del file Container Network Interface sia impostata su root:root (Manuale) |
L1 | Conforme |
1,1.11 | Assicurati che le autorizzazioni della directory dei dati etcd siano impostate su 700 o su un valore più restrittivo (automatico). |
L1 | Controllo equivalente |
1,1.12 | Assicurati che la proprietà della directory dei dati etcd sia impostata su etcd:etcd (automatica) |
L1 | Controllo equivalente |
1,1.13 | Assicurati che le autorizzazioni del file . conf dell'amministratore siano impostate su 600 o più restrittive (automatiche) |
L1 | Conforme |
1,1.14 | Assicurati che l'opzione . della proprietà del file di amministrazione sia impostata su root:root (Automatico) |
L1 | Conforme |
1,1.15 | Assicurati che le autorizzazioni del file conf. dello scheduler siano impostate su 644 o più restrittive (automatiche) |
L1 | Conforme |
1,1.16 | Assicurati che la proprietà del file . conf scheduler sia impostata su root:root (Automatico) |
L1 | Controllo equivalente |
1,1.17 | Assicurati che le autorizzazioni del file controller-manager. conf siano impostate su 644 o più restrittive (automatiche) |
L1 | Conforme |
1,1.18 | Assicurati che la proprietà del file controller-manager. conf sia impostata su root:root (automatica) |
L1 | Controllo equivalente |
1,1.19 | Assicurati che la directory PKI di Kubernetes e la proprietà dei file siano impostate su root:root (automatiche) |
L1 | Controllo equivalente |
1,1.20 | Assicurati che le autorizzazioni del file del certificato PKI di Kubernetes siano impostate su 644 o più restrittive (manuale). |
L1 | Conforme |
1,1.21 | Assicurati che le autorizzazioni del file della chiave PKI di Kubernetes siano impostate su 600 (manuale) |
L1 | Controllo equivalente |
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 | Conforme |
1,2,3 | Assicurati che -- NegaServiceExternalIPs non sia impostato (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 (automatico) |
L1 | Conforme |
1,2.8 | Assicurati che l'argomento --authorization-mode includa 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 per il 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 di controllo di ammissione AlwaysPullImages sia impostato (manuale) | L1 | Avviso |
1,2.13 | Assicurati che il plug-in di controllo di ammissione SecurityContextNega sia impostato se PodSecurityPolicy non viene utilizzato (manuale) | L1 | Avviso |
1,2.14 | Assicurati che il plug-in di controllo di ammissione ServiceAccount sia impostato su (Automatico) | L1 | Conforme |
1,2.15 | Assicurati che il plug-in per il controllo di ammissione NamespaceLifecycle sia impostato (Automatico) | L1 | Conforme |
1,2.16 | Assicurati che il plug-in per il 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 | Conforme |
1,2.20 | Assicurati che l'argomento --audit-log-maxage sia impostato su 30 o come opportuno (automatico) |
L1 | Conforme |
1,2.21 | Assicurati che l'argomento --audit-log-maxbackup sia impostato su 10 o come opportuno (automatico) |
L1 | Conforme |
1,2.22 | Assicurati che l'argomento --audit-log-maxsize sia impostato su 100 o come opportuno (automatico) |
L1 | Conforme |
1,2.23 | Assicurati che l'argomento --request-timeout sia impostato come 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 come appropriato (Manuale) |
L1 | Conforme |
1,2.31 | Assicurati che i provider di crittografia siano configurati correttamente (manuale) | L1 | Conforme |
1,2.32 | Assicurati che il server API utilizzi solo crittografie crittografiche efficaci (manuali) | L1 | Conforme |
1,3 | Gestore controller | ||
1,3,1 | Assicurati che l'argomento --terminated-pod-gc-threshold sia impostato come 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 PivotKubeletServerCertificate 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,4 | 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 | cis-1,23 | ||
2 | Configurazione del nodo Ethernet | ||
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 | cis-1,23 | ||
3,1 | Autenticazione e autorizzazione | ||
3,1,1 | L'autenticazione del certificato 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) | L1 | Conforme |
3.2.2 | Assicurati che i criteri di controllo coprano i principali problemi di sicurezza (manuali) | L2 | Controllo equivalente |
4 | cis-1,23 | ||
4,1 | File di configurazione dei nodi worker | ||
4.1.1 | Assicurati che le autorizzazioni del file del servizio kubelet siano impostate su 644 o più restrittive (automatiche) |
L1 | Conforme |
4.1.2 | Assicurati che la proprietà del file del servizio kubelet sia impostata su root:root (Automatica) |
L1 | Conforme |
4.1.3 | Se esiste un file kubeconfig del proxy, assicurati che le autorizzazioni siano impostate su 644 o su un valore più restrittivo (manuale). |
L1 | Conforme |
4.1.4 | Se il file kubeconfig del proxy esiste, verifica 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 su un valore più restrittivo (automatico) |
L1 | Conforme |
4.1.6 | Assicurati che l'opzione per la proprietà dei file --kubeconfig kubelet. conf sia impostata su root:root (automatica) |
L1 | Conforme |
4,1,7 | Assicurati che le autorizzazioni del 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à del file delle autorità di certificazione client sia impostata su root:root (manuale). |
L1 | Conforme |
4,1,9 | Assicurati che le autorizzazioni del file kubelet di configurazione di --config siano impostate su 644 o più restrittive (automatiche) |
L1 | Conforme |
4.1.10 | Assicurati che la proprietà del file di configurazione del kubelet --config sia impostata su root:root (automatica) |
L1 | Conforme |
4,2 | Cubino | ||
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 (automatico) |
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 un livello che garantisca l'acquisizione degli 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) |
L1 | Controllo equivalente |
4.2.11 | Assicurati che l'argomento --rotate-certificates non sia impostato su false (automatico) |
L1 | Conforme |
4.2.12 | Verifica che l'argomento PivotKubeletServerCertificate sia impostato su true (Manuale). | L1 | Conforme |
4.2.13 | Assicurati che kubelet utilizzi solo crittografie crittografiche efficaci (manuali) | L1 | Controllo equivalente |
Descrizioni degli errori e dei controlli equivalenti per i cluster di amministrazione dei cluster Anthos su Bare Metal:
# | Suggerimento | Livello | Stato | Valore | Motivazione |
---|---|---|---|---|---|
1,1,9 | Assicurati che le autorizzazioni del file di Container Network Interface siano impostate su 644 o su un valore più restrittivo (manuale). |
L1 | Controllo equivalente | 755 |
Il percorso dell'interfaccia di rete di Anthos clusters on bare metal è /opt/cni/bin e la relativa autorizzazione è impostata su 755 per il normale funzionamento del cluster. |
1,1.11 | Assicurati che le autorizzazioni della directory dei dati etcd siano impostate su 700 o su un valore più restrittivo (automatico). |
L1 | Controllo equivalente | 755 |
La directory dei dati etcd ha le autorizzazioni predefinite per 755 , ma le relative sottodirectory sono 700 . |
1,1.12 | Assicurati che la proprietà della directory dei dati etcd sia impostata su etcd:etcd (automatica) |
L1 | Controllo equivalente | 2003:2003 |
La directory dei dati etcd, /var/lib/etcd, appartiene a 2003:2003 come risultato del piano di controllo rootless, per una maggiore sicurezza. |
1,1.16 | Assicurati che la proprietà del file . conf scheduler sia impostata su root:root (Automatico) |
L1 | Controllo equivalente | 2002:2002 |
Anthos clusters on bare metal, a partire dalla release 1.9.0, implementa il piano di controllo rootless per una maggiore sicurezza. |
1,1.18 | Assicurati che la proprietà del file controller-manager. conf sia impostata su root:root (automatica) |
L1 | Controllo equivalente | 2001:2001 |
Anthos clusters on bare metal, a partire dalla release 1.9.0, implementa il piano di controllo rootless per una maggiore sicurezza. |
1,1.19 | Assicurati che la directory PKI di Kubernetes e la proprietà dei file siano impostate su root:root (automatiche) |
L1 | Controllo equivalente | variable:variable |
Anthos clusters on bare metal, a partire dalla release 1.9.0, implementa il piano di controllo rootless per una maggiore sicurezza. |
1,1.21 | Assicurati che le autorizzazioni del file della chiave PKI di Kubernetes siano impostate su 600 (manuale) |
L1 | Controllo equivalente | 600~640 |
Anthos clusters on bare metal, a partire dalla release 1.9.0, implementa il piano di controllo rootless per una maggiore sicurezza. |
1,2,1 | Assicurati che l'argomento --anonymous-auth sia impostato su false (Manuale) |
L1 | 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 per il controllo di ammissione EventRateLimit sia impostato (manuale) | L1 | Avviso | ||
1,2.12 | Assicurati che il plug-in di controllo di ammissione AlwaysPullImages sia impostato (manuale) | L1 | Avviso | non impostato | Il controller di ammissione AlwaysPullImages offre una certa protezione per le immagini dei registry privati in cluster multitenant non cooperativi, a costo di rendere i registri dei container un singolo punto di errore per la creazione di nuovi pod nell'intero cluster. Anthos clusters on bare metal non abilita il controller di ammissione AlwaysPullImages, che lascia agli amministratori del cluster l'implementazione del criterio di ammissione che consente loro di trovare un compromesso. |
1,2.13 | Assicurati che il plug-in di controllo di ammissione SecurityContextNega sia impostato se PodSecurityPolicy non viene utilizzato (manuale) | L1 | Avviso | non impostato | Anthos clusters on bare metal non abilitano il criterio di sicurezza dei pod. L'abilitazione della sicurezza dei pod è abilitata nei cluster Kubernetes 1.23 per impostazione predefinita, consulta https://kubernetes.io/docs/concepts/security/pod-security-admission/ |
3.2.2 | Assicurati che i criteri di controllo coprano i principali problemi di sicurezza (manuali) | L2 | Controllo equivalente | non impostato | Anthos clusters on bare metal acquisisce gli audit log, ma non utilizza questi flag per i controlli, ma più su logging e monitoraggio. |
4,2,4 | Assicurati che l'argomento --read-only-port sia impostato su 0 (Manuale) |
L1 | Non conforme | 10255 | Al momento, Anthos clusters on bare metal imposta l'argomento --read-only-port su 10255 per raccogliere le metriche da kubelet. |
4.2.6 | Assicurati che l'argomento --protect-kernel-defaults sia impostato su true (automatico) |
L1 | Non conforme | false |
Le macchine cluster Anthos su Bare Metal non proteggono i valori predefiniti del kernel da Kubernetes, poiché i carichi di lavoro dei clienti potrebbero volerli modificare. |
4,2,9 | Assicurati che l'argomento --event-qps sia impostato su 0 o un livello che garantisca l'acquisizione degli eventi appropriata (Manuale) |
L2 | Avviso | non impostato | Gli eventi sono oggetti Kubernetes archiviati in etcd. Per evitare di sovraccaricare gli oggetti, questi vengono conservati solo per un'ora e non costituiscono un meccanismo di controllo della sicurezza appropriato. Se consenti eventi illimitati come suggerito in questo controllo, il cluster è esposto a rischi DoS non necessari e contraddice il consiglio di utilizzare l'ammissione EventRateLimits. 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) |
L1 | Controllo equivalente | non impostato | Anthos clusters on bare metal gestisce il server kubelet TLS utilizzando il flag --rotate-server-certificates. |
4.2.13 | Assicurati che kubelet utilizzi solo crittografie crittografiche efficaci (manuali) | L1 | Controllo equivalente | Nei cluster Anthos su nodi Bare Metal, kubelet utilizza le suite di crittografia Go predefinite. Anthos clusters on bare metal non forniscono opzioni di configurazione per consentire agli utenti di personalizzare la selezione delle suite di crittografia. Tieni presente che i client moderni negoziano suite di crittografia e non utilizzeranno quelle deboli se sono disponibili reciproche chiavi di crittografia. |
Come controllare i benchmark
Istruzioni specifiche per controllare ciascun Consiglio sono disponibili nell'ambito del CIS Benchmark 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 aiutarti.
Controllo automatico del benchmark CIS Kubernetes
Puoi utilizzare uno strumento open source
kube-bench
per testare la configurazione del tuo cluster in base al benchmark CIS Kubernetes.
Assicurati di specificare la versione appropriata, ad esempio
kube-bench node --benchmark cis-1.23