
Intégration de Clair et Docker Registry
Intégration de Clair et du registre Docker (supporte à la fois les API Clair v1 et v3)
Klar est un outil simple pour analyser les images stockées dans un registre Docker privé ou public à la recherche de vulnérabilités de sécurité en utilisant Clair https://github.com/coreos/clair. Klar est conçu pour être utilisé comme outil d'intégration, il repose donc sur des variables d'environnement. C'est un binaire unique qui ne nécessite aucune dépendance.
Klar sert de client qui coordonne les vérifications d'images entre le registre Docker et Clair.
La façon la plus simple est de télécharger la dernière version (pour OSX et Linux) depuis https://github.com/optiopay/klar/releases/ et de placer le binaire dans un dossier de votre PATH (assurez-vous qu'il a la permission d'exécution).
Assurez-vous d'avoir le compilateur Go installé et configuré https://golang.org/doc/install
Ensuite, exécutez
go get github.com/optiopay/klar
assurez-vous que votre dossier binaire Go est dans votre PATH (par exemple export PATH=$PATH:/usr/local/go/bin)
Le processus Klar renvoie 0 si le nombre de vulnérabilités de haute sévérité détectées dans une image est inférieur ou égal à un seuil (voir ci-dessous) et 1 s'il y en avait plus. Il renverra 2 si une erreur a empêché l'analyse de l'image.
Klar peut être configuré via les variables d'environnement suivantes :
CLAIR_ADDR - adresse du serveur Clair. Elle a la forme protocol://host:port - protocol et port par défaut à http et 6060 respectivement et peuvent être omis. Vous pouvez également spécifier une authentification de base dans l'URL : protocol://login:password@host:port.
CLAIR_OUTPUT - seuil de niveau de sévérité, les vulnérabilités avec un niveau de sévérité supérieur ou égal à ce seuil seront affichées. Les niveaux supportés sont Unknown, Negligible, Low, Medium, High, Critical, . Par défaut, .
Utilisation :
CLAIR_ADDR=localhost CLAIR_OUTPUT=High CLAIR_THRESHOLD=10 DOCKER_USER=docker DOCKER_PASSWORD=secret klar postgres:9.5.1
Vous pouvez activer une sortie plus verbeuse en définissant KLAR_TRACE à true.
export KLAR_TRACE=true pour le conserver entre les exécutions.Klar peut être dockerisé. Allez dans $GOPATH/src/github.com/optiopay/klar et construisez Klar à la racine du projet. Si vous êtes sous Linux :
CGO_ENABLED=0 go build -a -installsuffix cgo .
Si vous êtes sous Mac, n'oubliez pas de le construire pour Linux :
GOOS=linux go build .
Pour construire l'image Docker, exécutez à la racine du projet (remplacez klar par un nom complet si vous le souhaitez) :
docker build -t klar .
Ensuite, passez les variables d'environnement en tant qu'arguments --env séparés, ou créez un fichier d'environnement et passez-le en argument --env-file. Par exemple, enregistrez les variables d'environnement sous my-klar.env :
CLAIR_ADDR=localhost
CLAIR_OUTPUT=High
CLAIR_THRESHOLD=10
DOCKER_USER=docker
DOCKER_PASSWORD=secret
Puis exécutez
docker run --env-file=my-klar.env klar postgres:9.5.1
Il n'y a pas de nom d'utilisateur/mot de passe permanent pour Amazon ECR, les identifiants doivent être récupérés en utilisant aws ecr get-login et ils sont valides pendant 12 heures. Voici un exemple de script qui peut être utilisé pour fournir à Klar les identifiants 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
Pour l'authentification auprès de GCR (Google Cloud Registry), le moyen le plus simple est d'utiliser les informations d'identification par défaut de l'application. Celles-ci ne fonctionnent que lorsque Klar est exécuté depuis GCP. La seule exigence est le SDK Google Cloud.
DOCKER_USER=oauth2accesstoken
DOCKER_PASSWORD="$(gcloud auth application-default print-access-token)"
Avec Docker :
DOCKER_USER=oauth2accesstoken
DOCKER_PASSWORD="$(docker run --rm google/cloud-sdk:alpine gcloud auth application-default print-access-token)"
Defcon1UnknownCLAIR_THRESHOLD - combien de vulnérabilités affichées Klar peut tolérer avant de renvoyer 1. Par défaut 0.
CLAIR_TIMEOUT - délai d'attente en minutes avant que Klar n'annule l'analyse de l'image. Par défaut 1.
DOCKER_USER - nom du compte du registre Docker.
DOCKER_PASSWORD - mot de passe du compte du registre Docker.
DOCKER_TOKEN - jeton du compte du registre Docker. (Peut être utilisé à la place de DOCKER_USER et DOCKER_PASSWORD)
DOCKER_INSECURE - Permettre à Klar d'accéder aux registres avec des certificats SSL invalides. Par défaut false. Clair devra être démarré avec -insecure-tls pour que cela fonctionne.
DOCKER_TIMEOUT - délai d'attente en minutes lors de la tentative de récupération des couches d'un registre Docker.
DOCKER_PLATFORM_OS - Le système d'exploitation de l'image Docker. Par défaut linux. Cela ne doit être défini que si l'image spécifiée fait référence à une ManifestList Docker plutôt qu'à un manifeste habituel.
DOCKER_PLATFORM_ARCH - L'architecture pour laquelle l'image Docker est optimisée. Par défaut amd64. Cela ne doit être défini que si l'image spécifiée fait référence à une ManifestList Docker plutôt qu'à un manifeste habituel.
REGISTRY_INSECURE - Permettre à Klar d'accéder aux registres non sécurisés (HTTP uniquement). Par défaut false.
JSON_OUTPUT - Sortie en JSON, pas en texte brut. Par défaut false.
FORMAT_OUTPUT - Format de sortie des vulnérabilités. Les formats supportés sont standard, json, table. Par défaut standard. Si JSON_OUTPUT est défini sur true, cette option est ignorée.
WHITELIST_FILE - Chemin vers le fichier YAML avec la liste blanche des CVE. Regardez whitelist-example.yaml pour le format du fichier.
IGNORE_UNFIXED - Ne pas compter les vulnérabilités sans correctif vers le seuil.