
Integración de Clair y Docker Registry
Integración de Clair y Docker Registry (soporta tanto API v1 como v3 de Clair)
Klar es una herramienta sencilla para analizar imágenes almacenadas en un registro Docker privado o público en busca de vulnerabilidades de seguridad usando Clair https://github.com/coreos/clair. Klar está diseñado para ser utilizado como una herramienta de integración, por lo que se basa en variables de entorno. Es un único binario que no requiere dependencias.
Klar actúa como un cliente que coordina las comprobaciones de imágenes entre el registro Docker y Clair.
La forma más sencilla es descargar la última versión (para OSX y Linux) desde https://github.com/optiopay/klar/releases/ y colocar el binario en una carpeta en tu PATH (asegúrate de que tenga permiso de ejecución).
Asegúrate de tener instalado y configurado el compilador del lenguaje Go https://golang.org/doc/install
Luego ejecuta
go get github.com/optiopay/klar
asegúrate de que tu carpeta de binarios de Go esté en tu PATH (ej. export PATH=$PATH:/usr/local/go/bin)
El proceso de Klar devuelve 0 si el número de vulnerabilidades de alta gravedad detectadas en una imagen es menor o igual a un umbral (ver más abajo) y 1 si hay más. Devolverá 2 si un error ha impedido que la imagen sea analizada.
Klar se puede configurar mediante las siguientes variables de entorno:
CLAIR_ADDR - dirección del servidor Clair. Tiene la forma de protocol://host:port - protocol y port por defecto son http y 6060 respectivamente y pueden omitirse. También se puede especificar autenticación básica en la URL: protocol://login:password@host:port.
CLAIR_OUTPUT - nivel de umbral de gravedad, las vulnerabilidades con nivel de gravedad mayor o igual a este umbral se mostrarán. Los niveles soportados son Unknown, Negligible, Low, Medium, High, Critical, . El valor predeterminado es .
Uso:
CLAIR_ADDR=localhost CLAIR_OUTPUT=High CLAIR_THRESHOLD=10 DOCKER_USER=docker DOCKER_PASSWORD=secret klar postgres:9.5.1
Puedes habilitar una salida más detallada configurando KLAR_TRACE como true.
export KLAR_TRACE=true para que persista entre ejecuciones.Klar se puede dockerizar. Ve a $GOPATH/src/github.com/optiopay/klar y compila Klar en la raíz del proyecto. Si estás en Linux:
CGO_ENABLED=0 go build -a -installsuffix cgo .
Si estás en Mac, no olvides compilarlo para Linux:
GOOS=linux go build .
Para construir la imagen Docker, ejecuta en la raíz del proyecto (reemplaza klar con el nombre completamente calificado si lo deseas):
docker build -t klar .
Luego pasa las variables de entorno como argumentos --env separados, o crea un archivo de entorno y pásalo como argumento --env-file. Por ejemplo, guarda las variables de entorno como my-klar.env:
CLAIR_ADDR=localhost
CLAIR_OUTPUT=High
CLAIR_THRESHOLD=10
DOCKER_USER=docker
DOCKER_PASSWORD=secret
Luego ejecuta
docker run --env-file=my-klar.env klar postgres:9.5.1
No hay un nombre de usuario/contraseña permanente para Amazon ECR; las credenciales deben obtenerse usando aws ecr get-login y son válidas por 12 horas. Aquí hay un script de ejemplo que se puede usar para proporcionar credenciales ECR a Klar:
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
Para la autenticación contra GCR (Google Cloud Registry), la forma más sencilla es usar las credenciales predeterminadas de la aplicación. Estas solo funcionan cuando se ejecuta Klar desde GCP. El único requisito es el 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 - cuántas vulnerabilidades mostradas puede tolerar Klar antes de devolver 1. El valor predeterminado es 0.
CLAIR_TIMEOUT - tiempo de espera en minutos antes de que Klar cancele el escaneo de la imagen. El valor predeterminado es 1
DOCKER_USER - nombre de cuenta del registro Docker.
DOCKER_PASSWORD - contraseña de la cuenta del registro Docker.
DOCKER_TOKEN - token de la cuenta del registro Docker. (Se puede usar en lugar de DOCKER_USER y DOCKER_PASSWORD)
DOCKER_INSECURE - Permite que Klar acceda a registros con certificados SSL no válidos. El valor predeterminado es false. Clair deberá iniciarse con -insecure-tls para que esto funcione.
DOCKER_TIMEOUT - tiempo de espera en minutos al intentar obtener capas de un registro Docker
DOCKER_PLATFORM_OS - El sistema operativo de la imagen Docker. El valor predeterminado es linux. Esto solo es necesario si la imagen especificada hace referencia a un ManifestList de Docker en lugar de un manifiesto habitual.
DOCKER_PLATFORM_ARCH - La arquitectura para la que la imagen Docker está optimizada. El valor predeterminado es amd64. Esto solo es necesario si la imagen especificada hace referencia a un ManifestList de Docker en lugar de un manifiesto habitual.
REGISTRY_INSECURE - Permite que Klar acceda a registros no seguros (solo HTTP). El valor predeterminado es false.
JSON_OUTPUT - Salida en JSON, no en texto plano. El valor predeterminado es false.
FORMAT_OUTPUT - Formato de salida de las vulnerabilidades. Los formatos soportados son standard, json, table. El valor predeterminado es standard. Si JSON_OUTPUT está configurado como true, esta opción se ignora.
WHITELIST_FILE - Ruta al archivo YAML con la lista blanca de CVE. Consulta whitelist-example.yaml para el formato del archivo.
IGNORE_UNFIXED - No contar las vulnerabilidades sin una solución hacia el umbral