
kubeaudit ti aiuta a verificare i tuoi cluster Kubernetes rispetto ai comuni controlli di sicurezza.
Ora è obbligatorio per i cluster eseguire Kubernetes >=1.19.
Le etichette di override con annotazioni
kubernetes.ionon registrate verranno deprecate. Presto sarà obbligatorio utilizzare invecekubeaudit.io. Fai riferimento a questa discussione per ulteriori dettagli.
Kubeaudit è in programma per la deprecazione entro ottobre 2024.
Stiamo cercando attivamente manutentori interessati a prendere in carico la gestione di questo progetto. Se sei appassionato di continuarne lo sviluppo e la manutenzione, contattaci.
Per gli utenti che cercano alternative, consigliamo di passare a Kubebench, che offre funzionalità simili ed è attivamente mantenuto.
Grazie alla comunità per i contributi e il supporto.
kubeaudit è uno strumento da riga di comando e un pacchetto Go per eseguire audit dei cluster Kubernetes per vari
problemi di sicurezza, come:
tldr. kubeaudit garantisce di distribuire container sicuri!
Per utilizzare kubeaudit come pacchetto Go, consulta la documentazione del pacchetto.
Il resto di questo README si concentra su come utilizzare kubeaudit come strumento da riga di comando.
brew install kubeaudit
Kubeaudit ha versioni ufficiali benedette e stabili: Versioni ufficiali
Il branch main potrebbe avere funzionalità più recenti rispetto alle versioni stabili. Se hai bisogno di una funzionalità più recente non ancora inclusa in una release, assicurati di usare l'ultimo Go ed esegui:
go get -v github.com/Shopify/kubeaudit
Inizia a usare kubeaudit con l'Avvio Rapido o visualizza tutti i comandi supportati.
Prerequisito: kubectl v1.12.0 o successivo
Con kubectl v1.12.0 è stata introdotta la facile possibilità di plug-in di funzioni esterne, kubeaudit può essere invocato come kubectl audit in due modi:
make plugin e avendo $GOPATH/bin disponibile nel tuo PATH.oppure
kubectl-audit e rendendolo disponibile nel tuo PATH.Non rilasciamo più immagini su Docker Hub (da quando Docker Hub ha ritirato le organizzazioni Free Team). Per il momento, le vecchie immagini sono ancora disponibili ma potrebbero smettere di esserlo in qualsiasi momento. Presto inizieremo a pubblicare immagini sul registro dei container di Github.
Per eseguire kubeaudit come job nel tuo cluster, consulta Esecuzione di kubeaudit in un cluster.
kubeaudit ha tre modalità:
Se viene fornito un file manifest Kubernetes tramite il flag -f/--manifest, kubeaudit eseguirà l'audit del file manifest.
Esempio di comando:
kubeaudit all -f "/path/to/manifest.yml"
Esempio di output:
$ kubeaudit all -f "internal/test/fixtures/all_resources/deployment-apps-v1.yml"
---------------- Results for ---------------
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment
namespace: deployment-apps-v1
--------------------------------------------
-- [error] AppArmorAnnotationMissing
Message: AppArmor annotation missing. The annotation 'container.apparmor.security.beta.kubernetes.io/container' should be added.
Metadata:
Container: container
MissingAnnotation: container.apparmor.security.beta.kubernetes.io/container
-- [error] AutomountServiceAccountTokenTrueAndDefaultSA
Message: Default service account with token mounted. automountServiceAccountToken should be set to 'false' or a non-default service account should be used.
-- [error] CapabilityShouldDropAll
Message: Capability not set to ALL. Ideally, you should drop ALL capabilities and add the specific ones you need to the add list.
Metadata:
Container: container
Capability: AUDIT_WRITE
...
Se non vengono trovati errori con una gravità minima specificata, viene restituito quanto segue:
All checks completed. 0 high-risk vulnerabilities found
La modalità manifesto supporta anche la correzione automatica di tutti i problemi di sicurezza utilizzando il comando autofix:
kubeaudit autofix -f "/path/to/manifest.yml"
Per scrivere il manifest corretto in un nuovo file invece di modificare il file sorgente, usa il flag -o/--output.
kubeaudit autofix -f "/path/to/manifest.yml" -o "/path/to/fixed"
Per correggere un manifest in base a regole personalizzate specificate in un file di configurazione di kubeaudit, usa il flag -k/--kconfig.
kubeaudit autofix -k "/path/to/kubeaudit-config.yml" -f "/path/to/manifest.yml" -o "/path/to/fixed"
Kubeaudit può rilevare se è in esecuzione all'interno di un container in un cluster. In tal caso, tenterà di eseguire l'audit di tutte le risorse Kubernetes in quel cluster:
kubeaudit all
Kubeaudit tenterà di connettersi a un cluster utilizzando il file kubeconfig locale ($HOME/.kube/config). È possibile specificare una posizione diversa per il kubeconfig usando il flag --kubeconfig. Per specificare un contesto del kubeconfig, usa il flag -c/--context.
kubeaudit all --kubeconfig "/path/to/config" --context my_cluster
Per maggiori informazioni sui file di configurazione di Kubernetes, consulta https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/
Kubeaudit produce risultati con tre livelli di gravità:
Error: Un problema di sicurezza o una configurazione Kubernetes non validaWarning: Una raccomandazione di buona praticaInfo: Informativo, nessuna azione richiesta. Include risultati che sono sovrascrittiIl livello di gravità minimo può essere impostato usando il flag --minSeverity/-m.
Di default kubeaudit restituisce i risultati in modo leggibile dall'uomo. Se l'output deve essere ulteriormente elaborato, può essere impostato per produrre JSON usando il flag --format json. Per produrre risultati come log (il precedente default) usa --format logrus. Alcuni formati di output includono colori per rendere i risultati più facili da leggere in un terminale. Per disabilitare i colori (ad esempio, se stai inviando l'output a un file di testo), puoi usare il flag --no-color.
Puoi generare un report kubeaudit in SARIF usando il flag --format sarif. Per scrivere i risultati SARIF in un file, puoi reindirizzare l'output con >. Per esempio:
kubeaudit all -f path-to-my-file.yaml --format="sarif" > example.sarif
Se ci sono risultati con livello di gravità error, kubeaudit terminerà con codice di uscita 2. Questo può essere modificato usando il flag --exitcode/-e.
Per tutti i modi in cui kubeaudit può essere personalizzato, consulta Flag Globali.
Gli auditor possono anche essere eseguiti singolarmente.
Il file di configurazione di kubeaudit può essere utilizzato per due scopi:
Qualsiasi configurazione che può essere specificata tramite flag per i singoli auditor può essere rappresentata usando la configurazione.
La configurazione ha il seguente formato:
enabledAuditors:
# Gli auditor sono abilitati di default se non sono esplicitamente impostati su "false"
apparmor: false
asat: false
capabilities: true
deprecatedapis: true
hostns: true
image: true
limits: true
mounts: true
netpols: true
nonroot: true
privesc: true
privileged: true
rootfs: true
seccomp: true
auditors:
capabilities:
# aggiungi le capacità necessarie all'elenco degli add, in modo che kubeaudit non segnali errori
allowAddList: ['AUDIT_WRITE', 'CHOWN']
deprecatedapis:
# Se non vengono specificate versioni e l'auditor 'deprecatedapis' è abilitato, verranno generati risultati
# WARN per le risorse definite con una API deprecata.
currentVersion: '1.22'
targetedVersion: '1.25'
image:
# Se non viene specificata un'immagine e l'auditor 'image' è abilitato, verranno generati risultati WARN
# per i container che utilizzano un'immagine senza tag
image: 'myimage:mytag'
limits:
# Se non vengono specificati limiti e l'auditor 'limits' è abilitato, verranno generati risultati WARN
# per i container che non hanno specificato limiti di CPU o memoria
cpu: '750m'
memory: '500m'
Per maggiori dettagli su ciascun auditor, inclusa una descrizione della configurazione specifica dell'auditor nella configurazione, consulta la Documentazione degli Auditor.
Nota: Il file di configurazione di kubeaudit non è lo stesso del file kubeconfig specificato con il flag --kubeconfig, che si riferisce al file di configurazione di Kubernetes (vedi Modalità Locale). Nota inoltre che solo i comandi all e autofix supportano l'uso di un file di configurazione kubeaudit. Non funzionerà con altri comandi.
Nota: Se vengono utilizzati flag in combinazione con il file di configurazione, i flag avranno la precedenza.
I problemi di sicurezza possono essere ignorati per container o pod specifici aggiungendo etichette di override. Ciò significa che l'auditor produrrà risultati info invece di risultati error e il nome del risultato dell'audit avrà Allowed aggiunto. Le etichette sono documentate nella documentazione di ciascun auditor, ma il formato generale per gli auditor che supportano gli override è il seguente:
Un'etichetta di override è composta da una key e un value.
La key è una combinazione del tipo di override (container o pod) e un identificatore di override unico per ogni auditor (vedi la documentazione per l'auditor specifico). La key può assumere una delle due forme a seconda del tipo di override:
container.kubeaudit.io/[nome container].[identificatore override]
kubeaudit.io/[identificatore override]
Se il value è impostato su una stringa non vuota, verrà visualizzato nel risultato info come OverrideReason:
$ kubeaudit asat -f "auditors/asat/fixtures/service-account-token-true-allowed.yml"
---------------- Results for ---------------
apiVersion: v1
kind: ReplicationController
metadata:
name: replicationcontroller
namespace: service-account-token-true-allowed
--------------------------------------------
-- [info] AutomountServiceAccountTokenTrueAndDefaultSAAllowed
Message: Audit result overridden: Default service account with token mounted. automountServiceAccountToken should be set to 'false' or a non-default service account should be used.
Metadata:
OverrideReason: SomeReason
Secondo le specifiche di Kubernetes, il value deve essere di 63 caratteri o meno e deve essere vuoto o iniziare e terminare con un carattere alfanumerico ([a-z0-9A-Z]) con trattini (-), underscore (_), punti (.), e caratteri alfanumerici in mezzo.
È possibile aggiungere più etichette di override (per più auditor) alla stessa risorsa.
Consulta la documentazione dell'auditor specifico che desideri sovrascrivere per esempi.
Per saperne di più sulle etichette, consulta https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/
Se desideri correggere un bug, contribuire con una funzionalità o semplicemente correggere un refuso, sentiti libero di farlo seguendo il nostro Codice di Condotta.
go get github.com/Shopify/kubeauditcd $GOPATH/src/github.com/Shopify/kubeauditgit remote add fork https://github.com/tu-sei-fantastico/kubeauditgit checkout -b awesome-new-featureUSE_KIND=true make test (per eseguire i test senza Kind: make test)git commit -am 'Aggiunge una fantastica funzionalità'git push forkNota: se non hai firmato il CLA prima di aprire la PR, puoi rieseguire il controllo aggiungendo un commento alla PR che dice "I've signed the CLA!"!
| Comando | Descrizione | Documentazione |
|---|
all | Esegue tutti gli auditor disponibili, o quelli specificati tramite un file di configurazione kubeaudit. | docs |
autofix | Corregge automaticamente i problemi di sicurezza. | docs |
version | Stampa la versione corrente di kubeaudit. |
| Comando | Descrizione | Documentazione |
|---|
apparmor | Trova container in esecuzione senza AppArmor. | docs |
asat | Trova pod che utilizzano un service account predefinito montato automaticamente. | docs |
capabilities | Trova container che non rimuovono le capacità raccomandate o che ne aggiungono di nuove. | docs |
deprecatedapis | Trova qualsiasi risorsa definita con una versione API deprecata. | docs |
hostns | Trova container che hanno HostPID, HostIPC o HostNetwork abilitati. | docs |
image | Trova container che non utilizzano la versione desiderata di un'immagine (tramite il tag) o usano un'immagine senza tag. | docs |
limits | Trova container che superano i limiti specificati di CPU e memoria o che non ne specificano alcuno. | docs |
mounts | Trova container che montano percorsi host sensibili. | docs |
netpols | Trova namespace che non hanno una policy di rete default-deny. | docs |
nonroot | Trova container in esecuzione come root. | docs |
privesc | Trova container che permettono l'escalation dei privilegi. | docs |
privileged | Trova container in esecuzione in modalità privilegiata. | docs |
rootfs | Trova container che non hanno un filesystem in sola lettura. | docs |
seccomp | Trova container in esecuzione senza Seccomp. | docs |
| Short | Long | Descrizione |
|---|
| --format | Il formato di output da utilizzare (uno tra "sarif", "pretty", "logrus", "json") (default è "pretty") | |
| --kubeconfig | Percorso del file di configurazione Kubernetes locale. Utilizzato solo in modalità locale (default è $HOME/.kube/config) | |
| -c | --context | Il nome del contesto kubeconfig da utilizzare |
| -f | --manifest | Percorso del file yaml da sottoporre ad audit. Utilizzato solo in modalità manifesto. Puoi usare - per leggere da stdin. |
| -n | --namespace | Esegui l'audit solo sulle risorse nel namespace specificato. Non supportato attualmente in modalità manifesto. |
| -g | --includegenerated | Includi le risorse generate nella scansione (come i Pod generati dai deployment). Se desideri che kubeaudit produca risultati per le risorse generate (ad esempio se hai risorse personalizzate o vuoi intercettare risorse orfane per cui la risorsa proprietaria non esiste più) puoi usare questo flag. |
| -m | --minseverity | Imposta il livello di gravità minimo da segnalare (uno tra "error", "warning", "info") (default è "info") |
| -e | --exitcode | Codice di uscita da utilizzare se ci sono risultati con gravità "error". Convenzionalmente, 0 indica successo e tutti i codici non zero un errore. (default è 2) |
| --no-color | Non utilizzare colori nell'output (default è false) |