
Integração do Clair e do Docker Registry
Integração do Clair e do Docker Registry (suporta tanto a API v1 quanto a v3 do Clair)
Klar é uma ferramenta simples para analisar imagens armazenadas em um registro Docker público ou privado em busca de vulnerabilidades de segurança usando Clair https://github.com/coreos/clair. Klar foi projetado para ser usado como uma ferramenta de integração, por isso depende de variáveis de ambiente. É um binário único que não requer dependências.
Klar serve como um cliente que coordena as verificações de imagem entre o registro Docker e o Clair.
A maneira mais simples é baixar a versão mais recente (para OSX e Linux) de https://github.com/optiopay/klar/releases/ e colocar o binário em uma pasta no seu PATH (certifique-se de que tenha permissão de execução).
Certifique-se de ter o compilador Go instalado e configurado https://golang.org/doc/install
Então execute
go get github.com/optiopay/klar
certifique-se de que a pasta de binários Go está no seu PATH (ex.: export PATH=$PATH:/usr/local/go/bin)
O processo Klar retorna 0 se o número de vulnerabilidades de alta gravidade detectadas em uma imagem for menor ou igual a um limite (veja abaixo) e 1 se houver mais. Ele retornará 2 se um erro impedir a análise da imagem.
Klar pode ser configurado através das seguintes variáveis de ambiente:
CLAIR_ADDR - endereço do servidor Clair. Ele tem a forma protocol://host:port - protocol e port são padronizados para http e 6060 respectivamente e podem ser omitidos. Você também pode especificar autenticação básica na URL: protocol://login:password@host:port.
CLAIR_OUTPUT - limite do nível de gravidade, vulnerabilidades com nível de gravidade maior ou igual a este limite serão exibidas. Níveis suportados são Unknown, Negligible, Low, Medium, High, Critical, . O padrão é .
Uso:
CLAIR_ADDR=localhost CLAIR_OUTPUT=High CLAIR_THRESHOLD=10 DOCKER_USER=docker DOCKER_PASSWORD=secret klar postgres:9.5.1
Você pode ativar uma saída mais detalhada configurando KLAR_TRACE como true.
export KLAR_TRACE=true para persistir entre execuções.Klar pode ser dockerizado. Vá para $GOPATH/src/github.com/optiopay/klar e construa Klar na raiz do projeto. Se você estiver no Linux:
CGO_ENABLED=0 go build -a -installsuffix cgo .
Se você estiver no Mac, não se esqueça de compilá-lo para Linux:
GOOS=linux go build .
Para construir a imagem Docker, execute na raiz do projeto (substitua klar pelo nome totalmente qualificado se desejar):
docker build -t klar .
Em seguida, passe as variáveis de ambiente como argumentos --env separados ou crie um arquivo de ambiente e passe-o como argumento --env-file. Por exemplo, salve as variáveis de ambiente como my-klar.env:
CLAIR_ADDR=localhost
CLAIR_OUTPUT=High
CLAIR_THRESHOLD=10
DOCKER_USER=docker
DOCKER_PASSWORD=secret
Então execute
docker run --env-file=my-klar.env klar postgres:9.5.1
Não há nome de usuário/senha permanente para o Amazon ECR, as credenciais devem ser recuperadas usando aws ecr get-login e são válidas por 12 horas. Aqui está um script de exemplo que pode ser usado para fornecer credenciais ECR ao 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 autenticação no GCR (Google Cloud Registry), a maneira mais fácil é usar as credenciais padrão da aplicação. Elas funcionam apenas ao executar o Klar no GCP. O único requisito é o Google Cloud SDK.
DOCKER_USER=oauth2accesstoken
DOCKER_PASSWORD="$(gcloud auth application-default print-access-token)"
Com Docker:
DOCKER_USER=oauth2accesstoken
DOCKER_PASSWORD="$(docker run --rm google/cloud-sdk:alpine gcloud auth application-default print-access-token)"
Defcon1UnknownCLAIR_THRESHOLD - quantas vulnerabilidades exibidas Klar pode tolerar antes de retornar 1. O padrão é 0.
CLAIR_TIMEOUT - tempo limite em minutos antes de Klar cancelar a digitalização da imagem. O padrão é 1.
DOCKER_USER - nome da conta do registro Docker.
DOCKER_PASSWORD - senha da conta do registro Docker.
DOCKER_TOKEN - token da conta do registro Docker. (Pode ser usado no lugar de DOCKER_USER e DOCKER_PASSWORD)
DOCKER_INSECURE - Permitir que Klar acesse registros com certificados SSL inválidos. O padrão é false. Clair precisará ser iniciado com -insecure-tls para que isso funcione.
DOCKER_TIMEOUT - tempo limite em minutos ao tentar buscar camadas de um registro Docker
DOCKER_PLATFORM_OS - O sistema operacional da imagem Docker. O padrão é linux. Isso só precisa ser definido se a imagem especificada fizer referência a um ManifestList Docker em vez de um manifesto usual.
DOCKER_PLATFORM_ARCH - A arquitetura para a qual a imagem Docker é otimizada. O padrão é amd64. Isso só precisa ser definido se a imagem especificada fizer referência a um ManifestList Docker em vez de um manifesto usual.
REGISTRY_INSECURE - Permitir que Klar acesse registros inseguros (apenas HTTP). O padrão é false.
JSON_OUTPUT - Exibir JSON, não texto simples. O padrão é false.
FORMAT_OUTPUT - Formato de saída das vulnerabilidades. Formatos suportados são standard, json, table. O padrão é standard. Se JSON_OUTPUT estiver definido como true, esta opção é ignorada.
WHITELIST_FILE - Caminho para o arquivo YAML com a whitelist de CVEs. Veja whitelist-example.yaml para o formato do arquivo.
IGNORE_UNFIXED - Não contar vulnerabilidades sem correção em relação ao limite