第5章 Red Hat Quay の Clair


Clair v4 (Clair) は、静的コード分析を活用してイメージコンテンツを解析し、コンテンツに影響を与える脆弱性を報告するオープンソースアプリケーションです。Clair は Red Hat Quay にパッケージ化されており、スタンドアロンと Operator デプロイメントの両方で使用できます。エンタープライズ環境に合わせてコンポーネントを個別にスケーリングできる、非常にスケーラブルな設定で実行できます。

5.1. Clair 設定の概要

Clair は、構造化された YAML ファイルによって設定されます。各 Clair ノードは、CLI フラグまたは環境変数を使用して、実行するモードと設定ファイルへのパスを指定する必要があります。以下に例を示します。

$ clair -conf ./path/to/config.yaml -mode indexer

または、以下を実行します。

$ clair -conf ./path/to/config.yaml -mode matcher

前述のコマンドはそれぞれ、同じ設定ファイルを使用して 2 つの Clair ノードを開始します。1 つはインデックス作成機能を実行し、もう 1 つはマッチング機能を実行します。

Clair を combo モードで実行している場合は、設定でインデクサー、matcher、およびノーティファイアー設定ブロックを指定する必要があります。

5.1.1. プロキシー環境での Clair の使用に関する情報

Go 標準ライブラリーが尊重する環境変数は、必要に応じて指定できます。次に例を示します。

  • HTTP_PROXY

    $ export http://<user_name>:<password>@<proxy_host>:<proxy_port>
  • HTTPS_PROXY

    $ export https://<user_name>:<password>@<proxy_host>:<proxy_port>
  • SSL_CERT_DIR

    $ export SSL_CERT_DIR=/<path>/<to>/<ssl>/<certificates>

Clair のアップデーター URL を使用して環境内でプロキシーサーバーを使用している場合は、Clair がスムーズにその URL にアクセスできるように、どの URL をプロキシー許可リストに追加する必要があるかを特定する必要があります。たとえば、osv アップデーターは、エコシステムデータダンプを取得するために https://osv-vulnerabilities.storage.googleapis.com にアクセスする必要があります。このような場合、URL をプロキシー許可リストに追加する必要があります。アップデーター URL の完全なリストについては、「Clair のアップデーター URL」を参照してください。

また、標準の Clair URL がプロキシー許可リストに追加されていることを確認する必要があります。

  • https://search.maven.org/solrsearch/select
  • https://catalog.redhat.com/api/containers/
  • https://access.redhat.com/security/data/metrics/repository-to-cpe.json
  • https://access.redhat.com/security/data/metrics/container-name-repos-map.json

プロキシーサーバーを設定するときは、Clair とこれらの URL 間のシームレスな通信を可能にするために必要な認証要件や特定のプロキシー設定を考慮してください。これらの考慮事項をすべて文書化して対処することで、アップデーターのトラフィックをプロキシー経由でルーティングしながら、Clair を効果的に機能させることができます。

5.1.2. Clair 設定リファレンス

次の YAML は、Clair 設定の例を示しています。

http_listen_addr: ""
introspection_addr: ""
log_level: ""
tls: {}
indexer:
    connstring: ""
    scanlock_retry: 0
    layer_scan_concurrency: 5
    migrations: false
    scanner: {}
    airgap: false
matcher:
    connstring: ""
    indexer_addr: ""
    migrations: false
    period: ""
    disable_updaters: false
    update_retention: 2
matchers:
    names: nil
    config: nil
updaters:
    sets: nil
    config: nil
notifier:
    connstring: ""
    migrations: false
    indexer_addr: ""
    matcher_addr: ""
    poll_interval: ""
    delivery_interval: ""
    disable_summary: false
    webhook: null
    amqp: null
    stomp: null
auth:
  psk: nil
trace:
    name: ""
    probability: null
    jaeger:
        agent:
            endpoint: ""
        collector:
            endpoint: ""
            username: null
            password: null
        service_name: ""
        tags: nil
        buffer_max: 0
metrics:
    name: ""
    prometheus:
        endpoint: null
    dogstatsd:
        url: ""
注記

上記の YAML ファイルには、万全を期すためにすべてのキーがリストされています。この設定ファイルをそのまま使用すると、一部のオプションがデフォルトで正常に設定されない場合があります。

5.1.3. Clair の一般的なフィールド

次の表では、Clair デプロイメントで使用できる一般的な設定フィールドについて説明します。

フィールドTyphttp_listen_ae説明

http_listen_addr

String

HTTP API が公開される場所を設定します。

デフォルト: :6060

introspection_addr

