第6章 Red Hat Quay の Clair
Clair v4 (Clair) は、静的コード分析を活用してイメージコンテンツを解析し、コンテンツに影響を与える脆弱性を報告するオープンソースアプリケーションです。Clair は Red Hat Quay にパッケージ化されており、スタンドアロンと Operator デプロイメントの両方で使用できます。エンタープライズ環境に合わせてコンポーネントを個別にスケーリングできる、非常にスケーラブルな設定で実行できます。
6.1. Clair 設定の概要 リンクのコピーリンクがクリップボードにコピーされました!
Clair は、構造化された YAML ファイルによって設定されます。各 Clair ノードは、CLI フラグまたは環境変数を使用して、実行するモードと設定ファイルへのパスを指定する必要があります。以下に例を示します。
clair -conf ./path/to/config.yaml -mode indexer
$ clair -conf ./path/to/config.yaml -mode indexer
または
clair -conf ./path/to/config.yaml -mode matcher
$ clair -conf ./path/to/config.yaml -mode matcher
前述のコマンドはそれぞれ、同じ設定ファイルを使用して 2 つの Clair ノードを開始します。1 つはインデックス作成機能を実行し、もう 1 つはマッチング機能を実行します。
Go 標準ライブラリーが尊重する環境変数は、必要に応じて指定できます。次に例を示します。
-
HTTP_PROXY -
HTTPS_PROXY -
SSL_CERT_DIR
Clair を combo モードで実行している場合は、設定でインデクサー、マッチャー、通知設定ブロックを指定する必要があります。
6.1.1. Clair 設定リファレンス リンクのコピーリンクがクリップボードにコピーされました!
次の YAML は、Clair 設定の例を示しています。
上記の YAML ファイルには、完全を期すためにすべてのキーがリストされています。この設定ファイルをそのまま使用すると、一部のオプションがデフォルトで正常に設定されない場合があります。
6.1.2. Clair の一般的なフィールド リンクのコピーリンクがクリップボードにコピーされました!
次のセクションでは、Clair デプロイメントで使用できる一般的な設定フィールドを説明します。
| フィールド | Typhttp_listen_ae | 説明 |
|---|---|---|
| http_listen_addr | String | HTTP API が公開される場所を設定します。
デフォルト: |
| introspection_addr | String | Clair のメトリックと正常性エンドポイントが公開される場所を設定します。 |
| log_level | String | ログレベルを設定します。文字列 debug-color、debug、info、warn、error、fatal、panic のいずれかが必要です。 |
| tls | String | TLS/SSL および HTTP/2 の HTTP API を提供するための設定を含むマップ。 |
| .cert | String | 使用する TLS 証明書。フルチェーン証明書である必要があります。 |
6.1.3. Clair インデクサー設定フィールド リンクのコピーリンクがクリップボードにコピーされました!
Clair では、次のインデクサー設定フィールドを使用できます。
| フィールド | タイプ | 説明 |
|---|---|---|
| indexer | Object | Clair インデクサーノード設定を提供します。 |
| .airgap | Boolean | インデクサーとフェッチャーのインターネットへの HTTP アクセスを無効にします。プライベート IPv4 および IPv6 アドレスが許可されます。データベース接続は影響を受けません。 |
| .connstring | String | Postgres 接続文字列。URL または libpq 接続文字列として形式を受け入れます。 |
| .index_report_request_concurrency | Integer |
レートは、インデックスレポート作成リクエストの数を制限します。これを
同時実行数を超えた場合、API はステータスコード |
| .scanlock_retry | Integer | 秒を表す正の整数。並行インデクサーは、マニフェストスキャンをロックして、上書きを回避します。この値は、待機中のインデクサーがロックをポーリングする頻度をチューニングします。 |
| .layer_scan_concurrency | Integer | レイヤーの同時スキャン数を制限する正の整数。インデクサーは、マニフェストのレイヤーを同時にマッチングします。この値は、インデクサーが並行してスキャンするレイヤーの数をチューニングします。 |
| .migrations | Boolean | インデクサーノードがデータベースへの移行を処理するかどうか。 |
| .scanner | String | インデクサー設定。 Scanner を使用すると、設定オプションをレイヤースキャナーに渡すことができます。スキャナーは、そのように設計されていると、構築時にこの設定を渡します。 |
| .scanner.dist | String | 特定のスキャナーの名前と値として任意の YAML を持つマップ。 |
| .scanner.package | String | 特定のスキャナーの名前と値として任意の YAML を持つマップ。 |
| .scanner.repo | String | 特定のスキャナーの名前と値として任意の YAML を持つマップ。 |
6.1.4. Clair マッチャー設定フィールド リンクのコピーリンクがクリップボードにコピーされました!
Clair では、次のマッチャー設定フィールドを使用できます。
matchers 設定フィールドとは異なります。
| フィールド | タイプ | 説明 |
|---|---|---|
| matcher | Object | Clair マッチャーノード設定を提供します。 |
| .cache_age | String | レスポンスをキャッシュするように、ユーザーに通知する期間を制御します。 |
| .connstring | String | Postgres 接続文字列。URL または libpq 接続文字列として形式を受け入れます。 |
| .max_conn_pool | Integer | データベース接続プールのサイズを制限します。 Clair では、カスタムの接続プールサイズを使用できます。この数は、同時に許可されるアクティブなデータベース接続の数を直接設定します。 このパラメーターは、将来のバージョンでは無視されます。ユーザーは、接続文字列を使用して、これを設定する必要があります。 |
| .indexer_addr | String |
マッチャーはインデクサーに接続して
デフォルトは |
| .migrations | Boolean | マッチャーノードがデータベースへの移行を処理するかどうか。 |
| .period | String | 新しいセキュリティーアドバイザリーの更新頻度を決定します。
デフォルトは |
| .disable_updaters | Boolean | バックグラウンド更新を実行するかどうか。 |
| .update_retention | Integer | ガベージコレクションサイクル間で保持する更新操作の数を設定します。これは、データベースサイズの制約に基づいて安全な MAX 値に設定する必要があります。
デフォルトは
|
6.1.5. Clair マッチャー設定フィールド リンクのコピーリンクがクリップボードにコピーされました!
Clair では、次のマッチャー設定フィールドを使用できます。
matcher 設定フィールドとは異なります。
| フィールド | タイプ | 説明 |
|---|---|---|
| matchers | 文字列の配列。 |
in-tree |
| .names | String |
有効なマッチャーについてマッチャーファクトリーに通知する文字列値のリスト。値が |
| .config | String | 特定のマッチャーに設定を提供します。 マッチャーファクトリーコンストラクターに提供されるサブオブジェクトを含むマッチャーの名前をキーとするマップ。以下に例を示します。 config:
python:
ignore_vulns:
- CVE-XYZ
- CVE-ABC
|
6.1.6. Clair アップデーター設定フィールド リンクのコピーリンクがクリップボードにコピーされました!
Clair では、次のアップデーター設定フィールドを使用できます。
| フィールド | タイプ | 説明 |
|---|---|---|
| updaters | Object | マッチャーの更新マネージャーの設定を提供します。 |
| .sets | String | どのアップデーターを実行するかを更新マネージャーに通知する値のリスト。
値が 空白のままにすると、更新プログラムは実行されません。 |
| .config | String | 特定のアップデーターセットに設定を提供します。 アップデーターセットのコンストラクターに提供されるサブオブジェクトを含むアップデーターセットの名前をキーとするマップ。以下に例を示します。 config:
ubuntu:
security_tracker_url: http://security.url
ignore_distributions:
- cosmic
|
6.1.7. Clair ノーティファイアー設定フィールド リンクのコピーリンクがクリップボードにコピーされました!
Clair では、次のノーティファイアー設定フィールドを使用できます。
| フィールド | タイプ | 説明 |
|---|---|---|
| notifier | Object | Clair ノーティファイアーノード設定を提供します。 |
| .connstring | String | Postgres 接続文字列。形式を URL または libpq 接続文字列として受け入れます。 |
| .migrations | Boolean | ノーティファイアーノードがデータベースへの移行を処理するかどうか。 |
| .indexer_addr | String | ノーティファイアーはインデクサーに連絡して、脆弱性の影響を受けるマニフェストを作成または取得します。このインデクサーの場所は必須です。 |
| .matcher_addr | String | ノーティファイアーはマッチャーに連絡して、更新操作をリストし、差分を取得します。このマッチャーの場所は必須です。 |
| .poll_interval | String | ノーティファイアーがマッチャーに更新操作をクエリーする頻度。 |
| .delivery_interval | String | ノーティファイアーが、作成された通知または以前に失敗した通知の配信を試行する頻度。 |
| .disable_summary | Boolean | 通知をマニフェストごとに 1 つに要約するかどうかを制御します。 |
| .webhook | Object | Webhook 配信のノーティファイアーを設定します。 |
| .webhook.target | String | Webhook が配信される URL。 |
| .webhook.callback | String | 通知を取得できるコールバック URL。この URL に通知 ID が追加されます。 これは通常、Clair ノーティファイアーがホスティングされている場所です。 |
| .webhook.headers | String | ヘッダー名を値のリストに関連付けるマップ。 |
| .amqp | Object | AMQP 配信のノーティファイアーを設定します。 注記 Clair は、独自に AMQP コンポーネントを宣言しません。交換またはキューを使用しようとする試みはすべて受動的であり、失敗します。ブローカー管理者は、事前に交換とキューをセットアップする必要があります。 |
| .amqp.direct | Boolean |
|
| .amqp.rollup | Integer |
|
| .amqp.exchange | Object | 接続先の AMQP 交換。 |
| .amqp.exchange.name | String | 接続先の交換の名前。 |
| .amqp.exchange.type | String | 交換のタイプ。通常は、direct、fanout、topic、headers のいずれかです。 |
| .amqp.exchange.durability | Boolean | 設定されたキューが永続的かどうか。 |
| .amqp.exchange.auto_delete | Boolean |
設定されたキューが |
| .amqp.routing_key | String | 各通知が送信されるルーティングキーの名前。 |
| .amqp.callback | String |
|
| .amqp.uris | String | 接続先の 1 つ以上の AMQP ブローカーのリスト (優先順位順)。 |
| .amqp.tls | Object | AMQP ブローカーへの TLS/SSL 接続を設定します。 |
| .amqp.tls.root_ca | String | ルート CA を読み取ることができるファイルシステムパス。 |
| .amqp.tls.cert | String | TLS/SSL 証明書を読み取ることができるファイルシステムパス。 注記
Go |
| .amqp.tls.key | String | TLS/SSL 秘密鍵を読み取ることができるファイルシステムパス。 |
| .stomp | Object | STOMP 配信のノーティファイアーを設定します。 |
| .stomp.direct | Boolean |
|
| .stomp.rollup | Integer |
|
| .stomp.callback | String |
|
| .stomp.destination | String | 通知を配信する STOMP の宛先。 |
| .stomp.uris | String | 接続先の 1 つ以上の STOMP ブローカーのリスト (優先順位順)。 |
| .stomp.tls | Object | STOMP ブローカーへの TLS/SSL 接続を設定しました。 |
| .stomp.tls.root_ca | String | ルート CA を読み取ることができるファイルシステムパス。 注記
Go |
| .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 パスコード。 |
6.1.8. Clair 承認設定フィールド リンクのコピーリンクがクリップボードにコピーされました!
Clair では、次の承認設定フィールドを使用できます。
| フィールド | タイプ | 説明 |
|---|---|---|
| auth | Object |
Clair の外部およびサービス内 JWT ベースの認証を定義します。複数の |
| .psk | String | 事前共有キー認証を定義します。 |
| .psk.key | String | JWT の署名と検証を行うすべての当事者間で配布される、base64 でエンコードされた共有キー。 |
| .psk.iss | String | 確認する JWT 発行者のリスト。空のリストは、JWT クレームで任意の発行者を受け入れます。 |
6.1.9. Clair トレース設定フィールド リンクのコピーリンクがクリップボードにコピーされました!
Clair では、次のトレース設定フィールドを使用できます。
| フィールド | タイプ | 説明 |
|---|---|---|
| trace | Object | OpenTelemetry に基づいて分散トレース設定を定義します。 |
| .name | String | トレースが属するアプリケーションの名前。 |
| .probability | Integer | トレースが発生する確率。 |
| .jaeger | Object | Jaeger トレースの値を定義します。 |
| .jaeger.agent | Object | Jaeger エージェントへの配信を設定するための値を定義します。 |
| .jaeger.agent.endpoint | String |
トレースを送信できる |
| .jaeger.collector | Object | Jaeger コレクターへの配信を設定するための値を定義します。 |
| .jaeger.collector.endpoint | String |
トレースを送信できる |
| .jaeger.collector.username | String | Jaeger ユーザー名。 |
| .jaeger.collector.password | String | Jaeger パスワード。 |
| .jaeger.service_name | String | Jaeger に登録されているサービス名。 |
| .jaeger.tags | String | 追加のメタデータを提供するキーと値のペア。 |
| .jaeger.buffer_max | Integer | 保管および分析のために Jaeger バックエンドに送信される前にメモリーにバッファーできるスパンの最大数。 |
6.1.10. Clair メトリック設定フィールド リンクのコピーリンクがクリップボードにコピーされました!
Clair では、次のメトリック設定フィールドを使用できます。
| フィールド | タイプ | 説明 |
|---|---|---|
| metrics | Object | OpenTelemetry に基づいて分散トレース設定を定義します。 |
| .name | String | 使用中のメトリックの名前。 |
| .prometheus | String | Prometheus メトリックエクスポーターの設定。 |
| .prometheus.endpoint | String | メトリックが提供されるパスを定義します。 |