Questa pagina introduce il benchmark CIS Kubernetes, fornisce una valutazione e spiega cosa fa Google Distributed Cloud per soddisfare i consigli.
Il 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 security posture. Il benchmark è legato a una release specifica 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.
Versioni
La tabella seguente elenca le versioni di Distributed Cloud, Kubernetes e del benchmark CIS Kubernetes utilizzate per eseguire la valutazione descritta in questo documento:
| Versione di Distributed Cloud | Versione di Kubernetes | Versione del benchmark CIS Kubernetes |
|---|---|---|
| 1.4.0 - Local Control Plane | 1,25 | 1,70 |
Accedere al benchmark
Il benchmark CIS Kubernetes è disponibile sul sito web del CIS.
Livelli di raccomandazione
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 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 di seguito:
| Punteggio | Descrizione |
|---|---|
| Automatico | Rappresenta i consigli per i quali la valutazione di un controllo tecnico può essere completamente automatizzata e convalidata in uno stato di superamento/esito negativo. I suggerimenti includeranno le informazioni necessarie per implementare l'automazione. |
| Manuale | Rappresenta i consigli per i quali la valutazione di un controllo tecnico non può essere completamente automatizzata e richiede tutti o alcuni passaggi manuali per verificare che lo stato configurato sia impostato come previsto. Lo stato previsto può variare a seconda dell'ambiente. |
Stato dei cluster del control plane locale Distributed Cloud
| # | Suggerimento | 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 644 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 644 o su un valore più restrittivo (automatico) |
L1 | Pass |
| 1.1.4 | Assicurati che la proprietà del file di specifica del pod 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 644 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 644 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 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 | Pass |
| 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 (automatico) |
L1 | Controllo equivalente |
| 1.1.13 | Assicurati che le autorizzazioni del file admin.conf siano impostate su 600 o su un valore più restrittivo (automatico) |
L1 | Pass |
| 1.1.14 | Assicurati che la proprietà del file admin.conf sia impostata su root:root (automatico) |
L1 | Pass |
| 1.1.15 | Assicurati che le autorizzazioni del file scheduler.conf siano impostate su 644 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 | Controllo equivalente |
| 1.1.17 | Assicurati che le autorizzazioni del file controller-manager.conf siano impostate su 644 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 | Controllo equivalente |
| 1.1.19 | Assicurati che la proprietà della directory e dei file PKI di Kubernetes sia impostata su root:root (automatico) |
L1 | 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). |
L1 | Controllo equivalente |
| 1.1.21 | Assicurati che le autorizzazioni del file di chiavi PKI di Kubernetes siano impostate su 600 (manuale) |
L1 | Pass |
| 1.2 | Server API | ||
| 1.2.1 | Assicurati che l'argomento --anonymous-auth sia impostato su false (manuale) |
L1 | Pass |
| 1.2.2 | Assicurati che il parametro --token-auth-file non sia impostato (automatico) |
L1 | Pass |
| 1.2.3 | Assicurati che --DenyServiceExternalIPs non sia impostato (automatico) |
L1 | Fail |
| 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 | Fail |
| 1.2.9 | Assicurati che il plug-in di controllo dell'ammissione EventRateLimit sia impostato (manuale) | L1 | Pass |
| 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 (manuale) | L1 | Fail |
| 1.2.12 | Assicurati che il plug-in di controllo dell'ammissione SecurityContextDeny sia impostato se PodSecurityPolicy non viene utilizzato (manuale) | L1 | Avviso |
| 1.2.13 | Assicurati che il plug-in di controllo dell'ammissione ServiceAccount sia impostato (automatico) | L1 | Pass |
| 1.2.14 | Assicurati che il plug-in di controllo dell'ammissione NamespaceLifecycle sia impostato (automatico) | L1 | Pass |
| 1.2.15 | Assicurati che il plug-in di controllo dell'ammissione NodeRestriction sia impostato (automatico) | L1 | Pass |
| 1.2.16 | Assicurati che l'argomento --secure-port non sia impostato su 0 (automatico) |
L1 | Pass |
| 1.2.17 | Assicurati che l'argomento --profiling sia impostato su false (automatico) |
L1 | Pass |
| 1.2.18 | Assicurati che l'argomento --audit-log-path sia impostato (automatico) |
L1 | Fail |
| 1.2.19 | Assicurati che l'argomento --audit-log-maxage sia impostato su 30 o su un valore appropriato (Automated) |
L1 | Fail |
| 1.2.20 | Assicurati che l'argomento --audit-log-maxbackup sia impostato su 10 o su un valore appropriato (Automated) |
L1 | Fail |
| 1.2.21 | Assicurati che l'argomento --audit-log-maxsize sia impostato su 100 o su un valore appropriato (Automated) |
L1 | Fail |
| 1.2.22 | Assicurati che l'argomento --request-timeout sia impostato in modo appropriato (manuale) |
L1 | Fail |
| 1.2.23 | Assicurati che l'argomento --service-account-lookup sia impostato su true (automatico) |
L1 | Pass |
| 1.2.24 | Assicurati che l'argomento --service-account-key-file sia impostato in modo appropriato (automatico) |
L1 | Pass |
| 1.2.25 | Assicurati che gli argomenti --etcd-certfile e --etcd-keyfile siano impostati in modo appropriato (automatico) |
L1 | Pass |
| 1.2.26 | Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati in modo appropriato (automatico) |
L1 | Pass |
| 1.2.27 | Assicurati che l'argomento --client-ca-file sia impostato in modo appropriato (automatico) |
L1 | Pass |
| 1.2.28 | Assicurati che l'argomento --etcd-cafile sia impostato in modo appropriato (automatico) |
L1 | Pass |
| 1.2.29 | Assicurati che l'argomento --encryption-provider-config sia impostato in modo appropriato (manuale) |
L1 | Pass |
| 1.2.30 | Assicurati che i fornitori di servizi di crittografia siano configurati correttamente (manuale) | L1 | Pass |
| 1.2.31 | 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 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 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 | Pass |
| 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 | Pass |
| 2 | ** etcd Configurazione del nodo** |
||
| 2.1 | Assicurati che gli argomenti --cert-file e --key-file siano impostati in modo appropriato (automatico) |
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 in modo appropriato (automatico) |
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 univoca per etcd (manuale) | L2 | Pass |
| 3 | Configurazione del control plane | ||
| 3.1 | Autenticazione e autorizzazione | ||
| 3.1.1 | L'autenticazione con certificato client non deve essere utilizzata per gli utenti (manuale) | L2 | Pass |
| 3.2 | Logging | ||
| 3.2.1 | Assicurati che venga creata una policy di controllo minima (manuale) | L1 | Pass |
| 3.2.2 | Assicurati che il criterio di controllo copra i principali problemi di sicurezza (manuale) | L2 | Fail |
| 4 | Configurazione della sicurezza del nodo worker | ||
| 4.1 | File di configurazione dei nodi worker | ||
| 4.1.1 | Assicurati che le autorizzazioni del file di servizio kubelet siano impostate su 644 o su un valore più restrittivo (automatico) |
L1 | Fail |
| 4.1.2 | Assicurati che la proprietà del file di servizio kubelet sia impostata su root:root (automatica) |
L1 | Pass |
| 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 | Pass |
| 4.1.4 | Se esiste il file kubeconfig del proxy, assicurati 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 su un valore più restrittivo (automatico) |
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 del file delle autorità di certificazione siano impostate su 644 o su un valore più restrittivo (manuale) |
L1 | Fail |
| 4.1.8 | Assicurati che la proprietà del file delle autorità di certificazione client sia impostata su root:root (manuale). |
L1 | Pass |
| 4.1.9 | Assicurati che il file di configurazione kubelet --config abbia le autorizzazioni impostate su 644 o su un valore più restrittivo (automatizzato) |
L1 | Fail |
| 4.1.10 | Assicurati che la proprietà del file di configurazione --config di kubelet sia impostata su root:root (automatico) |
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 in modo 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 | Pass |
| 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) |
L2 | Pass |
| 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) |
L1 | Controllo equivalente |
| 4.2.10 | Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati in modo appropriato (manuale) |
L1 | Pass |
| 4.2.11 | Assicurati che l'argomento --rotate-certificates non sia impostato su false (automatico) |
L1 | Pass |
| 4.2.12 | Verifica che l'argomento RotateKubeletServerCertificate sia impostato su true (manuale) | L1 | Pass |
| 4.2.13 | Assicurati che Kubelet utilizzi solo cifrari crittografici sicuri (manuale) | L1 | Fail |
Errori e controlli equivalenti per i cluster del control plane locale di Distributed Cloud
| # | Suggerimento | Livello | Stato | Valore | Giustificazione |
|---|---|---|---|---|---|
| 1 | Configurazione della sicurezza del control plane | ||||
| 1.1.9 | Assicurati che le autorizzazioni del file Container Network Interface siano impostate su 644 o su un valore più restrittivo (manuale). |
L1 | Controllo equivalente | 755 |
Nessuno. |
| 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 755 predefinite, ma le relative sottodirectory utilizzano 700. |
| 1.1.12 | Assicurati che la proprietà della directory dei dati etcd sia impostata su etcd:etcd (automatico) |
L1 | Controllo equivalente | 2003:2003 |
La directory dei dati etcd, /var/lib/etcd, è di proprietà di 2003:2003 a causa del control plane senza root per una maggiore sicurezza. |
| 1.1.16 | Assicurati che la proprietà del file scheduler.conf sia impostata su root:root (automatico) |
L1 | Controllo equivalente | 2002:2002 |
scheduler.conf è di proprietà di 2002:2002 a causa del piano di controllo senza privilegi di 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 |
controller-manager.conf è di proprietà di 2001:2001 a causa del piano di controllo senza privilegi di root per una maggiore sicurezza. |
| 1.1.19 | Assicurati che la proprietà della directory e dei file PKI di Kubernetes sia impostata su root:root (automatico) |
L1 | Controllo equivalente | Variabile | La directory PKI, /etc/kubernetes/pki, è di proprietà di root:root; i file all'interno della directory hanno vari proprietari. Ciò è dovuto al piano di controllo rootless per una maggiore sicurezza. |
| 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). |
L1 | Controllo equivalente | 644 |
Ciò è dovuto al piano di controllo rootless per una maggiore sicurezza. |
| 1.2 | Server API | ||||
| 1.2.3 | Assicurati che --DenyServiceExternalIPs non sia impostato (automatico) |
L1 | Fail | ||
| 1.2.9 | Assicurati che l'argomento --authorization-mode includa RBAC (automatico) |
L1 | Fail | Il controller di ammissione Event Rate Limit è una funzionalità alpha di Kubernetes. Google Distributed Cloud non supporta le funzionalità non GA. | |
| 1.2.11 | Assicurati che il plug-in di controllo dell'ammissione AlwaysAdmit non sia impostato (automatico) |
L1 | Fail | ||
| 1.2.12 | Assicurati che il plug-in di controllo dell'ammissione AlwaysPullImages sia impostato (Manuale) |
L1 | Fail | Il controller di ammissione AlwaysPullImages fornisce una certa protezione per le immagini del registro privato nei cluster multitenant non cooperativi a costo di rendere i registri dei container singoli punti di errore per la creazione di nuovi pod nell'intero cluster. I cluster Distributed Cloud non abilitano il controller di ammissione AlwaysPullImages, quindi spetta agli amministratori del cluster implementare la policy di ammissione per effettuare questo compromesso. |
|
| 1.2.18 | Assicurati che l'argomento --audit-log-path sia impostato (automatico) |
L1 | Fail | Distributed Cloud acquisisce gli audit log, ma non utilizza questo flag per il controllo. Per saperne di più, consulta Log di controllo. | |
| 1.2.19 | Assicurati che l'argomento --audit-log-maxage sia impostato su 30 o su un valore appropriato (Automated) |
L1 | Fail | Distributed Cloud acquisisce gli audit log, ma non utilizza questo flag per il controllo. Per saperne di più, consulta Log di controllo. | |
| 1.2.20 | Assicurati che l'argomento --audit-log-maxbackup sia impostato su 10 o su un valore appropriato (Automated) |
L1 | Fail | Distributed Cloud acquisisce gli audit log, ma non utilizza questo flag per il controllo. Per saperne di più, consulta Log di controllo. | |
| 1.2.21 | Assicurati che l'argomento --audit-log-maxsize sia impostato su 100 o su un valore appropriato (Automated) |
L1 | Fail | Distributed Cloud acquisisce gli audit log, ma non utilizza questo flag per il controllo. Per saperne di più, consulta Log di controllo. | |
| 1.2.22 | Assicurati che l'argomento --request-timeout sia impostato in modo appropriato (manuale) |
L1 | Fail | Distributed Cloud acquisisce gli audit log, ma non utilizza questo flag per il controllo. Per saperne di più, consulta Log di controllo. | |
| 3 | Configurazione del control plane | ||||
| 3.2.2 | Assicurati che il criterio di controllo copra i principali problemi di sicurezza (manuale) | L2 | Fail | ||
| 4 | Configurazione della sicurezza del nodo worker | ||||
| 4.1.1 | Assicurati che le autorizzazioni del file di servizio kubelet siano impostate su 644 o su un valore più restrittivo (automatico) |
L1 | Fail | 755 |
|
| 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 | Fail | ||
| 4.1.9 | Assicurati che il file di configurazione kubelet --config abbia le autorizzazioni impostate su 644 o su un valore più restrittivo (automatizzato) |
L1 | Fail | 644 |
|
| 4.2.4 | Assicurati che l'argomento --read-only-port sia impostato su 0 (manuale). |
L1 | Fail | I cluster Distributed Cloud impostano l'argomento --read-only-port su 10255 per la raccolta delle metriche kubelet. |
|
| 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) |
L1 | Controllo equivalente | I cluster Distributed Cloud gestiscono TLS del server kubelet utilizzando il flag –rotate-server-certificates. |
|
| 4.2.13 | Assicurati che Kubelet utilizzi solo cifrari crittografici sicuri (manuale) | L1 | Fail |