String

Clair のメトリクスと正常性エンドポイントが公開される場所を設定します。

log_level

String

ログレベルを設定します。文字列 debug-colordebuginfowarnerrorfatalpanic のいずれかが必要です。

tls

String

TLS/SSL および HTTP/2 の HTTP API を提供するための設定を含むマップ。

.cert

String

使用する TLS 証明書。フルチェーン証明書である必要があります。

一般的な Clair フィールドの設定例

次の例は、Clair 設定を示しています。

一般的な Clair フィールドの設定例

# ...
http_listen_addr: 0.0.0.0:6060
introspection_addr: 0.0.0.0:8089
log_level: info
# ...

5.1.4. Clair インデクサー設定フィールド

次の表では、Clair の indexer コンポーネントの設定フィールドについて説明します。

フィールド説明

indexer

Object

Clair インデクサーノード設定を提供します。

.airgap

Boolean

インデクサーとフェッチャーのインターネットへの HTTP アクセスを無効にします。プライベート IPv4 および IPv6 アドレスが許可されます。データベース接続は影響を受けません。

.connstring

String

Postgres 接続文字列。URL または libpq 接続文字列として形式を受け入れます。

.index_report_request_concurrency

Integer

レートは、インデックスレポート作成リクエストの数を制限します。これを 0 に設定すると、この値の自動サイズ調整が試みられます。負の値を設定すると、無制限になります。自動サイジングは、使用可能なコア数の倍数です。

同時実行数を超えた場合、API はステータスコード 429 を返します。

.scanlock_retry

Integer

秒を表す正の整数。並行インデクサーは、マニフェストスキャンをロックして、上書きを回避します。この値は、待機中のインデクサーがロックをポーリングする頻度をチューニングします。

.layer_scan_concurrency

Integer

レイヤーの同時スキャン数を制限する正の整数。インデクサーは、マニフェストのレイヤーを同時にマッチングします。この値は、インデクサーが並行してスキャンするレイヤーの数をチューニングします。

.migrations

Boolean

インデクサーノードがデータベースへの移行を処理するかどうか。

.scanner

String

インデクサー設定。

Scanner を使用すると、設定オプションをレイヤースキャナーに渡すことができます。スキャナーは、そのように設計されていると、構築時にこの設定を渡します。

.scanner.dist

String

特定のスキャナーの名前と値として任意の YAML を持つマップ。

.scanner.package

String

特定のスキャナーの名前と値として任意の YAML を持つマップ。

.scanner.repo

String

特定のスキャナーの名前と値として任意の YAML を持つマップ。

インデクサー設定の例

次の例は、Clair の仮のインデクサー設定を示しています。

インデクサー設定の例

# ...
indexer:
  connstring: host=quay-server.example.com port=5433 dbname=clair user=clairuser password=clairpass sslmode=disable
  scanlock_retry: 10
  layer_scan_concurrency: 5
  migrations: true
# ...

5.1.5. Clair matcher 設定フィールド

次の表では、Clair の matcher コンポーネントの設定フィールドについて説明します。

注記

matchers 設定フィールドとは異なります。

フィールド説明

matcher

Object

Clair matcher ノード設定を提供します。

.cache_age

String

レスポンスをキャッシュするように、ユーザーに通知する期間を制御します。

.connstring

String

Postgres 接続文字列。URL または libpq 接続文字列として形式を受け入れます。

.max_conn_pool

Integer

データベース接続プールのサイズを制限します。

Clair では、カスタムの接続プールサイズを使用できます。この数は、同時に許可されるアクティブなデータベース接続の数を直接設定します。

このパラメーターは、将来のバージョンでは無視されます。ユーザーは、接続文字列を使用して、これを設定する必要があります。

.indexer_addr

String

matcher は indexer に接続して脆弱性レポートを作成します。このインデクサーの場所は必須です。

デフォルトは 30m です。

.migrations

Boolean

matcher ノードがデータベースへの移行を処理するかどうか。

.period

String

新しいセキュリティーアドバイザリーの更新頻度を決定します。

デフォルトは 30m です。

.disable_updaters

Boolean

バックグラウンド更新を実行するかどうか。

デフォルト: False

.update_retention

Integer

ガベージコレクションサイクル間で保持する更新操作の数を設定します。これは、データベースサイズの制約に基づいて安全な MAX 値に設定する必要があります。

デフォルトは 10m です。

0 未満の値を指定すると、ガベージコレクションが無効になります。2 は、更新を通知と比較できるようにするための最小値です。

matcher 設定の例

matcher 設定の例

# ...
matcher:
  connstring: >-
    host=<DB_HOST> port=5432 dbname=<matcher> user=<DB_USER> password=D<B_PASS>
    sslmode=verify-ca sslcert=/etc/clair/ssl/cert.pem sslkey=/etc/clair/ssl/key.pem
    sslrootcert=/etc/clair/ssl/ca.pem
  indexer_addr: http://clair-v4/
  disable_updaters: false
  migrations: true
  period: 6h
  update_retention: 2
# ...

5.1.6. Clair matchers 設定フィールド

次の表では、Clair の matchers コンポーネントの設定フィールドについて説明します。

注記

matcher 設定フィールドとは異なります。

表5.1 matchers 設定フィールド
フィールド説明

matchers

文字列の配列。

ツリー内 matchers の設定を提供します。

.names

String

有効な matchers について matcher ファクトリーに通知する文字列値のリスト。値を null に設定すると、matchers のデフォルトのリストが実行されます。次の文字列が受け入れられます。alpine-matcheraws-matcherdebian-matchergobinjava-mavenoraclephotonpythonrhelrhel-container-matcherRubysuseubuntu-matcher

.config

String

特定の matcher に設定を提供します。

matchers ファクトリーコンストラクターに提供されるサブオブジェクトを含む matcher の名前をキーとするマップ。以下に例を示します。

matchers 設定の例

次の例は、alpineawsdebianoracle matchers のみを必要とする仮の Clair デプロイメントを示しています。

matchers 設定の例

# ...
matchers:
  names:
  - "alpine-matcher"
  - "aws"
  - "debian"
  - "oracle"
# ...

5.1.7. Clair アップデーター設定フィールド

次の表では、Clair の updaters コンポーネントの設定フィールドについて説明します。

表5.2 アップデーター設定フィールド
フィールド説明

updaters

Object

matcher の更新マネージャーの設定を提供します。

.sets

String

どのアップデーターを実行するかを更新マネージャーに通知する値のリスト。

値を null に設定すると、アップデーターのデフォルトのセットが、alpineawsclair.cvssdebianoraclephotonosvrhelrhcc suseubuntu を実行します。

空白のままにすると、アップデーターは実行されません。

.config

String

特定のアップデーターセットに設定を提供します。

アップデーターセットのコンストラクターに提供されるサブオブジェクトを含むアップデーターセットの名前をキーとするマップ。各アップデーターのサブオブジェクトのリストについては、「詳細なアップデーター設定」を参照してください。

アップデーター設定の例

次の設定では、rhel セットのみが設定されます。rhel アップデーターに固有の ignore_unpatched 変数も定義されています。

アップデーター設定の例

# ...
updaters:
  sets:
    - rhel
  config:
    rhel:
      ignore_unpatched: false
# ...

5.1.8. Clair ノーティファイアー設定フィールド

Clair の一般的なノーティファイアー設定フィールドを以下に示します。

フィールド説明

notifier

Object

Clair ノーティファイアーノード設定を提供します。

.connstring

String

Postgres 接続文字列。形式を URL または libpq 接続文字列として受け入れます。

.migrations

Boolean

ノーティファイアーノードがデータベースへの移行を処理するかどうか。

.indexer_addr

String

ノーティファイアーはインデクサーに接続して、脆弱性の影響を受けるマニフェストを作成または取得します。このインデクサーの場所は必須です。

.matcher_addr

String

ノーティファイアーは matcher に接続して、更新操作をリストし、差分を取得します。この matcher の場所は必須です。

.poll_interval

String

ノーティファイアーが matcher に更新操作をクエリーする頻度。

.delivery_interval

String

ノーティファイアーが、作成された通知または以前に失敗した通知の配信を試行する頻度。

.disable_summary

Boolean

通知をマニフェストごとに 1 つに要約するかどうかを制御します。

ノーティファイアー設定の例

次の notifier スニペットは、最小設定用です。

ノーティファイアー設定の例

# ...
notifier:
  connstring: >-
    host=DB_HOST port=5432 dbname=notifier user=DB_USER password=DB_PASS
    sslmode=verify-ca sslcert=/etc/clair/ssl/cert.pem sslkey=/etc/clair/ssl/key.pem
    sslrootcert=/etc/clair/ssl/ca.pem
  indexer_addr: http://clair-v4/
  matcher_addr: http://clair-v4/
  delivery_interval: 5s
  migrations: true
  poll_interval: 15s
  webhook:
    target: "http://webhook/"
    callback: "http://clair-notifier/notifier/api/v1/notifications"
    headers: ""
  amqp: null
  stomp: null
# ...

5.1.8.1. Clair Webhook 設定フィールド

次の Webhook フィールドを Clair ノーティファイアー環境で使用できます。

表5.3 Clair Webhook フィールド

.webhook

Object

Webhook 配信のノーティファイアーを設定します。

.webhook.target

String

Webhook が配信される URL。

.webhook.callback

String

通知を取得できるコールバック URL。この URL に通知 ID が追加されます。

これは通常、Clair ノーティファイアーがホスティングされている場所です。

.webhook.headers

String

ヘッダー名を値のリストに関連付けるマップ。

Webhook 設定の例

Webhook 設定の例

# ...
notifier:
# ...
  webhook:
    target: "http://webhook/"
    callback: "http://clair-notifier/notifier/api/v1/notifications"
# ...

5.1.8.2. Clair amqp 設定フィールド

次の Advanced Message Queuing Protocol (AMQP) フィールドを Clair ノーティファイアー環境で使用できます。

.amqp

Object

AMQP 配信のノーティファイアーを設定します。

[注記] ==== Clair は独自に AMQP コンポーネントを宣言しません。エクスチェンジまたはキューを使用しようとするすべての試みは、パッシブのみであり、失敗します。ブローカー管理者は、事前にエクスチェンジとキューをセットアップする必要があります。====

.amqp.direct

Boolean

true の場合、ノーティファイアーは設定された AMQP ブローカーに個別の通知 (コールバックではない) を配信します。

.amqp.rollup

Integer

amqp.directtrue に設定されている場合、この値は直接配信で送信する通知の数をノーティファイアーに通知します。たとえば、directtrue に設定され、amqp.rollup5 に設定されている場合、ノーティファイアーは単一の JSON ペイロードで 5 つ以下の通知をブローカーに配信します。値を 0 に設定すると、実質的に 1 に設定されます。

.amqp.exchange

Object

接続先の AMQP エクスチェンジ。

.amqp.exchange.name

String

接続先のエクスチェンジの名前。

.amqp.exchange.type

String

エクスチェンジのタイプ。通常は、directfanouttopicheaders のいずれかです。

.amqp.exchange.durability

Boolean

設定されたキューが永続的かどうか。

.amqp.exchange.auto_delete

Boolean

設定されたキューが auto_delete_policy を使用するかどうか。

.amqp.routing_key

String

各通知が送信されるルーティングキーの名前。

.amqp.callback

String

amqp.directfalse に設定されている場合、この URL はブローカーに送信される通知コールバックで提供されます。この URL は、Clair の通知 API エンドポイントを指している必要があります。

.amqp.uris

String

接続先の 1 つ以上の AMQP ブローカーのリスト (優先順位順)。

.amqp.tls

Object

AMQP ブローカーへの TLS/SSL 接続を設定します。

.amqp.tls.root_ca

String

ルート CA を読み取ることができるファイルシステムパス。

.amqp.tls.cert

String

TLS/SSL 証明書を読み取ることができるファイルシステムパス。

[注意] ==== Go crypto/x509 パッケージに記載されているように、Clair は SSL_CERT_DIR も許可します。====

.amqp.tls.key

String

TLS/SSL 秘密鍵を読み取ることができるファイルシステムパス。

AMQP 設定の例

次の例は、Clair の仮の AMQP 設定を示しています。

AMQP 設定の例

# ...
notifier:
# ...
  amqp:
    exchange:
        name: ""
        type: "direct"
        durable: true
        auto_delete: false
    uris: ["amqp://user:pass@host:10000/vhost"]
    direct: false
    routing_key: "notifications"
    callback: "http://clair-notifier/notifier/api/v1/notifications"
    tls:
     root_ca: "optional/path/to/rootca"
     cert: "madatory/path/to/cert"
     key: "madatory/path/to/key"
# ...

5.1.8.3. Clair STOMP 設定フィールド

次の Simple Text Oriented Message Protocol (STOMP) フィールドを Clair ノーティファイアー環境で使用できます。

.stompObjectSTOMP 配信のノーティファイアーを設定します。

.stomp.direct

Boolean

true の場合、ノーティファイアーは個別の通知 (コールバックではない) を設定済みの STOMP ブローカーに配信します。

.stomp.rollup

Integer

stomp.directtrue に設定されている場合、この値は、1 回の直接配信で送信される通知の数を制限します。たとえば、directtrue に設定され、rollup5 に設定されている場合、ノーティファイアーは単一の JSON ペイロードで 5 つ以下の通知をブローカーに配信します。値を 0 に設定すると、実質的に 1 に設定されます。

.stomp.callback

String

stomp.callbackfalse に設定されている場合は、通知コールバックで指定された URL がブローカーに送信されます。この URL は、Clair の通知 API エンドポイントを指している必要があります。

.stomp.destination

String

通知を配信する STOMP の宛先。

.stomp.uris

String

接続先の 1 つ以上の STOMP ブローカーのリスト (優先順位順)。

.stomp.tls

Object

STOMP ブローカーへの TLS/SSL 接続を設定しました。

.stomp.tls.root_ca

String

ルート CA を読み取ることができるファイルシステムパス。

[注意] ==== Go crypto/x509 パッケージに記載されているように、Clair は SSL_CERT_DIR も受け入れます。====

.stomp.tls.cert

String

TLS/SSL 証明書を読み取ることができるファイルシステムパス。

.stomp.tls.key

String

TLS/SSL 秘密鍵を読み取ることができるファイルシステムパス。

.stomp.user

String

STOMP ブローカーのログインの詳細を設定します。

.stomp.user.login

String

接続に使用する STOMP ログイン。

.stomp.user.passcode

String

接続に使用する STOMP パスコード。

STOMP 設定の例

次の例は、Clair の仮の STOMP 設定を示しています。

STOMP 設定の例

# ...
notifier:
# ...
  stomp:
    desitnation: "notifications"
    direct: false
    callback: "http://clair-notifier/notifier/api/v1/notifications"
    login:
      login: "username"
      passcode: "passcode"
    tls:
     root_ca: "optional/path/to/rootca"
     cert: "madatory/path/to/cert"
     key: "madatory/path/to/key"
# ...

5.1.9. Clair 認可設定フィールド

Clair では、次の認可設定フィールドを使用できます。

フィールド説明

auth

Object

Clair の外部およびサービス内 JWT ベースの認証を定義します。複数の auth 機能が定義されている場合、Clair は 1 つを選択します。現在、複数の機能はサポートされていません。

.psk

String

事前共有キー認証を定義します。

.psk.key

String

JWT の署名と検証を行うすべての当事者間で配布される、base64 でエンコードされた共有キー。

.psk.iss

String

確認する JWT 発行者のリスト。空のリストは、JWT クレームで任意の発行者を受け入れます。

認可設定の例

次の authorization スニペットは、最小設定用です。

認可設定の例

# ...
auth:
  psk:
    key: MTU5YzA4Y2ZkNzJoMQ== 1
    iss: ["quay"]
# ...

5.1.10. Clair トレース設定フィールド

Clair では、次のトレース設定フィールドを使用できます。

フィールド説明

trace

Object

OpenTelemetry に基づいて分散トレース設定を定義します。

.name

String

トレースが属するアプリケーションの名前。

.probability

Integer

トレースが発生する確率。

.jaeger

Object

Jaeger トレースの値を定義します。

.jaeger.agent

Object

Jaeger エージェントへの配信を設定するための値を定義します。

.jaeger.agent.endpoint

String

トレースを送信できる <host>:<post> 構文のアドレス。

.jaeger.collector

Object

Jaeger コレクターへの配信を設定するための値を定義します。

.jaeger.collector.endpoint

String

トレースを送信できる <host>:<post> 構文のアドレス。

.jaeger.collector.username

String

Jaeger ユーザー名。

.jaeger.collector.password

String

Jaeger パスワード。

.jaeger.service_name

String

Jaeger に登録されているサービス名。

.jaeger.tags

String

追加のメタデータを提供するキーと値のペア。

.jaeger.buffer_max

Integer

保管および分析のために Jaeger バックエンドに送信される前にメモリーにバッファーできるスパンの最大数。

トレース設定の例

次の例は、Clair の仮のトレース設定を示しています。

トレース設定の例

# ...
trace:
  name: "jaeger"
  probability: 1
  jaeger:
    agent:
      endpoint: "localhost:6831"
    service_name: "clair"
# ...

5.1.11. Clair メトリクス設定フィールド

Clair では、次のメトリクス設定フィールドを使用できます。

フィールド説明

metrics

Object

OpenTelemetry に基づいて分散トレース設定を定義します。

.name

String

使用中のメトリクスの名前。

.prometheus

String

Prometheus メトリクスエクスポーターの設定。

.prometheus.endpoint

String

メトリクスが提供されるパスを定義します。

メトリクス設定の例

次の例は、Clair の仮のメトリクス設定を示しています。

メトリクス設定の例

# ...
metrics:
  name: "prometheus"
  prometheus:
    endpoint: "/metricsz"
# ...

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.