Questo documento presenta il benchmark CIS Kubernetes, spiega come controllare la tua conformità con il benchmark e spiega cosa configura i cluster Anthos su Bare Metal in cui non puoi implementare personalmente un consiglio.
Utilizzo dei benchmark CIS
Il Centro per la sicurezza Internet (CIS) rilascia benchmark per suggerimenti sulla best practice in materia di sicurezza. CIS Kubernetes Benchmark fornisce una serie di suggerimenti per la configurazione di Kubernetes per supportare una solida posizione di sicurezza. Il benchmark è associato a una specifica versione di Kubernetes. Il benchmark Kubernetes CIS è stato scritto per la distribuzione open source di Kubernetes e deve essere il più universale possibile in tutte le distribuzioni.
Versioni
Tieni presente che i numeri di versione di diversi benchmark potrebbero non corrispondere.
Questo documento fa riferimento alle seguenti versioni:
Versione Anthos | Versione di Kubernetes | Versione benchmark CIS Kubernetes |
---|---|---|
1,12,0 | 1,23,5 | 1,23 |
Benchmark CIS Kubernetes
Accedere al benchmark
Il benchmark CIS Kubernetes è disponibile sul sito web di CSS.
Livelli di suggerimento
Nel benchmark CIS Kubernetes,
Livello | Descrizione |
---|---|
Livello 1 | I consigli hanno lo scopo di: |
Livello 2 | Estende il profilo di livello 1. I consigli presentano una o più delle seguenti caratteristiche: |
Stato test
Per ogni consiglio è incluso uno stato della valutazione, Lo stato della valutazione indica se il consiglio consigliato può essere automatizzato o se è necessario implementare i passaggi manuali. Entrambi gli stati sono altrettanto 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 in uno stato di superamento/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 alcuni o alcuni passaggi manuali per verificare che lo stato configurato sia impostato come previsto. Lo stato previsto può variare a seconda dell'ambiente. |
Valutazione sui cluster Anthos su Bare Metal
Utilizziamo i seguenti valori per specificare lo stato dei suggerimenti Kubernetes nei cluster Anthos su Bare Metal:
Stato | Descrizione |
---|---|
Pass | Rispetta un consiglio di benchmark. |
Fail | Non è conforme a un consiglio di benchmark. |
Controllo equivalente | Non è conforme ai termini esatti nel Benchmark consigliato, ma esistono altri meccanismi nei cluster Anthos su Bare Metal per fornire controlli di sicurezza equivalenti. |
Dipende dall'ambiente | I cluster Anthos su Bare Metal non configurano elementi relativi a questo suggerimento. La configurazione dell'utente determina se il suo ambiente è conforme a un suggerimento di benchmark. |
Cluster Anthos su architettura Bare Metal
I cluster Anthos su Bare Metal supportano più configurazioni e tipi di cluster. Ogni tipo di cluster supportato, amministratore, utente, ibrido e autonomo, 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 dei cluster supportate dai cluster Anthos su Bare Metal sono disponibili in Scegliere i modelli di deployment.
Stato dei cluster Anthos su Bare Metal
Quando crei un nuovo cluster con la versione specificata, ecco qui 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 dei file delle specifiche del pod del server API siano impostate su 644 o più restrittiva (automatica). |
L1 | Pass |
1,1,2 | Assicurati che la proprietà del file della specifica del pod del server API sia impostata su root:root (automatica) |
L1 | Pass |
1,1,3 | Assicurati che le autorizzazioni dei file delle specifiche del pod del gestore del controller siano impostate su 644 o più restrittive (automatiche). |
L1 | Pass |
1,1,4 | Assicurati che la proprietà dei file della specifica del pod del gestore del controller sia impostata su root:root (automatica) |
L1 | Pass |
1,1,5 | Assicurati che le autorizzazioni dei file delle specifiche del pod dello scheduler siano impostate su 644 o più restrittive (automatiche). |
L1 | Pass |
1,1,6 | Assicurati che la proprietà del file della specifica del pod dello scheduler sia impostata su root:root (Automatico) |
L1 | Pass |
1,1,7 | Assicurati che le autorizzazioni dei file della specifica del pod etcd siano impostate su 644 o più restrittiva (automatica). |
L1 | Pass |
1,1,8 | Assicurati che la proprietà del file della specifica del pod etcd sia impostata su root:root (automatica) |
L1 | Pass |
1,1,9 | Assicurati che le autorizzazioni dei file di Container Network Interface siano impostate su 644 o più restrittive (manuali). |
L1 | Controllo equivalente |
1,1/10 | Assicurati che la proprietà del file Container Network Interface sia impostata su root:root (Manuale) |
L1 | Pass |
1,1/11 | Assicurati che le autorizzazioni per la directory dei dati etcd siano impostate su 700 o più restrittiva (automatica). |
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 dei file di amministrazione siano impostate su 600 o più restrittiva (automatica) |
L1 | Pass |
1,1/14 | Assicurati che l'amministratore. del file di proprietà sia impostato su root:root (automatico) |
L1 | Pass |
1,1/15 | Assicurati che le autorizzazioni del file dello scheduler. conf siano impostate su 644 o più restrittive (automatiche). |
L1 | Pass |
1,1/16 | Assicurati che la proprietà del file dello scheduler. conf sia impostata su root:root (automatica) |
L1 | Controllo equivalente |
1,1/17 | Assicurati che le autorizzazioni del file controller-manager. conf siano impostate su 644 o più restrittive (automatiche) |
L1 | Pass |
1/1/18 | Assicurati che la proprietà del file controller-manager. conf sia impostata su root:root (Automatico) |
L1 | Controllo equivalente |
1/1/19 | Assicurati che la directory PKI di Kubernetes e la proprietà dei file siano impostate su root:root (Automatico) |
L1 | Controllo equivalente |
1,1/20 | Assicurati che le autorizzazioni dei file del certificato PKI di Kubernetes siano impostate su 644 o più restrittive (manuali). |
L1 | Pass |
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 | Pass |
1,2,3 | Assicurati che -- NegaServiceExternalIPs non sia impostato (automatico) |
L1 | Pass |
1,2,4 | Assicurati che l'argomento --kubelet-https sia impostato su true (automatico) |
L1 | Pass |
1,2,5 | Assicurati che gli argomenti --kubelet-client-certificate e --kubelet-client-key siano impostati come appropriati (automatici) |
L1 | Pass |
1,2,6 | Assicurati che l'argomento --kubelet-certificate-authority sia impostato come appropriato (automatico) |
L1 | Pass |
1,2,7 | Assicurati che l'argomento --authorization-mode non sia impostato su AlwaysAllow (automatico) |
L1 | Pass |
1,2,8 | Assicurati che l'argomento --authorization-mode includa il nodo (automatico) |
L1 | Pass |
1,2,9 | Assicurati che l'argomento --authorization-mode includa RBAC (Automatico) |
L1 | Pass |
1,2:10 | Assicurati che il plug-in per il controllo dell'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 | Pass |
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 di controllo di ammissione SecurityContextNega sia impostato se PodSecurityPolicy non viene utilizzato (Manual) | L1 | Avviso |
1,2:14 | Assicurati che il plug-in di controllo dell'ammissione ServiceAccount sia impostato (automatico) | L1 | Pass |
1,2:15 | Assicurati che il plug-in per il controllo dell'ammissione NamespaceLifecycle sia impostato su (Automatizza) | L1 | Pass |
1,2,16 | Assicurati che il plug-in di controllo di ammissione NodeRestriction sia impostato (automatico) | L1 | Pass |
1,2:17 | Assicurati che l'argomento --secure-port non sia impostato su 0 (automatico) |
L1 | Pass |
1,2:18 | Assicurati che l'argomento --profiling sia impostato su false (automatico) |
L1 | Pass |
1,2/19 | Assicurati che l'argomento --audit-log-path sia impostato (automatico) |
L1 | Pass |
1,2,20 | Assicurati che l'argomento --audit-log-maxage sia impostato su 30 o a seconda dei casi (automatico) |
L1 | Pass |
1,2/21 | Assicurati che l'argomento --audit-log-maxbackup sia impostato su 10 o a seconda dei casi (automatico) |
L1 | Pass |
1,2,22 | Assicurati che l'argomento --audit-log-maxsize sia impostato su 100 o a seconda dei casi (automatico) |
L1 | Pass |
1,2,23 | Assicurati che l'argomento --request-timeout sia impostato correttamente (Manuale) |
L1 | Pass |
1,2,24 | Assicurati che l'argomento --service-account-lookup sia impostato su true (automatico) |
L1 | Pass |
1,2,25 | Assicurati che l'argomento --service-account-key-file sia impostato come appropriato (automatico) |
L1 | Pass |
1,2,26 | Assicurati che gli argomenti --etcd-certfile e --etcd-keyfile siano impostati come appropriati (automatici) |
L1 | Pass |
1,2,27 | Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati come appropriati (automatici) |
L1 | Pass |
1,2,28 | Assicurati che l'argomento --client-ca-file sia impostato come appropriato (automatico) |
L1 | Pass |
1,2,29 | Assicurati che l'argomento --etcd-cafile sia impostato come appropriato (automatico) |
L1 | Pass |
1,2,30 | Assicurati che l'argomento --encryption-provider-config sia impostato correttamente (Manuale) |
L1 | Pass |
1,2,31 | Assicurati che i provider di crittografia siano configurati correttamente (manuale) | L1 | Pass |
1,2,32 | Assicurati che il server API utilizzi solo crittografie crittografiche efficaci (manuali) | L1 | Pass |
1,3 | Gestore del controller | ||
1,3,1 | Assicurati che l'argomento --terminated-pod-gc-threshold sia impostato correttamente (Manuale) |
L1 | Pass |
1,3,2 | Assicurati che l'argomento --profiling 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 come appropriato (automatico) |
L1 | Pass |
1,3,5 | Assicurati che l'argomento --root-ca-file sia impostato come appropriato (automatico) |
L1 | Pass |
1,3,6 | Assicurati che l'argomento RuotaKubeletServerCertificate 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 | Pass |
1,4 | Pianificazione | ||
1,4 | Assicurati che l'argomento --profiling sia impostato su false (automatico) |
L1 | Pass |
1,4 | Assicurati che l'argomento --bind-address sia impostato su 127.0.0.1 (automatico) |
L1 | Pass |
2 | cis-1.23 | ||
2 | Configurazione dei nodi Etcd | ||
2.1 | Assicurati che gli argomenti --cert-file e --key-file siano impostati come appropriati (automatici) |
L1 | Pass |
2.2 | Assicurati che l'argomento --client-cert-auth sia impostato su true (automatico) |
L1 | Pass |
2,3 | Assicurati che l'argomento --auto-tls non sia impostato su true (automatico) |
L1 | Pass |
2,4 | Assicurati che gli argomenti --peer-cert-file e --peer-key-file siano impostati come appropriati (automatici) |
L1 | Pass |
2,5 | Assicurati che l'argomento --peer-client-cert-auth sia impostato su true (automatico) |
L1 | Pass |
2,6 | Assicurati che l'argomento --peer-auto-tls non sia impostato su true (automatico) |
L1 | Pass |
2.7 | Assicurati che venga utilizzata un'autorità di certificazione unica per etcd (Manual) | L2 | Pass |
3 | cis-1.23 | ||
3,1 | Autenticazione e autorizzazione | ||
3,1,1 | Non deve essere utilizzata l'autenticazione dei certificati client per gli utenti (manuale). | L2 | Pass |
3,2 | Logging | ||
3,2,1 | Assicurati che venga creato un criterio di controllo minimo (manuale) | L1 | Pass |
3,2,2 | Assicurati che i criteri di controllo coprano i principali problemi di sicurezza (manuale) | 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 | Pass |
4,1,2 | Assicurati che la proprietà del file del servizio kubelet sia impostata su root:root (Automatico) |
L1 | Pass |
4,1,3 | Se il file kubeconfig del proxy esiste, assicurati che le autorizzazioni siano impostate su 644 o più restrittiva (manuale) |
L1 | Pass |
4,1,4 | Se il file kubeconfig del proxy esiste, verifica che la proprietà sia impostata su root:root (manuale) |
L1 | Pass |
4,1,5 | Assicurati che le autorizzazioni del file --kubeconfig kubelet. conf siano impostate su 644 o più restrittiva (automatica). |
L1 | Pass |
4,1,6 | Assicurati che la proprietà del file --kubeconfig kubelet. conf sia impostata su root:root (Automatico) |
L1 | Pass |
4,1,7 | Assicurati che le autorizzazioni dei file delle autorità di certificazione siano impostate su 644 o più restrittiva (manuale). |
L1 | Pass |
4,1,8 | Assicurati che la proprietà dei file delle autorità di certificazione del client sia impostata su root:root (Manuale) |
L1 | Pass |
4,1,9 | Assicurati che il file di configurazione di kubelet --config abbia le autorizzazioni impostate su 644 o più restrittive (automatiche) |
L1 | Pass |
4,1,10 | Assicurati che la proprietà del file di configurazione di kubelet --config sia impostata su root:root (automatica) |
L1 | Pass |
4,2 | Kubelet | ||
4,2,1 | Assicurati che l'argomento --anonymous-auth sia impostato su false (automatico) |
L1 | Pass |
4.2.2 | Assicurati che l'argomento --authorization-mode non sia impostato su AlwaysAllow (automatico) |
L1 | Pass |
4.2.3 | Assicurati che l'argomento --client-ca-file sia impostato come appropriato (automatico) |
L1 | Pass |
4,2,4 | Assicurati che l'argomento --read-only-port sia impostato su 0 (Manuale) |
L1 | Fail |
4,2,5 | Assicurati che l'argomento --streaming-connection-idle-timeout non sia impostato su 0 (Manuale) |
L1 | Pass |
4,2,6 | Assicurati che l'argomento --protect-kernel-defaults sia impostato su true (automatico) |
L1 | Fail |
4,2,7 | Assicurati che l'argomento --make-iptables-util-chains sia impostato su true (automatico) |
L1 | Pass |
4,2,8 | Assicurati che l'argomento --hostname-override non sia impostato (Manuale) |
L1 | Pass |
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 correttamente (Manuale) |
L1 | Controllo equivalente |
4.2.11 | Assicurati che l'argomento --rotate-certificates non sia impostato su false (automatico) |
L1 | Pass |
4.2.12 | Verifica che l'argomento RuotaKubeletServerCertificate sia impostato su true (Manuale) | L1 | Pass |
4.2.13 | Assicurati che Kubelet utilizzi solo crittografia crittografiche efficaci (manuali) | L1 | Controllo equivalente |
Descrizioni di errori e controlli equivalenti per i cluster Anthos sul cluster di amministrazione Bare Metal:
# | Suggerimento | Livello | Stato | Valore | Motivazione |
---|---|---|---|---|---|
1,1,9 | Assicurati che le autorizzazioni dei file di Container Network Interface siano impostate su 644 o più restrittive (manuali). |
L1 | Controllo equivalente | 755 |
I cluster Anthos sul percorso dell'interfaccia di rete di container Bare Metal sono /opt/cni/bin e la relativa 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 più restrittiva (automatica). |
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, è di proprietà di 2003:2003 come risultato del piano di controllo senza root per una maggiore sicurezza. |
1,1/16 | Assicurati che la proprietà del file dello scheduler. conf sia impostata su root:root (automatica) |
L1 | Controllo equivalente | 2002:2002 |
I cluster Anthos su Bare Metal, a partire dalla versione 1.9.0, implementa il piano di controllo senza root per una maggiore sicurezza. |
1/1/18 | Assicurati che la proprietà del file controller-manager. conf sia impostata su root:root (Automatico) |
L1 | Controllo equivalente | 2001:2001 |
I cluster Anthos su Bare Metal, a partire dalla versione 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à dei file siano impostate su root:root (Automatico) |
L1 | Controllo equivalente | variable:variable |
I cluster Anthos su Bare Metal, a partire dalla versione 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). |
L1 | Controllo equivalente | 600~640 |
I cluster Anthos su Bare Metal, a partire dalla versione 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) |
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 dell'ammissione EventRateLimit sia impostato (manuale). | L1 | Avviso | ||
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 privato in cluster multitenant non cooperativi, al costo di rendere i registri dei container un singolo punto di errore per la creazione di nuovi pod in tutto il cluster. I cluster Anthos su Bare Metal non abilitano il controller di ammissione AlwaysPullImages, il che lascia la decisione agli amministratori del cluster di implementare il criterio di ammissione per semplificare il processo. |
1,2,13 | Assicurati che il plug-in di controllo di ammissione SecurityContextNega sia impostato se PodSecurityPolicy non viene utilizzato (Manual) | L1 | Avviso | non impostato | I cluster Anthos su Bare Metal non abilitano i criteri di sicurezza dei pod. L'ammissione alla sicurezza dei pod è abilitata nei cluster 1.23 di Kubernetes per impostazione predefinita, vedi https://kubernetes.io/docs/concepts/security/pod-security-admission/ |
3,2,2 | Assicurati che i criteri di controllo coprano i principali problemi di sicurezza (manuale) | L2 | Controllo equivalente | non impostato | I cluster Anthos su Bare Metal acquisiscono gli audit log, ma non utilizzano questi flag per i controlli, relativi a logging e monitoraggio. |
4,2,4 | Assicurati che l'argomento --read-only-port sia impostato su 0 (Manuale) |
L1 | Fail | 10255 | Al momento, i cluster Anthos su Bare Metal impostano l'argomento --read-only-port su 10255 per la raccolta delle metriche da kubelet. |
4,2,6 | Assicurati che l'argomento --protect-kernel-defaults sia impostato su true (automatico) |
L1 | Fail | 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 voler modificarli. |
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 sovraccaricare gli oggetti, questi vengono conservati per un'ora e non rappresentano un meccanismo di controllo della sicurezza appropriato. Consentire un numero illimitato di eventi come suggerito in questo controllo espone il cluster a rischi DoS non necessari e contraddice il consiglio di utilizzare l'ammissione EventRateLimits. Gli eventi pertinenti 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 correttamente (Manuale) |
L1 | Controllo equivalente | non impostato | I cluster Anthos su Bare Metal gestiscono la crittografia TLS del server kubelet utilizzando il flag --rotate-server-certificates. |
4.2.13 | Assicurati che Kubelet utilizzi solo crittografia crittografiche efficaci (manuali) | L1 | 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 suite di crittografia e non utilizzeranno quelle meno efficaci se reciprocamente sono disponibili solidi crittografie. |
Come controllare i benchmark
Istruzioni specifiche per la verifica di ogni Suggerimento sono disponibili nel Benchmark CIS di riferimento. Tuttavia, potresti 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 di CIS Kubernetes Benchmark
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