Questo documento introduce il benchmark CIS Kubernetes. Inoltre, spiega:
- Come verificare la conformità al benchmark
- Che cosa configura GKE su AWS se non puoi implementare un consiglio personalmente.
Utilizzo dei benchmark CIS
Il Center for Internet Security (CIS) rilascia benchmark per consigli di sicurezza basati sulle best practice. Il benchmark CIS Kubernetes fornisce un insieme di consigli per configurare Kubernetes al fine di supportare una solida strategia di sicurezza. Il benchmark è associato a una release Kubernetes specifica. Il benchmark Kubernetes del CIS è scritto per la distribuzione Kubernetes open source e intende essere il più possibile applicabile a tutte le distribuzioni.
Versioni
Tieni presente che i numeri di versione dei diversi benchmark potrebbero non essere uguali.
Questo documento fa riferimento alle seguenti versioni:
Versione Anthos | Versione di Kubernetes | Versione del benchmark CIS Kubernetes |
---|---|---|
1.14.0 | 1.25.3 | 1,23 |
Benchmark CIS Kubernetes
Accesso al benchmark
Il benchmark CIS Kubernetes è disponibile sul sito web del CIS.
Livelli di consiglio
Nel benchmark CIS Kubernetes sono presenti due livelli di consigli.
Livello | Descrizione |
---|---|
Livello 1 | I consigli hanno lo scopo di: |
Livello 2 | Espande il profilo di Livello 1. I consigli presentano una o più delle seguenti caratteristiche: |
Stato della valutazione
Per ogni consiglio è incluso uno stato di valutazione. Lo stato della valutazione indica se il consiglio in questione 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 consigli per i quali la valutazione di un controllo tecnico può essere completamente automatizzata e convalidata in uno stato di superamento/non superamento. I consigli 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. |
Valutazione su GKE su AWS
Utilizziamo i seguenti valori per specificare lo stato dei consigli di Kubernetes in GKE su AWS:
Stato | Descrizione |
---|---|
Pass | È conforme a un consiglio relativo a un benchmark. |
Fail | Non è conforme a un consiglio del benchmark. |
Controllo equivalente | Non è conforme ai termini esatti del Consiglio di benchmarking, ma esistono altri meccanismi in GKE su AWS per fornire controlli di sicurezza equivalenti. |
Dipende dall'ambiente | GKE su AWS non configura gli elementi correlati a questo consiglio. La configurazione dell'utente determina se il suo ambiente è conforme a un consiglio del benchmark. |
Stato di GKE su AWS
Quando crei un nuovo cluster con la versione specificata, ecco come funzionerà rispetto al benchmark CIS Kubernetes.
Stato dei cluster GKE su AWS:
# | Consiglio | 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 (automatico) |
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 dei 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 del controller manager sia impostata su root:root (automatico) |
L1 | Pass |
1.1.5 | Assicurati che le autorizzazioni del file di specifica del pod di pianificazione 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 di pianificazione sia impostata su root:root (automatico). |
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 dei file dell'interfaccia di rete del contenitore 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 contenitore 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 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 | Controllo equivalente |
1.1.14 | Assicurati che la proprietà del file admin. conf sia impostata su root:root (automatico) |
L1 | Controllo equivalente |
1.1.15 | Assicurati che le autorizzazioni del file di configurazione del programma 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 | Pass |
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 | Pass |
1.1.19 | Assicurati che la proprietà della directory e del file della PKI di Kubernetes sia impostata su root:root (automatico) |
L1 | Pass |
1.1.20 | Assicurati che le autorizzazioni dei file del certificato PKI di Kubernetes siano impostate su 644 o su un valore più restrittivo (manuale) |
L1 | Pass |
1.1.21 | Assicurati che le autorizzazioni del file della chiave 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 | 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 appropriato (automatico) |
L1 | Pass |
1.2.6 | Assicurati che l'argomento --kubelet-certificate-authority sia impostato in modo 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 Node (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 di controllo dell'accesso EventRateLimit sia impostato (manuale) | L1 | Avviso |
1.2.11 | Assicurati che il plug-in di controllo dell'ammissione AlwaysAdmit non sia impostato (automatico) | L1 | Pass |
1.2.12 | Assicurati che il plug-in di controllo dell'accesso AlwaysPullImages sia impostato (manuale) | L1 | Avviso |
1.2.13 | Assicurati che il plug-in di controllo dell'accesso SecurityContextDeny sia impostato se non viene utilizzato PodSecurityPolicy (manuale) | L1 | Controllo equivalente |
1.2.14 | Assicurati che il plug-in di controllo dell'accesso ServiceAccount sia impostato (automatico) | L1 | Pass |
1.2.15 | Assicurati che il plug-in di controllo dell'accesso NamespaceLifecycle sia impostato (automatico) | L1 | Pass |
1.2.16 | Assicurati che il plug-in di controllo dell'accesso 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 | Controllo equivalente |
1.2.20 | Assicurati che l'argomento --audit-log-maxage sia impostato su 30 o, se opportuno, su Automatico |
L1 | Controllo equivalente |
1.2.21 | Assicurati che l'argomento --audit-log-maxbackup sia impostato su 10 o, se opportuno, su Automatico |
L1 | Controllo equivalente |
1.2.22 | Assicurati che l'argomento --audit-log-maxsize sia impostato su 100 o, se opportuno, su Automatico |
L1 | Controllo equivalente |
1.2.23 | Assicurati che l'argomento --request-timeout sia impostato come appropriato (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 in modo appropriato (automatico) |
L1 | Pass |
1.2.26 | Assicurati che gli argomenti --etcd-certfile e --etcd-keyfile siano impostati come appropriato (automatico) |
L1 | Pass |
1.2.27 | Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati come appropriato (automatico) |
L1 | Pass |
1.2.28 | Assicurati che l'argomento --client-ca-file sia impostato in modo appropriato (automatico) |
L1 | Pass |
1.2.29 | Assicurati che l'argomento --etcd-cafile sia impostato in modo appropriato (automatico) |
L1 | Pass |
1.2.30 | Assicurati che l'argomento --encryption-provider-config sia impostato come appropriato (manuale) |
L1 | Pass |
1.2.31 | Assicurati che i fornitori di crittografia siano configurati correttamente (manuale) | L1 | Pass |
1.2.32 | 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 come 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 | Configurazione del nodo Etcd | ||
2 | Configurazione del nodo Etcd | ||
2.1 | Assicurati che gli argomenti --cert-file e --key-file siano impostati come 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 come 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 per etcd venga utilizzata un'autorità di certificazione univoca (manuale) | L2 | Pass |
3 | Configurazione del piano di controllo | ||
3.1 | Autenticazione e autorizzazione | ||
3.1.1 | L'autenticazione tramite certificato client non deve essere utilizzata per gli utenti (manuale) | L2 | Controllo equivalente |
3.2 | Logging | ||
3.2.1 | Assicurati che sia stato creato un criterio di controllo minimo (manuale) | L1 | Pass |
3.2.2 | Assicurati che il criterio di controllo copra i principali problemi di sicurezza (manuale) | L2 | Controllo equivalente |
4 | Configurazione della sicurezza dei nodi worker | ||
4.1 | File di configurazione dei nodi worker | ||
4.1.1 | Assicurati che le autorizzazioni dei file del servizio kubelet siano impostate su 644 o su un valore più restrittivo (automatico) |
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 esiste il file kubeconfig del proxy, assicurati che le autorizzazioni siano impostate su 644 o su un valore più restrittivo (manuale) |
L1 | Pass |
4.1.4 | Se il file kubeconfig del proxy esiste, 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 dei file delle autorità di certificazione siano impostate su 644 o su un valore più restrittivo (manuale) |
L1 | Pass |
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 le autorizzazioni del file di configurazione --config di kubelet siano impostate su 644 o su un valore più restrittivo (automatico) |
L1 | Pass |
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 | 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 la cattura appropriata degli eventi (manuale) |
L2 | Avviso |
4.2.10 | Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati come appropriato (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 RotateKubeletServerCertificate sia impostato su true (manuale) | L1 | Pass |
4.2.13 | Assicurati che Kubelet utilizzi solo algoritmi di crittografia avanzati (manuale) | L1 | Pass |
Descrizioni degli errori e dei controlli equivalenti per il cluster di amministrazione GKE su AWS:
# | Consiglio | Livello | Stato | Valore | Motivazione |
---|---|---|---|---|---|
1.1.9 | Assicurati che le autorizzazioni dei file dell'interfaccia di rete del contenitore siano impostate su 644 o su un valore più restrittivo (manuale) |
L1 | Controllo equivalente | 755 |
Il percorso dell'interfaccia di rete del contenitore AWS per i cluster Anthos è /opt/cni/bin e l'autorizzazione è impostata su 755 per il normale funzionamento del cluster. |
1.1.10 | Assicurati che la proprietà del file dell'interfaccia di rete del contenitore sia impostata su root:root (manuale) |
L1 | Controllo equivalente | root:root |
Il percorso dell'interfaccia di rete del contenitore di Cluster Anthos on AWS è /opt/cni/bin e la relativa proprietà è impostata su root:root . |
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 /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 contenitore etcd viene eseguito come root e la directory dei dati etcd è di proprietà di root:root . |
1.1.13 | Assicurati che le autorizzazioni del file admin. conf siano impostate su 600 o su un valore più restrittivo (automatico) |
L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS non supporta kubeadm. |
1.1.14 | Assicurati che la proprietà del file admin. conf sia impostata su root:root (automatico) |
L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS non supporta kubeadm. |
1.2.10 | Assicurati che il plug-in di controllo dell'accesso EventRateLimit sia impostato (manuale) | L1 | Avviso | non impostato | I cluster Anthos su AWS non supportano il controller di ammissione con limite di frequenza eventi perché si tratta di una funzionalità alpha di Kubernetes. |
1.2.12 | Assicurati che il plug-in di controllo dell'accesso AlwaysPullImages sia impostato (manuale) | L1 | Avviso | non impostato | Il controller di ammissione AlwaysPullImages fornisce una certa protezione per le immagini dei registry privati in cluster multi-tenant non collaborativi, a costo di rendere i registry dei container un punto di errore singolo per la creazione di nuovi pod nell'intero cluster. GKE su AWS non abilita il controller di ammissione AlwaysPullImages, quindi è compito degli amministratori del cluster implementare il criterio di ammissione per fare questo compromesso. |
1.2.13 | Assicurati che il plug-in di controllo dell'accesso SecurityContextDeny sia impostato se non viene utilizzato PodSecurityPolicy (manuale) | L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS definisce i criteri di sicurezza predefiniti. I clienti possono impostare opzioni relative alla sicurezza con un contesto di sicurezza. Scopri di più nella Panoramica sulla sicurezza. |
1.2.19 | Assicurati che l'argomento --audit-log-path sia impostato (automatico) |
L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS offre l'opzione di registrazione degli audit del cloud. Scopri di più su Cloud Audit Logs. |
1.2.20 | Assicurati che l'argomento --audit-log-maxage sia impostato su 30 o, se opportuno, su Automatico |
L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS offre l'opzione di registrazione degli audit del cloud. Scopri di più su Cloud Audit Logs. |
1.2.21 | Assicurati che l'argomento --audit-log-maxbackup sia impostato su 10 o, se opportuno, su Automatico |
L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS offre l'opzione di registrazione degli audit del cloud. Scopri di più su Cloud Audit Logs. |
1.2.22 | Assicurati che l'argomento --audit-log-maxsize sia impostato su 100 o, se opportuno, su Automatico |
L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS offre l'opzione di registrazione degli audit del cloud. Scopri di più su Cloud Audit Logs. |
3.1.1 | L'autenticazione tramite certificato client non deve essere utilizzata per gli utenti (manuale) | L2 | Controllo equivalente | Cluster Anthos su AWS supporta OIDC come uno dei meccanismi di autenticazione per la connessione al cluster. Scopri di più in Connessione al cluster e autenticazione. | |
3.2.2 | Assicurati che il criterio di controllo copra i principali problemi di sicurezza (manuale) | L2 | Controllo equivalente | non impostato | Cluster Anthos on AWS offre l'opzione di registrazione degli audit 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 | Fail | 10255 | Al momento, Cluster Anthos on AWS imposta 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 |
Cluster Anthos on AWS consente a kubelet di impostare le impostazioni del kernel necessarie. |
4.2.9 | Assicurati che l'argomento --event-qps sia impostato su 0 o su un livello che garantisca la cattura appropriata degli eventi (manuale) |
L2 | Avviso | non impostato | Gli eventi sono oggetti Kubernetes archiviati in etcd. Per evitare di sovraccaricare etcd, vengono conservati solo per un'ora e non sono un meccanismo di controllo della sicurezza appropriato. La mancata limitazione del numero di eventi, come suggerito in questo controllo, espone il cluster a un rischio di DoS non necessario e contraddice il consiglio di utilizzare i limiti di frequenza degli eventi di ammissione. Gli eventi di sicurezza pertinenti che richiedono uno spazio di 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 appropriato (manuale) |
L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS gestisce il TLS del server kubelet utilizzando il flag serverTLSBootstrap . |
Come eseguire un audit dei benchmark
Istruzioni specifiche per il controllo di ogni consiglio sono disponibili nell'ambito del benchmark CIS 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.
Controllo automatizzato del benchmark CIS Kubernetes
Puoi utilizzare uno strumento open source
kube-bench
per testare la configurazione del cluster rispetto al benchmark CIS Kubernetes.
Assicurati di specificare la versione appropriata, ad esempio
kube-bench node --benchmark cis-1.23