Benchmark Kubernetes center for Internet Security (CIS)

Come servizio sicuro, il servizio Azure Kubernetes è conforme agli standard SOC, ISO, PCI DSS e HIPAA. Questo articolo illustra la protezione avanzata applicata al servizio Azure Kubernetes in base al benchmark kubernetes CIS. Per altre informazioni sulla sicurezza del servizio Azure Kubernetes, vedere Concetti di sicurezza per applicazioni e cluster nel servizio Azure Kubernetes. Per altre informazioni sul benchmark CIS, vedere Benchmark di Center for Internet Security (CIS).

Benchmark CIS di Kubernetes

Di seguito sono riportati i risultati delle raccomandazioni CIS Kubernetes V1.27 Benchmark v1.8.0 nel servizio Azure Kubernetes. I risultati sono applicabili al servizio Azure Kubernetes 1.21.x fino al servizio Azure Kubernetes 1.27.x.

Le raccomandazioni con punteggio influiscono sul punteggio del benchmark se non vengono applicate, mentre le raccomandazioni Non con punteggio non vengono applicate.

I benchmark CIS offrono due livelli di impostazioni di sicurezza:

  • L1 o Livello 1, consiglia requisiti di sicurezza di base essenziali che possono essere configurati in qualsiasi sistema e che devono causare un'interruzione minima o nessuna interruzione del servizio o funzionalità ridotta.
  • L2o Livello 2 consiglia le impostazioni di sicurezza per gli ambienti che richiedono una maggiore sicurezza che potrebbe comportare una riduzione delle funzionalità.

I consigli possono avere uno degli stati seguenti:

  • Test superato: la raccomandazione è stata applicata.
  • Test non superato: la raccomandazione non è stata applicata.
  • N/A : la raccomandazione è correlata ai requisiti di autorizzazione per i file manifesto non rilevanti per il servizio Azure Kubernetes. Per impostazione predefinita, i cluster Kubernetes usano un modello manifesto per distribuire i pod del piano di controllo, che si basano sui file della macchina virtuale del nodo. Il benchmark kubernetes CIS consiglia che questi file abbiano determinati requisiti di autorizzazione. I cluster del servizio Azure Kubernetes usano un grafico Helm per distribuire i pod del piano di controllo e non si basano sui file nella macchina virtuale del nodo.
  • Dipende dall'ambiente: la raccomandazione viene applicata nell'ambiente specifico dell'utente e non è controllata dal servizio Azure Kubernetes. Le raccomandazioni con punteggio influiscono sul punteggio del benchmark se la raccomandazione si applica o meno all'ambiente specifico dell'utente.
  • Controllo equivalente: la raccomandazione è stata implementata in un altro modo equivalente.
