
ClairとDocker Registryの統合(Clair API v1およびv3をサポート)
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をDocker化できます。$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ファイルを作成して --env-file 引数として渡します。例えば、env変数を 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 Container 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 - 修正がない脆弱性をしきい値にカウントしない