
Integrazione di Clair e Docker Registry
Integrazione di Clair e Docker Registry (supporta sia Clair API v1 che v3)
Klar è un semplice strumento per analizzare le immagini archiviate in un registro Docker privato o pubblico per vulnerabilità di sicurezza utilizzando Clair https://github.com/coreos/clair. Klar è progettato per essere utilizzato come strumento di integrazione, quindi si basa su variabili d'ambiente. È un singolo binario che non richiede dipendenze.
Klar funge da client che coordina i controlli delle immagini tra il registro Docker e Clair.
Il modo più semplice è scaricare l'ultima release (per OSX e Linux) da https://github.com/optiopay/klar/releases/ e posizionare il binario in una cartella nel tuo PATH (assicurati che abbia il permesso di esecuzione).
Assicurati di avere il compilatore Go installato e configurato https://golang.org/doc/install
Quindi esegui
go get github.com/optiopay/klar
assicurati che la cartella dei binari Go sia nel tuo PATH (es. export PATH=$PATH:/usr/local/go/bin)
Il processo Klar restituisce 0 se il numero di vulnerabilità ad alta gravità rilevate in un'immagine è minore o uguale a una soglia (vedi sotto) e 1 se sono di più. Restituirà 2 se un errore ha impedito l'analisi dell'immagine.
Klar può essere configurato tramite le seguenti variabili d'ambiente:
CLAIR_ADDR - indirizzo del server Clair. Ha la forma protocol://host:port - protocol e port predefiniti sono rispettivamente http e 6060 e possono essere omessi. Puoi anche specificare l'autenticazione di base nell'URL: protocol://login:password@host:port.
CLAIR_OUTPUT - soglia del livello di gravità; le vulnerabilità con livello di gravità maggiore o uguale a questa soglia verranno mostrate. I livelli supportati sono Unknown, Negligible, Low, Medium, High, Critical, . Il valore predefinito è .
Utilizzo:
CLAIR_ADDR=localhost CLAIR_OUTPUT=High CLAIR_THRESHOLD=10 DOCKER_USER=docker DOCKER_PASSWORD=secret klar postgres:9.5.1
Puoi abilitare un output più verboso impostando KLAR_TRACE su true.
export KLAR_TRACE=true per renderlo persistente tra le esecuzioni.Klar può essere dockerizzato. Vai a $GOPATH/src/github.com/optiopay/klar e compila Klar nella root del progetto. Se sei su Linux:
CGO_ENABLED=0 go build -a -installsuffix cgo .
Se sei su Mac non dimenticare di compilare per Linux:
GOOS=linux go build .
Per creare l'immagine Docker esegui nella root del progetto (sostituisci klar con il nome completo se preferisci):
docker build -t klar .
Quindi passa le variabili d'ambiente come argomenti --env separati, oppure crea un file env e passalo come argomento --env-file. Ad esempio, salva le variabili d'ambiente come my-klar.env:
CLAIR_ADDR=localhost
CLAIR_OUTPUT=High
CLAIR_THRESHOLD=10
DOCKER_USER=docker
DOCKER_PASSWORD=secret
Quindi esegui
docker run --env-file=my-klar.env klar postgres:9.5.1
Non esiste un nome utente/password permanente per Amazon ECR; le credenziali devono essere recuperate usando aws ecr get-login e sono valide per 12 ore. Ecco uno script di esempio che può essere utilizzato per fornire a Klar le credenziali ECR:
DOCKER_LOGIN=`aws ecr get-login --no-include-email`
PASSWORD=`echo $DOCKER_LOGIN | cut -d' ' -f6`
REGISTRY=`echo $DOCKER_LOGIN | cut -d' ' -f7 | sed "s/https:\/\///"`
DOCKER_USER=AWS DOCKER_PASSWORD=${PASSWORD} ./klar ${REGISTRY}/my-image
Per l'autenticazione su GCR (Google Cloud Registry), il modo più semplice è utilizzare le credenziali predefinite dell'applicazione. Queste funzionano solo quando si esegue Klar da GCP. L'unico requisito è Google Cloud SDK.
DOCKER_USER=oauth2accesstoken
DOCKER_PASSWORD="$(gcloud auth application-default print-access-token)"
Con Docker:
DOCKER_USER=oauth2accesstoken
DOCKER_PASSWORD="$(docker run --rm google/cloud-sdk:alpine gcloud auth application-default print-access-token)"
Defcon1UnknownCLAIR_THRESHOLD - quante vulnerabilità mostrate Klar può tollerare prima di restituire 1. Il valore predefinito è 0.
CLAIR_TIMEOUT - timeout in minuti prima che Klar annulli la scansione dell'immagine. Il valore predefinito è 1.
DOCKER_USER - nome dell'account del registro Docker.
DOCKER_PASSWORD - password dell'account del registro Docker.
DOCKER_TOKEN - token dell'account del registro Docker. (Può essere usato al posto di DOCKER_USER e DOCKER_PASSWORD)
DOCKER_INSECURE - Consenti a Klar di accedere a registri con certificati SSL non validi. Il valore predefinito è false. Clair dovrà essere avviato con -insecure-tls per far funzionare questa opzione.
DOCKER_TIMEOUT - timeout in minuti durante il tentativo di recuperare i layer da un registro Docker.
DOCKER_PLATFORM_OS - Il sistema operativo dell'immagine Docker. Il valore predefinito è linux. Questo deve essere impostato solo se l'immagine specificata fa riferimento a un ManifestList Docker invece di un normale manifest.
DOCKER_PLATFORM_ARCH - L'architettura per cui l'immagine Docker è ottimizzata. Il valore predefinito è amd64. Questo deve essere impostato solo se l'immagine specificata fa riferimento a un ManifestList Docker invece di un normale manifest.
REGISTRY_INSECURE - Consenti a Klar di accedere a registri non sicuri (solo HTTP). Il valore predefinito è false.
JSON_OUTPUT - Output in JSON, non in testo semplice. Il valore predefinito è false.
FORMAT_OUTPUT - Formato di output delle vulnerabilità. I formati supportati sono standard, json, table. Il valore predefinito è standard. Se JSON_OUTPUT è impostato su true, questa opzione viene ignorata.
WHITELIST_FILE - Percorso del file YAML con la whitelist CVE. Guarda whitelist-example.yaml per il formato del file.
IGNORE_UNFIXED - Non contare le vulnerabilità senza una correzione ai fini della soglia.