ID CIS Descrizione della raccomandazione Tipo di punteggio Livello Status
1 Componenti del piano di controllo
1.1 File di configurazione del nodo del piano di controllo
1.1.1 Assicurarsi che le autorizzazioni del file di specifica del pod del server API siano impostate su 600 o più restrittive Segnato L1 N/D
1.1.2 Assicurarsi che la proprietà del file di specifica del pod del server API sia impostata su root:root Segnato L1 N/D
1.1.3 Assicurarsi che le autorizzazioni del file di specifica del pod di gestione controller siano impostate su 600 o più restrittive Segnato L1 N/D
1.1.4 Assicurarsi che la proprietà del file di specifica del pod di gestione controller sia impostata su root:root Segnato L1 N/D
1.1.5 Assicurarsi che le autorizzazioni del file di specifica del pod dell'utilità di pianificazione siano impostate su 600 o più restrittive Segnato L1 N/D
1.1.6 Assicurarsi che la proprietà del file di specifica del pod dell'utilità di pianificazione sia impostata su root:root Segnato L1 N/D
1.1.7 Assicurarsi che le autorizzazioni del file di specifica del pod etcd siano impostate su 600 o più restrittive Segnato L1 N/D
1.1.8 Verificare che la proprietà del file di specifica del pod etcd sia impostata su root:root Segnato L1 N/D
1.1.9 Assicurarsi che le autorizzazioni del file dell'interfaccia di rete del contenitore siano impostate su 600 o più restrittive Senza punteggio L1 N/D
1.1.10 Assicurarsi che la proprietà del file dell'interfaccia di rete contenitore sia impostata su root:root Senza punteggio L1 N/D
1.1.11 Assicurarsi che le autorizzazioni della directory dati etcd siano impostate su 700 o più restrittive Segnato L1 N/D
1.1.12 Assicurarsi che la proprietà della directory dei dati etcd sia impostata su etcd:etcd Segnato L1 N/D
1.1.13 Assicurarsi che le autorizzazioni del file admin.conf siano impostate su 600 o più restrittive Segnato L1 N/D
1.1.14 Assicurarsi che la proprietà del file admin.conf sia impostata su root:root Segnato L1 N/D
1.1.15 Assicurarsi che le autorizzazioni del file scheduler.conf siano impostate su 600 o più restrittive Segnato L1 N/D
1.1.16 Verificare che la proprietà del file scheduler.conf sia impostata su root:root Segnato L1 N/D
1.1.17 Assicurarsi che le autorizzazioni del file controller-manager.conf siano impostate su 600 o più restrittive Segnato L1 N/D
1.1.18 Assicurarsi che la proprietà del file controller-manager.conf sia impostata su root:root Segnato L1 N/D
1.1.19 Assicurarsi che la directory PKI di Kubernetes e la proprietà del file siano impostate su root:root Segnato L1 N/D
1.1.20 Assicurarsi che le autorizzazioni del file di certificato PKI di Kubernetes siano impostate su 600 o più restrittive Segnato L1 N/D
1.1.21 Assicurarsi che le autorizzazioni del file di chiave PKI di Kubernetes siano impostate su 600 Segnato L1 N/D
1.2 Server API
1.2.1 Verificare che l'argomento --anonymous-auth sia impostato su false Senza punteggio L1 Riuscito
1.2.2 Assicurarsi che il parametro --token-auth-file non sia impostato Segnato L1 Errore
1.2.3 Assicurarsi che --DenyServiceExternalIPs non sia impostato Segnato L1 Errore
1.2.4 Assicurarsi che gli argomenti --kubelet-client-certificate e --kubelet-client-key siano impostati in base alle esigenze Segnato L1 Riuscito
1.2.5 Verificare che l'argomento --kubelet-certificate-authority sia impostato in base alle esigenze Segnato L1 Errore
1.2.6 Assicurarsi che l'argomento --authorization-mode non sia impostato su AlwaysAllow Segnato L1 Riuscito
1.2.7 Verificare che l'argomento --authorization-mode includa Node Segnato L1 Riuscito
1.2.8 Verificare che l'argomento --authorization-mode includa il controllo degli accessi in base al ruolo (RBAC) Segnato L1 Riuscito
1.2.9 Assicurarsi che il plug-in del controllo di ammissione EventRateLimit sia impostato Senza punteggio L1 Errore
1.2.10 Assicurarsi che il plug-in di controllo di ammissione AlwaysAdmit non sia impostato Segnato L1 Riuscito
1.2.11 Assicurarsi che il plug-in di controllo di ammissione AlwaysPullImages sia impostato Senza punteggio L1 Errore
1.2.12 Assicurarsi che il plug-in di controllo di ammissione SecurityContextDeny sia impostato se PodSecurityPolicy non viene usato Senza punteggio L1 Errore
1.2.13 Assicurarsi che il plug-in del controllo di ammissione ServiceAccount sia impostato Segnato L1 Riuscito
1.2.14 Assicurarsi che il plug-in del controllo di ammissione NamespaceLifecycle sia impostato Segnato L1 Riuscito
1.2.15 Assicurarsi che il plug-in del controllo di ammissione NodeRestriction sia impostato Segnato L1 Riuscito
1.2.16 Verificare che l'argomento --secure-port non sia impostato su 0 Segnato L1 Riuscito
1.2.17 Verificare che l'argomento --profiling sia impostato su false Segnato L1 Riuscito
1.2.18 Verificare che l'argomento --audit-log-path sia impostato Segnato L1 Controllo equivalente
1.2.19 Assicurarsi che l'argomento --audit-log-maxage sia impostato su 30 o in base alle esigenze Segnato L1 Controllo equivalente
1.2.20 Verificare che l'argomento --audit-log-maxbackup sia impostato su 10 o come appropriato Segnato L1 Riuscito
1.2.21 Verificare che l'argomento --audit-log-maxsize sia impostato su 100 o in base alle esigenze Segnato L1 Riuscito
1.2.22 Verificare che l'argomento --request-timeout sia impostato in base alle esigenze Segnato L1 Riuscito
1.2.23 Verificare che l'argomento --service-account-lookup sia impostato su true Segnato L1 Riuscito
1.2.24 Verificare che l'argomento --service-account-key-file sia impostato in base alle esigenze Segnato L1 Riuscito
1.2.25 Assicurarsi che gli argomenti --etcd-certfile e --etcd-keyfile siano impostati in base alle esigenze Segnato L1 Riuscito
1.2.26 Assicurarsi che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati in base alle esigenze Segnato L1 Riuscito
1.2.27 Verificare che l'argomento --client-ca-file sia impostato in base alle esigenze Segnato L1 Riuscito
1.2.28 Verificare che l'argomento --etcd-cafile sia impostato in base alle esigenze Segnato L1 Dipende dall'ambiente
1.2.29 Verificare che l'argomento --encryption-provider-config sia impostato in base alle esigenze Segnato L1 Dipende dall'ambiente
1.2.30 Assicurarsi che i provider di crittografia siano configurati in modo appropriato Segnato L1 Dipende dall'ambiente
1.2.31 Assicurarsi che il server API usi solo crittografie crittografiche complesse Senza punteggio L1 Riuscito
1.3 Controller Manager
1.3.1 Verificare che l'argomento --terminated-pod-gc-threshold sia impostato in base alle esigenze Segnato L1 Riuscito
1.3.2 Verificare che l'argomento --profiling sia impostato su false Segnato L1 Riuscito
1.3.3 Verificare che l'argomento --use-service-account-credentials sia impostato su true Segnato L1 Riuscito
1.3.4 Verificare che l'argomento --service-account-private-key-file sia impostato in base alle esigenze Segnato L1 Riuscito
1.3.5 Verificare che l'argomento --root-ca-file sia impostato in base alle esigenze Segnato L1 Riuscito
1.3.6 Assicurarsi che l'argomento RotateKubeletServerCertificate sia impostato su true Segnato L2 Errore
1.3.7 Verificare che l'argomento --bind-address sia impostato su 127.0.0.1 Segnato L1 Controllo equivalente
1.4 Utilità di pianificazione
1.4.1 Verificare che l'argomento --profiling sia impostato su false Segnato L1 Riuscito
1.4.2 Verificare che l'argomento --bind-address sia impostato su 127.0.0.1 Segnato L1 Controllo equivalente
2 etcd
2.1 Assicurarsi che gli argomenti --cert-file e --key-file siano impostati in base alle esigenze Segnato L1 Riuscito
2.2 Verificare che l'argomento --client-cert-auth sia impostato su true Segnato L1 Riuscito
2.3 Assicurarsi che l'argomento --auto-tls non sia impostato su true Segnato L1 Riuscito
2.4 Assicurarsi che gli argomenti --peer-cert-file e --peer-key-file siano impostati in base alle esigenze Segnato L1 Riuscito
2.5 Verificare che l'argomento --peer-client-cert-auth sia impostato su true Segnato L1 Riuscito
2.6 Assicurarsi che l'argomento --peer-auto-tls non sia impostato su true Segnato L1 Riuscito
2.7 Assicurarsi che venga usata un'autorità di certificazione univoca per etcd Senza punteggio L2 Riuscito
3 Configurazione del piano di controllo
3.1 Autenticazione e autorizzazione
3.1.1 L'autenticazione del certificato client non deve essere usata per gli utenti Senza punteggio L2 Riuscito
3.1.2 L'autenticazione del token dell'account del servizio non deve essere usata per gli utenti Senza punteggio L2 Riuscito
3.1.3 L'autenticazione token bootstrap non deve essere usata per gli utenti Senza punteggio L2 Riuscito
3.2 Registrazione
3.2.1 Assicurarsi che venga creato un criterio di controllo minimo Segnato L1 Riuscito
3.2.2 Assicurarsi che i criteri di controllo includano i principali problemi di sicurezza Senza punteggio L2 Riuscito
4 Nodi di lavoro
4.1 File di configurazione del nodo di lavoro
4.1.1 Assicurarsi che le autorizzazioni del file del servizio kubelet siano impostate su 600 o più restrittive Segnato L1 Riuscito
4.1.2 Assicurarsi che la proprietà del file del servizio kubelet sia impostata su root:root Segnato L1 Riuscito
4.1.3 Se esiste un file kubeconfig proxy, verificare che le autorizzazioni siano impostate su 600 o più restrittive Segnato L1 N/D
4.1.4 Se esiste un file kubeconfig proxy, verificare che la proprietà sia impostata su root:root Segnato L1 N/D
4.1.5 Assicurarsi che le autorizzazioni del file --kubeconfig kubelet.conf siano impostate su 600 o più restrittive Segnato L1 Riuscito
4.1.6 Assicurarsi che la proprietà del file --kubeconfig kubelet.conf sia impostata su root:root Segnato L1 Riuscito
4.1.7 Assicurarsi che le autorizzazioni dei file delle autorità di certificazione siano impostate su 600 o più restrittive Segnato L1 Riuscito
4.1.8 Assicurarsi che la proprietà del file delle autorità di certificazione client sia impostata su root:root Segnato L1 Riuscito
4.1.9 Se viene usato il file di configurazione kubelet config.yaml, assicurarsi che le autorizzazioni impostate su 600 o più restrittive Segnato L1 Riuscito
4.1.10 Se viene usato il file di configurazione kubelet config.yaml, verificare che la proprietà del file sia impostata su root:root Segnato L1 Riuscito
4.2 Kubelet
4.2.1 Verificare che l'argomento --anonymous-auth sia impostato su false Segnato L1 Riuscito
4.2.2 Assicurarsi che l'argomento --authorization-mode non sia impostato su AlwaysAllow Segnato L1 Riuscito
4.2.3 Verificare che l'argomento --client-ca-file sia impostato in base alle esigenze Segnato L1 Riuscito
4.2.4 Verificare che l'argomento --read-only-port sia impostato su 0 Segnato L1 Riuscito
4.2.5 Verificare che l'argomento --streaming-connection-idle-timeout non sia impostato su 0 Segnato L1 Riuscito
4.2.6 Verificare che l'argomento --protect-kernel-defaults sia impostato su true Segnato L1 Riuscito
4.2.7 Verificare che l'argomento --make-iptables-util-chains sia impostato su true Segnato L1 Riuscito
4.2.8 Verificare che l'argomento --hostname-override non sia impostato Senza punteggio L1 Riuscito
4.2.9 Assicurarsi che l'argomento eventRecordQPS sia impostato su un livello che garantisce l'acquisizione di eventi appropriata Senza punteggio L2 Riuscito
4.2.10 Assicurarsi che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati in base alle esigenze Segnato L1 Riuscito
4.2.11 Assicurarsi che l'argomento --rotate-certificates non sia impostato su false Segnato L1 Riuscito
4.2.12 Assicurarsi che l'argomento RotateKubeletServerCertificate sia impostato su true Segnato L1 Riuscito
4.2.13 Assicurarsi che Kubelet usi solo crittografie crittografiche complesse Senza punteggio L1 Riuscito
5 Criteri
5.1 Controllo degli accessi in base al ruolo e account del servizio
5.1.1 Assicurarsi che il ruolo di amministratore del cluster venga usato solo se necessario Senza punteggio L1 Dipende dall'ambiente
5.1.2 Ridurre al minimo l'accesso ai segreti Senza punteggio L1 Dipende dall'ambiente
5.1.3 Ridurre al minimo l'uso dei caratteri jolly in Ruoli e ClusterRoles Senza punteggio L1 Dipende dall'ambiente
5.1.4 Ridurre al minimo l'accesso per creare pod Senza punteggio L1 Dipende dall'ambiente
5.1.5 Assicurarsi che gli account di servizio predefiniti non vengano usati attivamente Segnato L1 Dipende dall'ambiente
5.1.6 Assicurarsi che i token dell'account del servizio siano montati solo se necessario Senza punteggio L1 Dipende dall'ambiente
5.1.7 Evitare l'uso del gruppo system:masters Senza punteggio L1 Dipende dall'ambiente
5.1.8 Limitare l'uso delle autorizzazioni Bind, Impersonate e Escalation nel cluster Kubernetes Senza punteggio L1 Dipende dall'ambiente
5.1.9 Ridurre al minimo l'accesso per creare volumi permanenti Senza punteggio L1 Dipende dall'ambiente
5.1.10 Ridurre al minimo l'accesso alla sotto-risorsa proxy dei nodi Senza punteggio L1 Dipende dall'ambiente
5.1.11 Ridurre al minimo l'accesso alla sotto-risorsa di approvazione degli oggetti certificatesigningrequests Senza punteggio L1 Dipende dall'ambiente
5.1.12 Ridurre al minimo l'accesso agli oggetti di configurazione del webhook Senza punteggio L1 Dipende dall'ambiente
5.1.13 Ridurre al minimo l'accesso alla creazione del token dell'account del servizio Senza punteggio L1 Dipende dall'ambiente
5,2 Criteri di sicurezza dei pod
5.2.1 Assicurarsi che il cluster disponga di almeno un meccanismo di controllo dei criteri attivi Senza punteggio L1 Dipende dall'ambiente
5.2.2 Ridurre al minimo l'ammissione di contenitori con privilegi Senza punteggio L1 Dipende dall'ambiente
5.2.3 Ridurre al minimo l'ammissione di contenitori che desiderano condividere lo spazio dei nomi id processo host Segnato L1 Dipende dall'ambiente
5.2.4 Ridurre al minimo l'ammissione di contenitori che desiderano condividere lo spazio dei nomi IPC host Segnato L1 Dipende dall'ambiente
5.2.5 Ridurre al minimo l'ammissione di contenitori che desiderano condividere lo spazio dei nomi della rete host Segnato L1 Dipende dall'ambiente
5.2.6 Ridurre al minimo l'ammissione di contenitori con allowPrivilegeEscalation Segnato L1 Dipende dall'ambiente
5.2.6 Ridurre al minimo l'ammissione di contenitori radice Senza punteggio L2 Dipende dall'ambiente
5.2.7 Ridurre al minimo l'ammissione di contenitori con la funzionalità di NET_RAW Senza punteggio L1 Dipende dall'ambiente
5.2.8 Ridurre al minimo l'ammissione di contenitori con funzionalità aggiunte Senza punteggio L1 Dipende dall'ambiente
5.2.9 Ridurre al minimo l'ammissione di contenitori con funzionalità assegnate Senza punteggio L1 Dipende dall'ambiente
5.2.10 Ridurre al minimo l'ammissione di contenitori con funzionalità assegnate Senza punteggio L2
5.2.11 Ridurre al minimo l'ammissione di contenitori HostProcess di Windows Senza punteggio L1 Dipende dall'ambiente
5.2.12 Ridurre al minimo l'ammissione di volumi HostPath Senza punteggio L1 Dipende dall'ambiente
5.2.13 Ridurre al minimo l'ammissione di contenitori che usano HostPorts Senza punteggio L1 Dipende dall'ambiente
5.3 Criteri di rete e CNI
5.3.1 Assicurarsi che l'interfaccia CNI in uso supporti i criteri di rete Senza punteggio L1 Riuscito
5.3.2 Assicurarsi che tutti gli spazi dei nomi dispongano di criteri di rete definiti Segnato L2 Dipende dall'ambiente
5.4 Gestione dei segreti
5.4.1 Preferire l'uso di segreti come file rispetto ai segreti come variabili di ambiente Senza punteggio L1 Dipende dall'ambiente
5.4.2 Prendere in considerazione l'archiviazione privata esterna Senza punteggio L2 Dipende dall'ambiente
5.5 Controllo di ammissione estendibile
5.5.1 Configurare la provenienza di immagini usando il controller di ammissione ImagePolicyWebhook Senza punteggio L2 Errore
5.7 Criteri generali
5.7.1 Creare limiti amministrativi tra le risorse usando gli spazi dei nomi Senza punteggio L1 Dipende dall'ambiente
5.7.2 Assicurarsi che il profilo seccomp sia impostato su docker/default nelle definizioni dei pod Senza punteggio L2 Dipende dall'ambiente
5.7.3 Applicare il contesto di sicurezza ai pod e ai contenitori Senza punteggio L2 Dipende dall'ambiente
5.7.4 Lo spazio dei nomi predefinito non deve essere usato Segnato L2 Dipende dall'ambiente

Nota

Oltre al benchmark CIS kubernetes, è disponibile anche un benchmark CIS del servizio Azure Kubernetes.

Note aggiuntive

  • Il sistema operativo protetto è costruito e mantenuto specificamente per AKS e non è supportato al di fuori della piattaforma AKS.
  • Per ridurre ulteriormente la superficie di attacco, alcuni driver di modulo kernel non necessari sono stati disabilitati nel sistema operativo.

Passaggi successivi

Per altre informazioni sulla sicurezza del servizio Azure Kubernetes, vedere gli articoli seguenti: