
Integration von Clair und Docker Registry
Integration von Clair und Docker Registry (unterstützt sowohl Clair API v1 als auch v3)
Klar ist ein einfaches Werkzeug, um Bilder, die in einer privaten oder öffentlichen Docker-Registry gespeichert sind, mit Clair auf Sicherheitslücken zu analysieren https://github.com/coreos/clair. Klar ist als Integrationstool konzipiert und basiert daher auf Umgebungsvariablen. Es ist eine einzelne Binärdatei, die keine Abhängigkeiten benötigt.
Klar fungiert als Client, der die Bildprüfungen zwischen der Docker-Registry und Clair koordiniert.
Der einfachste Weg ist, die neueste Version (für OSX und Linux) von https://github.com/optiopay/klar/releases/ herunterzuladen und die Binärdatei in einen Ordner in Ihrem PATH zu legen (stellen Sie sicher, dass sie Ausführungsberechtigung hat).
Stellen Sie sicher, dass Sie den Go-Sprachcompiler installiert und konfiguriert haben https://golang.org/doc/install
Dann führen Sie aus
go get github.com/optiopay/klar
stellen Sie sicher, dass Ihr Go-Binärordner in Ihrem PATH ist (z.B. export PATH=$PATH:/usr/local/go/bin)
Der Klar-Prozess gibt 0 zurück, wenn die Anzahl der erkannten Schwachstellen mit hohem Schweregrad in einem Bild kleiner oder gleich einem Schwellenwert ist (siehe unten), und 1, wenn es mehr waren. Er gibt 2 zurück, wenn ein Fehler die Analyse des Bildes verhindert hat.
Klar kann über die folgenden Umgebungsvariablen konfiguriert werden:
CLAIR_ADDR - Adresse des Clair-Servers. Sie hat die Form protocol://host:port - protocol und port standardmäßig http bzw. 6060 und können weggelassen werden. Sie können auch eine Basisauthentifizierung in der URL angeben: protocol://login:password@host:port.
CLAIR_OUTPUT - Schwellenwert für den Schweregrad, Schwachstellen mit einem Schweregrad höher oder gleich diesem Schwellenwert werden ausgegeben. Unterstützte Stufen sind Unknown, Negligible, Low, Medium, High, Critical, . Standard ist .
Verwendung:
CLAIR_ADDR=localhost CLAIR_OUTPUT=High CLAIR_THRESHOLD=10 DOCKER_USER=docker DOCKER_PASSWORD=secret klar postgres:9.5.1
Sie können eine ausführlichere Ausgabe aktivieren, indem Sie KLAR_TRACE auf true setzen.
export KLAR_TRACE=true aus, um es zwischen den Ausführungen zu speichern.Klar kann dockerisiert werden. Gehen Sie zu $GOPATH/src/github.com/optiopay/klar und bauen Sie Klar im Projektstammverzeichnis. Wenn Sie auf Linux sind:
CGO_ENABLED=0 go build -a -installsuffix cgo .
Wenn Sie auf einem Mac sind, vergessen Sie nicht, es für Linux zu bauen:
GOOS=linux go build .
Um das Docker-Image zu bauen, führen Sie im Projektstammverzeichnis aus (ersetzen Sie klar ggf. durch den vollqualifizierten Namen):
docker build -t klar .
Übergeben Sie dann Umgebungsvariablen als separate --env-Argumente oder erstellen Sie eine Env-Datei und übergeben Sie sie als --env-file-Argument. Beispielsweise speichern Sie Umgebungsvariablen als my-klar.env:
CLAIR_ADDR=localhost
CLAIR_OUTPUT=High
CLAIR_THRESHOLD=10
DOCKER_USER=docker
DOCKER_PASSWORD=secret
Dann führen Sie aus
docker run --env-file=my-klar.env klar postgres:9.5.1
Es gibt keinen permanenten Benutzernamen/Passwort für Amazon ECR, die Anmeldedaten müssen mit aws ecr get-login abgerufen werden und sind 12 Stunden gültig. Hier ist ein Beispielskript, das verwendet werden kann, um Klar mit ECR-Anmeldedaten zu versorgen:
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
Für die Authentifizierung gegenüber GCR (Google Cloud Registry) ist der einfachste Weg, die application default credentials zu verwenden. Diese funktionieren nur, wenn Klar von GCP aus ausgeführt wird. Die einzige Voraussetzung ist das Google Cloud SDK.
DOCKER_USER=oauth2accesstoken
DOCKER_PASSWORD="$(gcloud auth application-default print-access-token)"
Mit Docker:
DOCKER_USER=oauth2accesstoken
DOCKER_PASSWORD="$(docker run --rm google/cloud-sdk:alpine gcloud auth application-default print-access-token)"
Defcon1UnknownCLAIR_THRESHOLD - wie viele ausgegebene Schwachstellen Klar tolerieren kann, bevor es 1 zurückgibt. Standard ist 0.
CLAIR_TIMEOUT - Zeitüberschreitung in Minuten, bevor Klar das Scannen des Bildes abbricht. Standard ist 1
DOCKER_USER - Name des Docker-Registry-Kontos.
DOCKER_PASSWORD - Passwort des Docker-Registry-Kontos.
DOCKER_TOKEN - Token des Docker-Registry-Kontos. (Kann anstelle von DOCKER_USER und DOCKER_PASSWORD verwendet werden.)
DOCKER_INSECURE - Erlaubt Klar, auf Registries mit ungültigen SSL-Zertifikaten zuzugreifen. Standard ist false. Clair muss mit -insecure-tls gestartet werden, damit dies funktioniert.
DOCKER_TIMEOUT - Zeitüberschreitung in Minuten beim Versuch, Schichten von einer Docker-Registry abzurufen.
DOCKER_PLATFORM_OS - Das Betriebssystem des Docker-Images. Standard ist linux. Dies muss nur gesetzt werden, wenn das angegebene Bild auf eine Docker-Manifestliste anstelle eines üblichen Manifests verweist.
DOCKER_PLATFORM_ARCH - Die Architektur, für die das Docker-Image optimiert ist. Standard ist amd64. Dies muss nur gesetzt werden, wenn das angegebene Bild auf eine Docker-Manifestliste anstelle eines üblichen Manifests verweist.
REGISTRY_INSECURE - Erlaubt Klar, auf unsichere Registries zuzugreifen (nur HTTP). Standard ist false.
JSON_OUTPUT - Ausgabe als JSON, nicht als Klartext. Standard ist false.
FORMAT_OUTPUT - Ausgabeformat der Schwachstellen. Unterstützte Formate sind standard, json, table. Standard ist standard. Wenn JSON_OUTPUT auf true gesetzt ist, wird diese Option ignoriert.
WHITELIST_FILE - Pfad zur YAML-Datei mit der CVE-Whitelist. Schauen Sie sich whitelist-example.yaml für das Dateiformat an.
IGNORE_UNFIXED - Zählen Sie Schwachstellen ohne Fix nicht zum Schwellenwert.