Benchmark CIS

Questa pagina introduce il benchmark CIS Kubernetes, fornisce una valutazione e spiega cosa fa Google Distributed Cloud per rispondere ai 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 connesso, Kubernetes e del benchmark CIS Kubernetes utilizzate per eseguire la valutazione descritta in questo documento:

Versione di Distributed Cloud connesso 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:

  • essere pratici e prudenti;
  • offrire un chiaro vantaggio in termini di sicurezza e
  • non ne compromettano l'utilità oltre i mezzi accettabili.
  • Livello 2

    Estende il profilo di livello 1.

    I consigli presentano una o più delle seguenti caratteristiche:

  • sono destinati ad ambienti o casi d'uso in cui la sicurezza è fondamentale;
  • funge da misura di difesa in profondità; oppure
  • potrebbe inibire negativamente l'utilità o le prestazioni della tecnologia.
  • 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 di Distributed Cloud Connected

    # 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 Connected

    # 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 connesso 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 connesso 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 connesso 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 connessi 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