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 di CIS Kubernetes V1.27 Benchmark v1.9.0 nel servizio Azure Kubernetes. I risultati sono applicabili al servizio Azure Kubernetes 1.27.x fino a AKS 1.29.x.

Livelli di sicurezza

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à.

Stato valutazione

Per ogni raccomandazione è incluso uno stato di valutazione. Lo stato della valutazione indica se la raccomandazione specificata può essere automatizzata o richiede passaggi manuali da implementare. Entrambi gli stati sono ugualmente importanti e sono determinati e supportati come definito di seguito:

  • Automatizzato: rappresenta le raccomandazioni per cui la valutazione di un controllo tecnico può essere completamente automatizzata e convalidata in uno stato di superamento/errore. Le raccomandazioni includono le informazioni necessarie per implementare l'automazione.
  • Manuale: rappresenta le raccomandazioni per cui 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.

Le raccomandazioni automatizzate influiscono sul punteggio del benchmark se non vengono applicate, mentre le raccomandazioni manuali non lo sono.

Stato attestazione

Le raccomandazioni possono avere uno degli stati di attestazione seguenti:

  • Pass: la raccomandazione è stata applicata.
  • Errore: la raccomandazione non è stata applicata.
  • N/D: 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 automatizzate influiscono sul punteggio del benchmark se la raccomandazione si applica o meno all'ambiente specifico dell'utente.
  • Controllo equivalente: la raccomandazione è stata implementata in modo diverso ed equivalente.

Dettagli del benchmark

