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: