Questo documento introduce il benchmark CIS Kubernetes. Spiega anche:
- Come verificare la conformità al benchmark
- Cosa configura GKE su AWS dove non puoi implementare un consiglio autonomamente.
Utilizzo dei 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 strategia di sicurezza. Il benchmark è legato a una specifica release 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
Tieni presente che i numeri di versione per diversi benchmark potrebbero non essere gli stessi.
Questo documento si riferisce 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 consigli
Nel benchmark CIS Kubernetes esistono due livelli di consigli.
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 della 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. |
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 suggerimento di benchmark. |
Fail | Non è conforme a un suggerimento di benchmark. |
Controllo equivalente | Non è conforme ai termini esatti della raccomandazione di benchmark, ma in GKE su AWS esistono altri meccanismi per fornire controlli di sicurezza equivalenti. |
Dipende dall'ambiente | GKE su AWS non configura gli elementi correlati a questo suggerimento. La configurazione dell'utente determina se il suo ambiente è conforme a un consiglio per il benchmark. |
Stato su GKE su AWS
Quando crei un nuovo cluster con la versione specificata, ecco come si comporterà 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 (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 del 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 | 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 di configurazione admin. sia impostata su root:root (automatico) |
L1 | Controllo equivalente |
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 di configurazione. dello scheduler sia impostata su root:root (automatica) |
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 dei file PKI di Kubernetes sia impostata su root:root (automatico) |
L1 | Pass |
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 | Pass |
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 | 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 in modo 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'ammissione 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'ammissione AlwaysPullImages sia impostato (manuale) | L1 | Avviso |
1.2.13 | Assicurati che il plug-in di controllo dell'ammissione SecurityContextDeny sia impostato se PodSecurityPolicy non viene utilizzato (manuale) | L1 | Controllo equivalente |
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 di controllo dell'ammissione NamespaceLifecycle sia impostato (automatico) | L1 | Pass |
1.2.16 | Assicurati che il plug-in di controllo dell'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 | Controllo equivalente |
1.2.20 | Assicurati che l'argomento --audit-log-maxage sia impostato su 30 o su un valore appropriato (Automated) |
L1 | Controllo equivalente |
1.2.21 | Assicurati che l'argomento --audit-log-maxbackup sia impostato su 10 o su un valore appropriato (Automated) |
L1 | Controllo equivalente |
1.2.22 | Assicurati che l'argomento --audit-log-maxsize sia impostato su 100 o su un valore appropriato (Automated) |
L1 | Controllo equivalente |
1.2.23 | Assicurati che l'argomento --request-timeout sia impostato in modo 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 in modo appropriato (automatico) |
L1 | Pass |
1.2.27 | Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati in modo 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 in modo appropriato (manuale) |
L1 | Pass |
1.2.31 | Assicurati che i fornitori di servizi 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 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 | Configurazione del nodo etcd | ||
2 | Configurazione del nodo etcd | ||
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 | Controllo equivalente |
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 | Controllo equivalente |
4 | Configurazione della sicurezza dei nodi 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 | Pass |
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 di configurazione --kubeconfig kubelet. siano impostate su 644 o su un valore più restrittivo (automatico) |
L1 | Pass |
4.1.6 | Assicurati che la proprietà del file di configurazione --kubeconfig kubelet. 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 | 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 il file di configurazione --config di kubelet abbia le autorizzazioni impostate su 644 o su un valore più restrittivo (automatizzato) |
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 l'acquisizione appropriata degli eventi (manuale) |
L2 | Avviso |
4.2.10 | Assicurati che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati in modo 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 cifrari crittografici sicuri (manuale) | L1 | Pass |
Descrizioni di errori e controlli equivalenti per il cluster di amministrazione GKE su AWS:
# | Consiglio | 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). |
L1 | Controllo equivalente | 755 |
Il percorso dell'interfaccia di rete del container dei cluster Anthos su AWS è /opt/cni/bin e la relativa autorizzazione è impostata su 755 per il normale funzionamento del cluster. |
1.1.10 | Assicurati che la proprietà del file Container Network Interface sia impostata su root:root (manuale) |
L1 | Controllo equivalente | root:root |
Il percorso dell'interfaccia di rete dei container 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 container 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 di configurazione admin. 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'ammissione EventRateLimit sia impostato (manuale) | L1 | Avviso | non impostato | Cluster Anthos on AWS non supporta il controller di ammissione Event Rate Limit perché è una funzionalità alpha di Kubernetes. |
1.2.12 | Assicurati che il plug-in di controllo dell'ammissione AlwaysPullImages sia impostato (manuale) | L1 | Avviso | non impostato | Il controller di ammissione AlwaysPullImages offre una certa protezione per le immagini del registro privato nei cluster multitenant non cooperativi, al costo di rendere i registri dei container un unico punto di errore per la creazione di nuovi pod nell'intero cluster. GKE su AWS non abilita il controller di ammissione AlwaysPullImages, quindi spetta agli amministratori del cluster implementare il criterio di ammissione per effettuare questo compromesso. |
1.2.13 | Assicurati che il plug-in di controllo dell'ammissione SecurityContextDeny sia impostato se PodSecurityPolicy non viene utilizzato (manuale) | L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS definisce criteri di sicurezza predefiniti. I clienti possono impostare opzioni relative alla sicurezza con un contesto di sicurezza. Scopri di più sulla 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 fornisce l'opzione di audit logging cloud. Scopri di più su Cloud Audit Logs. |
1.2.20 | Assicurati che l'argomento --audit-log-maxage sia impostato su 30 o su un valore appropriato (Automated) |
L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS fornisce l'opzione di audit logging cloud. Scopri di più su Cloud Audit Logs. |
1.2.21 | Assicurati che l'argomento --audit-log-maxbackup sia impostato su 10 o su un valore appropriato (Automated) |
L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS fornisce l'opzione di audit logging cloud. Scopri di più su Cloud Audit Logs. |
1.2.22 | Assicurati che l'argomento --audit-log-maxsize sia impostato su 100 o su un valore appropriato (Automated) |
L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS fornisce l'opzione di audit logging cloud. Scopri di più su Cloud Audit Logs. |
3.1.1 | L'autenticazione con 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ù su 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 fornisce l'opzione di audit logging 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 l'acquisizione 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. Consentire eventi illimitati come suggerito in questo controllo espone il cluster a rischi DoS non necessari e contraddice il suggerimento di utilizzare EventRateLimits di controllo degli accessi. Gli eventi rilevanti 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 in modo appropriato (Manuale) |
L1 | Controllo equivalente | non impostato | Cluster Anthos on AWS gestisce TLS del server kubelet utilizzando il flag serverTLSBootstrap . |
Come controllare i benchmark
Istruzioni specifiche per il controllo di ogni consiglio sono disponibili nella relativa benchmark CIS. 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 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