ID CIS Descrizione della raccomandazione Stato valutazione 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 Automatizzato L1 N/D
1.1.2 Assicurarsi che la proprietà del file di specifica del pod del server API sia impostata su root:root Automatizzato 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 Automatizzato L1 N/D
1.1.4 Assicurarsi che la proprietà del file di specifica del pod di gestione controller sia impostata su root:root Automatizzato 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 Automatizzato 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 Automatizzato L1 N/D
1.1.7 Assicurarsi che le autorizzazioni del file di specifica del pod etcd siano impostate su 600 o più restrittive Automatizzato L1 N/D
1.1.8 Verificare che la proprietà del file di specifica del pod etcd sia impostata su root:root Automatizzato 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 Manuale L1 N/D
1.1.10 Assicurarsi che la proprietà del file dell'interfaccia di rete contenitore sia impostata su root:root Manuale L1 N/D
1.1.11 Assicurarsi che le autorizzazioni della directory dati etcd siano impostate su 700 o più restrittive Automatizzato L1 N/D
1.1.12 Assicurarsi che la proprietà della directory dei dati etcd sia impostata su etcd:etcd Automatizzato L1 N/D
1.1.13 Assicurarsi che le autorizzazioni del file admin.conf siano impostate su 600 o più restrittive Automatizzato L1 N/D
1.1.14 Assicurarsi che la proprietà del file admin.conf sia impostata su root:root Automatizzato L1 N/D
1.1.15 Assicurarsi che le autorizzazioni del file scheduler.conf siano impostate su 600 o più restrittive Automatizzato L1 N/D
1.1.16 Verificare che la proprietà del file scheduler.conf sia impostata su root:root Automatizzato L1 N/D
1.1.17 Assicurarsi che le autorizzazioni del file controller-manager.conf siano impostate su 600 o più restrittive Automatizzato L1 N/D
1.1.18 Assicurarsi che la proprietà del file controller-manager.conf sia impostata su root:root Automatizzato L1 N/D
1.1.19 Assicurarsi che la directory PKI di Kubernetes e la proprietà del file siano impostate su root:root Automatizzato L1 N/D
1.1.20 Assicurarsi che le autorizzazioni del file di certificato PKI di Kubernetes siano impostate su 600 o più restrittive Manuale L1 N/D
1.1.21 Assicurarsi che le autorizzazioni del file di chiave PKI di Kubernetes siano impostate su 600 Manuale L1 N/D
1.2 Server API
1.2.1 Verificare che l'argomento --anonymous-auth sia impostato su false Manuale L1 Riuscito
1.2.2 Assicurarsi che il parametro --token-auth-file non sia impostato Automatizzato L1 Errore
1.2.3 Assicurarsi che --DenyServiceExternalIPs non sia impostato Manuale L1 Errore
1.2.4 Assicurarsi che gli argomenti --kubelet-client-certificate e --kubelet-client-key siano impostati in base alle esigenze Automatizzato L1 Riuscito
1.2.5 Verificare che l'argomento --kubelet-certificate-authority sia impostato in base alle esigenze Automatizzato L1 Errore
1.2.6 Assicurarsi che l'argomento --authorization-mode non sia impostato su AlwaysAllow Automatizzato L1 Riuscito
1.2.7 Verificare che l'argomento --authorization-mode includa Node Automatizzato L1 Riuscito
1.2.8 Verificare che l'argomento --authorization-mode includa il controllo degli accessi in base al ruolo (RBAC) Automatizzato L1 Riuscito
1.2.9 Assicurarsi che il plug-in del controllo di ammissione EventRateLimit sia impostato Manuale L1 Errore
1.2.10 Assicurarsi che il plug-in di controllo di ammissione AlwaysAdmit non sia impostato Automatizzato L1 Riuscito
1.2.11 Assicurarsi che il plug-in di controllo di ammissione AlwaysPullImages sia impostato Manuale L1 Errore
1.2.12 Assicurarsi che il plug-in del controllo di ammissione ServiceAccount sia impostato Automatizzato L2 Errore
1.2.13 Assicurarsi che il plug-in del controllo di ammissione NamespaceLifecycle sia impostato Automatizzato L2 Riuscito
1.2.14 Assicurarsi che il plug-in del controllo di ammissione NodeRestriction sia impostato Automatizzato L2 Riuscito
1.2.15 Verificare che l'argomento --profiling sia impostato su false Automatizzato L1 Riuscito
1.2.16 Verificare che l'argomento --audit-log-path sia impostato Automatizzato L1 Riuscito
1.2.17 Assicurarsi che l'argomento --audit-log-maxage sia impostato su 30 o in base alle esigenze Automatizzato L1 Controllo equivalente
1.2.18 Verificare che l'argomento --audit-log-maxbackup sia impostato su 10 o come appropriato Automatizzato L1 Controllo equivalente
1.2.19 Verificare che l'argomento --audit-log-maxsize sia impostato su 100 o in base alle esigenze Automatizzato L1 Riuscito
1.2.20 Verificare che l'argomento --request-timeout sia impostato in base alle esigenze Manuale L1 Riuscito
1.2.21 Verificare che l'argomento --service-account-lookup sia impostato su true Automatizzato L1 Riuscito
1.2.22 Verificare che l'argomento --service-account-key-file sia impostato in base alle esigenze Automatizzato L1 Riuscito
1.2.23 Assicurarsi che gli argomenti --etcd-certfile e --etcd-keyfile siano impostati in base alle esigenze Automatizzato L1 Riuscito
1.2.24 Assicurarsi che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati in base alle esigenze Automatizzato L1 Riuscito
1.2.25 Verificare che l'argomento --client-ca-file sia impostato in base alle esigenze Automatizzato L1 Riuscito
1.2.26 Verificare che l'argomento --etcd-cafile sia impostato in base alle esigenze Automatizzato L1 Riuscito
1.2.27 Verificare che l'argomento --encryption-provider-config sia impostato in base alle esigenze Manuale L1 Dipende dall'ambiente
1.2.28 Assicurarsi che i provider di crittografia siano configurati in modo appropriato Manuale L1 Dipende dall'ambiente
1.2.29 Assicurarsi che il server API usi solo crittografie crittografiche complesse Manuale L1 Riuscito
1.3 Controller Manager
1.3.1 Verificare che l'argomento --terminated-pod-gc-threshold sia impostato in base alle esigenze Manuale L1 Riuscito
1.3.2 Verificare che l'argomento --profiling sia impostato su false Automatizzato L1 Riuscito
1.3.3 Verificare che l'argomento --use-service-account-credentials sia impostato su true Automatizzato L1 Riuscito
1.3.4 Verificare che l'argomento --service-account-private-key-file sia impostato in base alle esigenze Automatizzato L1 Riuscito
1.3.5 Verificare che l'argomento --root-ca-file sia impostato in base alle esigenze Automatizzato L1 Riuscito
1.3.6 Assicurarsi che l'argomento RotateKubeletServerCertificate sia impostato su true Automatizzato L2 Riuscito
1.3.7 Verificare che l'argomento --bind-address sia impostato su 127.0.0.1 Automatizzato L1 Controllo equivalente
1.4 Utilità di pianificazione
1.4.1 Verificare che l'argomento --profiling sia impostato su false Automatizzato L1 Riuscito
1.4.2 Verificare che l'argomento --bind-address sia impostato su 127.0.0.1 Automatizzato L1 Controllo equivalente
2 etcd
2.1 Assicurarsi che gli argomenti --cert-file e --key-file siano impostati in base alle esigenze Automatizzato L1 Riuscito
2.2 Verificare che l'argomento --client-cert-auth sia impostato su true Automatizzato L1 Riuscito
2.3 Assicurarsi che l'argomento --auto-tls non sia impostato su true Automatizzato L1 Riuscito
2.4 Assicurarsi che gli argomenti --peer-cert-file e --peer-key-file siano impostati in base alle esigenze Automatizzato L1 Riuscito
2.5 Verificare che l'argomento --peer-client-cert-auth sia impostato su true Automatizzato L1 Riuscito
2.6 Assicurarsi che l'argomento --peer-auto-tls non sia impostato su true Automatizzato L1 Riuscito
2.7 Assicurarsi che venga usata un'autorità di certificazione univoca per etcd Manuale 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 Manuale L1 Riuscito
3.1.2 L'autenticazione del token dell'account del servizio non deve essere usata per gli utenti Manuale L1 Riuscito
3.1.3 L'autenticazione token bootstrap non deve essere usata per gli utenti Manuale L1 Riuscito
3.2 Registrazione
3.2.1 Assicurarsi che venga creato un criterio di controllo minimo Manuale L1 Riuscito
3.2.2 Assicurarsi che i criteri di controllo includano i principali problemi di sicurezza Manuale 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 Automatizzato L1 Riuscito
4.1.2 Assicurarsi che la proprietà del file del servizio kubelet sia impostata su root:root Automatizzato L1 Riuscito
4.1.3 Se esiste un file kubeconfig proxy, verificare che le autorizzazioni siano impostate su 600 o più restrittive Manuale L1 N/D
4.1.4 Se esiste un file kubeconfig proxy, verificare che la proprietà sia impostata su root:root Manuale L1 N/D
4.1.5 Assicurarsi che le autorizzazioni del file --kubeconfig kubelet.conf siano impostate su 600 o più restrittive Automatizzato L1 Riuscito
4.1.6 Assicurarsi che la proprietà del file --kubeconfig kubelet.conf sia impostata su root:root Automatizzato L1 Riuscito
4.1.7 Assicurarsi che le autorizzazioni dei file delle autorità di certificazione siano impostate su 600 o più restrittive Manuale L1 Riuscito
4.1.8 Assicurarsi che la proprietà del file delle autorità di certificazione client sia impostata su root:root Manuale 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 Automatizzato 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 Automatizzato L1 Riuscito
4.2 Kubelet
4.2.1 Verificare che l'argomento --anonymous-auth sia impostato su false Automatizzato L1 Riuscito
4.2.2 Assicurarsi che l'argomento --authorization-mode non sia impostato su AlwaysAllow Automatizzato L1 Riuscito
4.2.3 Verificare che l'argomento --client-ca-file sia impostato in base alle esigenze Automatizzato L1 Riuscito
4.2.4 Verificare che l'argomento --read-only-port sia impostato su 0 Manuale L1 Riuscito
4.2.5 Verificare che l'argomento --streaming-connection-idle-timeout non sia impostato su 0 Manuale L1 Riuscito
4.2.6 Verificare che l'argomento --make-iptables-util-chains sia impostato su true Automatizzato L1 Riuscito
4.2.7 Verificare che l'argomento --hostname-override non sia impostato Manuale L1 Riuscito
4.2.8 Assicurarsi che l'argomento sia impostato su un livello che garantisce l'acquisizione --eventRecordQPS di eventi appropriata Manuale L2 Riuscito
4.2.9 Assicurarsi che gli argomenti --tls-cert-file e --tls-private-key-file siano impostati in base alle esigenze Manuale L1 Riuscito
4.2.10 Assicurarsi che l'argomento --rotate-certificates non sia impostato su false Automatizzato L1 Riuscito
4.2.11 Verificare che l'argomento RotateKubeletServerCertificate sia impostato su true Manuale L1 Errore
4.2.12 Assicurarsi che Kubelet usi solo crittografie crittografiche complesse Manuale L1 Riuscito
4.2.13 Assicurarsi che un limite sia impostato sui PID dei pod Manuale L1 Riuscito
4.3 kube-proxy
4.3.1 Assicurarsi che il servizio metriche kube-proxy sia associato a localhost Automatizzato 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 Automatizzato L1 Dipende dall'ambiente
5.1.2 Ridurre al minimo l'accesso ai segreti Automatizzato L1 Dipende dall'ambiente
5.1.3 Ridurre al minimo l'uso dei caratteri jolly in Ruoli e ClusterRoles Automatizzato L1 Dipende dall'ambiente
5.1.4 Ridurre al minimo l'accesso per creare pod Automatizzato L1 Dipende dall'ambiente
5.1.5 Assicurarsi che gli account di servizio predefiniti non vengano usati attivamente Automatizzato L1 Dipende dall'ambiente
5.1.6 Assicurarsi che i token dell'account del servizio siano montati solo se necessario Automatizzato L1 Dipende dall'ambiente
5.1.7 Evitare l'uso del gruppo system:masters Manuale L1 Dipende dall'ambiente
5.1.8 Limitare l'uso delle autorizzazioni Bind, Impersonate e Escalation nel cluster Kubernetes Manuale L1 Dipende dall'ambiente
5.1.9 Ridurre al minimo l'accesso per creare volumi permanenti Manuale L1 Dipende dall'ambiente
5.1.10 Ridurre al minimo l'accesso alla sotto-risorsa proxy dei nodi Manuale L1 Dipende dall'ambiente
5.1.11 Ridurre al minimo l'accesso alla sotto-risorsa di approvazione degli oggetti certificatesigningrequests Manuale L1 Dipende dall'ambiente
5.1.12 Ridurre al minimo l'accesso agli oggetti di configurazione del webhook Manuale L1 Dipende dall'ambiente
5.1.13 Ridurre al minimo l'accesso alla creazione del token dell'account del servizio Manuale L1 Dipende dall'ambiente
5,2 Standard di sicurezza dei pod
5.2.1 Assicurarsi che il cluster disponga di almeno un meccanismo di controllo dei criteri attivi Manuale L1 Dipende dall'ambiente
5.2.2 Ridurre al minimo l'ammissione di contenitori con privilegi Manuale L1 Dipende dall'ambiente
5.2.3 Ridurre al minimo l'ammissione di contenitori che desiderano condividere lo spazio dei nomi id processo host Manuale L1 Dipende dall'ambiente
5.2.4 Ridurre al minimo l'ammissione di contenitori che desiderano condividere lo spazio dei nomi IPC host Manuale L1 Dipende dall'ambiente
5.2.5 Ridurre al minimo l'ammissione di contenitori che desiderano condividere lo spazio dei nomi della rete host Manuale L1 Dipende dall'ambiente
5.2.6 Ridurre al minimo l'ammissione di contenitori con allowPrivilegeEscalation Manuale L1 Dipende dall'ambiente
5.2.7 Ridurre al minimo l'ammissione di contenitori radice Manuale L2 Dipende dall'ambiente
5.2.8 Ridurre al minimo l'ammissione di contenitori con la funzionalità di NET_RAW Manuale L1 Dipende dall'ambiente
5.2.9 Ridurre al minimo l'ammissione di contenitori con funzionalità aggiunte Manuale L1 Dipende dall'ambiente
5.2.10 Ridurre al minimo l'ammissione di contenitori con funzionalità assegnate Manuale L2 Dipende dall'ambiente
5.2.11 Ridurre al minimo l'ammissione di contenitori HostProcess di Windows Manuale L1 Dipende dall'ambiente
5.2.12 Ridurre al minimo l'ammissione di volumi HostPath Manuale L1 Dipende dall'ambiente
5.2.13 Ridurre al minimo l'ammissione di contenitori che usano HostPorts Manuale 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 Manuale L1 Riuscito
5.3.2 Assicurarsi che tutti gli spazi dei nomi dispongano di criteri di rete definiti Manuale 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 Manuale L2 Dipende dall'ambiente
5.4.2 Prendere in considerazione l'archiviazione privata esterna Manuale L2 Dipende dall'ambiente
5.5 Controllo di ammissione estendibile
5.5.1 Configurare la provenienza di immagini usando il controller di ammissione ImagePolicyWebhook Manuale L2 Errore
5.6 Criteri generali
5.6.1 Creare limiti amministrativi tra le risorse usando gli spazi dei nomi Manuale L1 Dipende dall'ambiente
5.6.2 Assicurarsi che il profilo seccomp sia impostato su docker/default nelle definizioni dei pod Manuale L2 Dipende dall'ambiente
5.6.3 Applicare il contesto di sicurezza ai pod e ai contenitori Manuale L2 Dipende dall'ambiente
5.6.4 Lo spazio dei nomi predefinito non deve essere usato Manuale 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 del modulo kernel non necessari sono disabilitati nel sistema operativo.

Passaggi successivi

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