
Clair와 Docker Registry 통합
Clair와 Docker Registry 통합 (Clair API v1 및 v3 모두 지원)
Klar는 Clair(https://github.com/coreos/clair)를 사용하여 개인 또는 공용 Docker 레지스트리에 저장된 이미지의 보안 취약점을 분석하는 간단한 도구입니다. Klar는 통합 도구로 설계되었으므로 환경 변수에 의존합니다. 종속성이 필요 없는 단일 바이너리입니다.
Klar는 Docker 레지스트리와 Clair 간의 이미지 검사를 조정하는 클라이언트 역할을 합니다.
가장 간단한 방법은 https://github.com/optiopay/klar/releases/에서 최신 릴리스(OSX 및 Linux용)를 다운로드하고 바이너리를 PATH에 있는 폴더에 넣는 것입니다(실행 권한이 있는지 확인하세요).
Go 언어 컴파일러가 설치 및 구성되어 있는지 확인하십시오 https://golang.org/doc/install
그런 다음 실행
go get github.com/optiopay/klar
Go 바이너리 폴더가 PATH에 있는지 확인하십시오(예: export PATH=$PATH:/usr/local/go/bin)
Klar 프로세스는 이미지에서 감지된 높은 심각도 취약점 수가 임계값(아래 참조) 이하이면 0을 반환하고, 그보다 많으면 1을 반환합니다. 오류로 인해 이미지를 분석하지 못한 경우 2를 반환합니다.
Klar는 다음 환경 변수를 통해 구성할 수 있습니다:
CLAIR_ADDR - Clair 서버 주소. protocol://host:port 형식이며, protocol과 port는 각각 기본값 http와 6060을 가지며 생략할 수 있습니다. URL에 기본 인증을 지정할 수도 있습니다: protocol://login:password@host:port.
CLAIR_OUTPUT - 심각도 수준 임계값. 이 임계값보다 높거나 같은 심각도 수준의 취약점이 출력됩니다. 지원되는 수준은 Unknown, Negligible, Low, Medium, High, Critical, Defcon1입니다. 기본값은 입니다.
사용법:
CLAIR_ADDR=localhost CLAIR_OUTPUT=High CLAIR_THRESHOLD=10 DOCKER_USER=docker DOCKER_PASSWORD=secret klar postgres:9.5.1
KLAR_TRACE를 true로 설정하여 더 자세한 출력을 활성화할 수 있습니다.
export KLAR_TRACE=true를 실행하여 실행 간에 유지합니다.Klar는 도커화할 수 있습니다. $GOPATH/src/github.com/optiopay/klar로 이동하여 프로젝트 루트에서 Klar를 빌드하십시오. Linux 사용자라면:
CGO_ENABLED=0 go build -a -installsuffix cgo .
Mac 사용자라면 Linux용으로 빌드하는 것을 잊지 마십시오:
GOOS=linux go build .
Docker 이미지를 빌드하려면 프로젝트 루트에서 다음을 실행하십시오(원하는 경우 klar를 정규화된 이름으로 바꾸십시오):
docker build -t klar .
그런 다음 환경 변수를 별도의 --env 인수로 전달하거나 환경 파일을 만들어 --env-file 인수로 전달합니다. 예를 들어 환경 변수를 my-klar.env로 저장합니다:
CLAIR_ADDR=localhost
CLAIR_OUTPUT=High
CLAIR_THRESHOLD=10
DOCKER_USER=docker
DOCKER_PASSWORD=secret
그런 다음 실행
docker run --env-file=my-klar.env klar postgres:9.5.1
Amazon ECR에는 영구적인 사용자 이름/비밀번호가 없으며, aws ecr get-login을 사용하여 자격 증명을 검색해야 하며 12시간 동안 유효합니다. 다음은 Klar에 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
GCR(Google Cloud Registry)에 대한 인증을 위해 가장 쉬운 방법은 애플리케이션 기본 자격 증명을 사용하는 것입니다. 이는 GCP에서 Klar를 실행할 때만 작동합니다. 유일한 요구 사항은 Google Cloud SDK입니다.
DOCKER_USER=oauth2accesstoken
DOCKER_PASSWORD="$(gcloud auth application-default print-access-token)"
Docker 사용 시:
DOCKER_USER=oauth2accesstoken
DOCKER_PASSWORD="$(docker run --rm google/cloud-sdk:alpine gcloud auth application-default print-access-token)"
UnknownCLAIR_THRESHOLD - Klar가 1을 반환하기 전에 허용할 수 있는 출력된 취약점 수입니다. 기본값은 0입니다.
CLAIR_TIMEOUT - Klar가 이미지 스캔을 취소하기 전의 제한 시간(분)입니다. 기본값은 1입니다.
DOCKER_USER - Docker 레지스트리 계정 이름.
DOCKER_PASSWORD - Docker 레지스트리 계정 비밀번호.
DOCKER_TOKEN - Docker 레지스트리 계정 토큰. (DOCKER_USER 및 DOCKER_PASSWORD 대신 사용 가능)
DOCKER_INSECURE - Klar가 잘못된 SSL 인증서가 있는 레지스트리에 액세스할 수 있도록 허용합니다. 기본값은 false입니다. 이 기능이 작동하려면 Clair를 -insecure-tls로 부팅해야 합니다.
DOCKER_TIMEOUT - Docker 레지스트리에서 레이어를 가져오려고 할 때의 제한 시간(분)
DOCKER_PLATFORM_OS - Docker 이미지의 운영 체제. 기본값은 linux입니다. 이는 지정된 이미지가 일반 매니페스트 대신 Docker ManifestList를 참조하는 경우에만 설정해야 합니다.
DOCKER_PLATFORM_ARCH - Docker 이미지가 최적화된 아키텍처. 기본값은 amd64입니다. 이는 지정된 이미지가 일반 매니페스트 대신 Docker ManifestList를 참조하는 경우에만 설정해야 합니다.
REGISTRY_INSECURE - Klar가 안전하지 않은 레지스트리(HTTP만)에 액세스할 수 있도록 허용합니다. 기본값은 false입니다.
JSON_OUTPUT - 일반 텍스트가 아닌 JSON을 출력합니다. 기본값은 false입니다.
FORMAT_OUTPUT - 취약점 출력 형식. 지원되는 형식은 standard, json, table입니다. 기본값은 standard입니다. JSON_OUTPUT이 true로 설정되면 이 옵션은 무시됩니다.
WHITELIST_FILE - CVE 허용 목록이 포함된 YAML 파일의 경로. 파일 형식은 whitelist-example.yaml을 참조하십시오.
IGNORE_UNFIXED - 수정 사항이 없는 취약점을 임계값에 포함하지 않음