3.4. 高度な Clair 設定
次のセクションの手順を使用して、Clair の詳細設定を行います。
3.4.1. アンマネージド Clair 設定
Red Hat Quay ユーザーは、Red Hat Quay OpenShift Container Platform Operator を使用してアンマネージド Clair 設定を実行できます。この機能により、ユーザーはアンマネージド Clair データベースを作成したり、アンマネージドデータベースなしでカスタム Clair 設定を実行したりできます。
アンマネージド Clair データベースにより、Red Hat Quay オペレーターは、Operator の複数のインスタンスが同じデータベースと通信する必要がある地理的に複製された環境で作業できます。アンマネージド Clair データベースは、ユーザーがクラスターの外部に存在する高可用性 (HA) Clair データベースを必要とする場合にも使用できます。
3.4.1.1. アンマネージド Clair データベースを使用したカスタム Clair 設定の実行
次の手順を使用して、Clair データベースをアンマネージドに設定します。
手順
Quay Operator で、
QuayRegistry
カスタムリソースのclairpostgres
コンポーネントをmanaged: false
に設定します。apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: quay370 spec: configBundleSecret: config-bundle-secret components: - kind: objectstorage managed: false - kind: route managed: true - kind: tls managed: false - kind: clairpostgres managed: false
3.4.1.2. アンマネージド Clair データベースを使用したカスタム Clair データベースの設定
OpenShift Container Platform 上の Red Hat Quay では、ユーザーが独自の Clair データベースを指定できます。
次の手順を使用して、カスタム Clair データベースを作成します。
次の手順では、SSL/TLS 証明書を使用して Clair をセットアップします。SSL/TSL 証明書を使用して Clair をセットアップしない同様の手順を表示するには、マネージド Clair 設定を使用したカスタム Clair データベースの設定を参照してください。
手順
次のコマンドを入力して、
clair-config.yaml
を含む Quay 設定バンドルシークレットを作成します。$ oc create secret generic --from-file config.yaml=./config.yaml --from-file extra_ca_cert_rds-ca-2019-root.pem=./rds-ca-2019-root.pem --from-file clair-config.yaml=./clair-config.yaml --from-file ssl.cert=./ssl.cert --from-file ssl.key=./ssl.key config-bundle-secret
Clair
config.yaml
ファイルの例indexer: connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslrootcert=/run/certs/rds-ca-2019-root.pem sslmode=verify-ca layer_scan_concurrency: 6 migrations: true scanlock_retry: 11 log_level: debug matcher: connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslrootcert=/run/certs/rds-ca-2019-root.pem sslmode=verify-ca migrations: true metrics: name: prometheus notifier: connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslrootcert=/run/certs/rds-ca-2019-root.pem sslmode=verify-ca migrations: true
注記-
データベース証明書は、
clair-config.yaml
の Clair アプリケーション Pod の/run/certs/rds-ca-2019-root.pem
の下にマウントされます。clair-config.yaml
を設定するときに指定する必要があります。 -
clair-config.yaml
の例は、OpenShift 設定の Clair にあります。
-
データベース証明書は、
clair-config.yaml
ファイルをバンドルシークレットに追加します。次に例を示します。apiVersion: v1 kind: Secret metadata: name: config-bundle-secret namespace: quay-enterprise data: config.yaml: <base64 encoded Quay config> clair-config.yaml: <base64 encoded Clair config> extra_ca_cert_<name>: <base64 encoded ca cert> ssl.crt: <base64 encoded SSL certificate> ssl.key: <base64 encoded SSL private key>
注記更新すると、提供された
clair-config.yaml
ファイルが Clair Pod にマウントされます。提供されていないフィールドには、Clair 設定モジュールを使用してデフォルトが自動的に入力されます。Build History ページでコミットをクリックするか、
oc get pods -n <namespace>
を実行して、Clair Pod のステータスを確認できます。以下に例を示します。$ oc get pods -n <namespace>
出力例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7s
3.4.2. マネージド Clair データベースを使用したカスタム Clair 設定の実行
場合によっては、マネージド Clair データベースを使用してカスタム Clair 設定を実行します。これは、以下のシナリオで役に立ちます。
- ユーザーが特定のアップデーターリソースを無効にする場合。
ユーザーが非接続環境で Red Hat Quay を実行している場合。非接続環境での Clair の実行の詳細は、非接続環境での Clair を参照してください。
注記-
非接続環境で Red Hat Quay を実行している場合は、
clair-config.yaml
のairgap
パラメーターをtrue
に設定する必要があります。 - 非接続環境で Red Hat Quay を実行している場合は、すべてのアップデーターコンポーネントを無効にする必要があります。
-
非接続環境で Red Hat Quay を実行している場合は、
3.4.2.1. Clair データベースをマネージドに設定する
次の手順を使用して、Clair データベースをマネージドに設定します。
手順
Quay Operator で、
QuayRegistry
カスタムリソースのclairpostgres
コンポーネントをmanaged: true
に設定します。apiVersion: quay.redhat.com/v1 kind: QuayRegistry metadata: name: quay370 spec: configBundleSecret: config-bundle-secret components: - kind: objectstorage managed: false - kind: route managed: true - kind: tls managed: false - kind: clairpostgres managed: true
3.4.2.2. マネージド Clair 設定を使用したカスタム Clair データベースの設定
OpenShift Container Platform 上の Red Hat Quay では、ユーザーが独自の Clair データベースを指定できます。
次の手順を使用して、カスタム Clair データベースを作成します。
手順
次のコマンドを入力して、
clair-config.yaml
を含む Quay 設定バンドルシークレットを作成します。$ oc create secret generic --from-file config.yaml=./config.yaml --from-file extra_ca_cert_rds-ca-2019-root.pem=./rds-ca-2019-root.pem --from-file clair-config.yaml=./clair-config.yaml config-bundle-secret
Clair
config.yaml
ファイルの例indexer: connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslmode=disable layer_scan_concurrency: 6 migrations: true scanlock_retry: 11 log_level: debug matcher: connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslmode=disable migrations: true metrics: name: prometheus notifier: connstring: host=quay-server.example.com port=5432 dbname=quay user=quayrdsdb password=quayrdsdb sslmode=disable migrations: true
注記-
データベース証明書は、
clair-config.yaml
の Clair アプリケーション Pod の/run/certs/rds-ca-2019-root.pem
の下にマウントされます。clair-config.yaml
を設定するときに指定する必要があります。 -
clair-config.yaml
の例は、OpenShift 設定の Clair にあります。
-
データベース証明書は、
clair-config.yaml
ファイルをバンドルシークレットに追加します。次に例を示します。apiVersion: v1 kind: Secret metadata: name: config-bundle-secret namespace: quay-enterprise data: config.yaml: <base64 encoded Quay config> clair-config.yaml: <base64 encoded Clair config>
注記-
更新すると、提供された
clair-config.yaml
ファイルが Clair Pod にマウントされます。提供されていないフィールドには、Clair 設定モジュールを使用してデフォルトが自動的に入力されます。
-
更新すると、提供された
Build History ページでコミットをクリックするか、
oc get pods -n <namespace>
を実行して、Clair Pod のステータスを確認できます。以下に例を示します。$ oc get pods -n <namespace>
出力例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7s
3.4.3. 非接続環境での Clair
現在、非接続環境での Clair のデプロイは、IBM Power および IBM Z ではサポートされていません。
Clair は、updater と呼ばれる一連のコンポーネントを使用して、さまざまな脆弱性データベースからのデータのフェッチと解析を処理します。updater はデフォルトで、脆弱性データをインターネットから直接プルし、すぐに使用できるように設定されています。ただし、ユーザーによっては、Red Hat Quay を非接続環境、またはインターネットに直接アクセスできない環境で実行する必要がある場合があります。Clair は、ネットワーク分離を考慮したさまざまな種類の更新ワークフローを使用することで、非接続環境をサポートします。これは clairctl
コマンドラインインターフェイスツールを使用して機能します。このツールは、オープンホストを使用してインターネットから updater データを取得し、そのデータを隔離されたホストにセキュアに転送してから、隔離されたホスト上の updater データを Clair にインポートします。
非接続環境で Clair をデプロイするには、このガイドを使用してください。
既知の問題 PROJQUAY-6577 により、Red Hat Quay Operator はカスタマイズされた Clair config.yaml
ファイルを適切に処理しません。そのため、現在、次の手順は機能しません。
Operator を利用してフィールドに入力するのではなく、ユーザー自身が Clair の設定全体を最初から作成する必要があります。これを行うには、Procedure to enable Clair scanning of images in disconnected environments の手順に従ってください。
現在、Clair エンリッチメントデータは CVSS データです。エンリッチメントデータは現在、オフライン環境ではサポートされていません。
Clair アップデーターの詳細は、Clair アップデーターを参照してください。
3.4.3.1. 非接続の OpenShift Container Platform クラスターで Clair をセットアップする
以下の手順を使用して、非接続の OpenShift Container Platform クラスターに OpenShift Container Platform でプロビジョニングされた Clair Pod をセットアップします。
既知の問題 PROJQUAY-6577 により、Red Hat Quay Operator はカスタマイズされた Clair config.yaml
ファイルを適切に処理しません。そのため、現在、次の手順は機能しません。
Operator を利用してフィールドに入力するのではなく、ユーザー自身が Clair の設定全体を最初から作成する必要があります。これを行うには、Procedure to enable Clair scanning of images in disconnected environments の手順に従ってください。
3.4.3.1.1. OpenShift Container Platform デプロイメント用の clairctl コマンドラインユーティリティーツールのインストール
以下の手順を使用して、OpenShift Container Platform デプロイメント用の clairctl
CLI ツールをインストールします。
手順
以下のコマンドを入力して、Clair デプロイメント用の
clairctl
プログラムを OpenShift Container Platform クラスターにインストールします。$ oc -n quay-enterprise exec example-registry-clair-app-64dd48f866-6ptgw -- cat /usr/bin/clairctl > clairctl
注記非公式ですが、
clairctl
ツールをダウンロードできます。clairctl
ファイルの権限を設定して、ユーザーが実行できるようにします。次に例を示します。$ chmod u+x ./clairctl
3.4.3.1.2. OpenShift Container Platform での Clair デプロイメントの Clair 設定シークレットの取得とデコード
以下の手順を使用して、OpenShift Container Platform 上の OpenShift Container Platform でプロビジョニングされた Clair インスタンスの設定シークレットを取得してデコードします。
前提条件
-
clairctl
コマンドラインユーティリティーツールをインストールしている。
手順
次のコマンドを入力して、設定シークレットを取得してデコードし、それを Clair 設定 YAML に保存します。
$ oc get secret -n quay-enterprise example-registry-clair-config-secret -o "jsonpath={$.data['config\.yaml']}" | base64 -d > clair-config.yaml
disable_updaters
およびairgap
パラメーターがtrue
に設定されるように、clair-config.yaml
ファイルを更新します。次に例を示します。--- indexer: airgap: true --- matcher: disable_updaters: true ---
3.4.3.1.3. 接続された Clair インスタンスからアップデータバンドルをエクスポートする
次の手順を使用して、インターネットにアクセスできる Clair インスタンスから更新プログラムバンドルをエクスポートします。
前提条件
-
clairctl
コマンドラインユーティリティーツールをインストールしている。 -
Clair 設定シークレットを取得してデコードし、Clair の
config.yaml
ファイルに保存している。 -
Clair の
config.yaml
ファイルで、disable_updaters
およびairgap
パラメーターがtrue
に設定されている。
手順
インターネットにアクセスできる Clair インスタンスから、設定ファイルで
clairctl
CLI ツールを使用して、アップデーターバンドルをエクスポートします。以下に例を示します。$ ./clairctl --config ./config.yaml export-updaters updates.gz
3.4.3.1.4. 非接続の OpenShift Container Platform クラスター内の Clair データベースへのアクセスの設定
以下の手順を使用して、非接続の OpenShift Container Platform クラスター内の Clair データベースへのアクセスを設定します。
前提条件
-
clairctl
コマンドラインユーティリティーツールをインストールしている。 -
Clair 設定シークレットを取得してデコードし、Clair の
config.yaml
ファイルに保存している。 -
Clair の
config.yaml
ファイルで、disable_updaters
およびairgap
パラメーターがtrue
に設定されている。 - インターネットにアクセスできる Clair インスタンスからアップデーターバンドルをエクスポートしている。
手順
CLI ツール
oc
を使用して、Clair データベースサービスを特定します。次に例を示します。$ oc get svc -n quay-enterprise
出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-registry-clair-app ClusterIP 172.30.224.93 <none> 80/TCP,8089/TCP 4d21h example-registry-clair-postgres ClusterIP 172.30.246.88 <none> 5432/TCP 4d21h ...
Clair データベースポートを転送して、ローカルマシンからアクセスできるようにします。以下に例を示します。
$ oc port-forward -n quay-enterprise service/example-registry-clair-postgres 5432:5432
Clair の
config.yaml
ファイルを更新します。次に例を示します。indexer: connstring: host=localhost port=5432 dbname=postgres user=postgres password=postgres sslmode=disable 1 scanlock_retry: 10 layer_scan_concurrency: 5 migrations: true scanner: repo: rhel-repository-scanner: 2 repo2cpe_mapping_file: /data/cpe-map.json package: rhel_containerscanner: 3 name2repos_mapping_file: /data/repo-map.json
3.4.3.1.5. 非接続の OpenShift Container Platform クラスターへのアップデーターバンドルのインポート
以下の手順を使用して、アップデーターバンドルを非接続の OpenShift Container Platform クラスターにインポートします。
前提条件
-
clairctl
コマンドラインユーティリティーツールをインストールしている。 -
Clair 設定シークレットを取得してデコードし、Clair の
config.yaml
ファイルに保存している。 -
Clair の
config.yaml
ファイルで、disable_updaters
およびairgap
パラメーターがtrue
に設定されている。 - インターネットにアクセスできる Clair インスタンスからアップデーターバンドルをエクスポートしている。
- アップデーターバンドルを非接続環境に転送している。
手順
CLI ツール
clairctl
を使用して、アップデーターバンドルを OpenShift Container Platform によってデプロイされた Clair データベースにインポートします。以下に例を示します。$ ./clairctl --config ./clair-config.yaml import-updaters updates.gz
3.4.3.2. 非接続の OpenShift Container Platform クラスター用の Clair の自己管理デプロイメントをセットアップする
以下の手順を使用して、非接続の OpenShift Container Platform クラスター用の Clair の自己管理デプロイメントをセットアップします。
既知の問題 PROJQUAY-6577 により、Red Hat Quay Operator はカスタマイズされた Clair config.yaml
ファイルを適切に処理しません。そのため、現在、次の手順は機能しません。
Operator を利用してフィールドに入力するのではなく、ユーザー自身が Clair の設定全体を最初から作成する必要があります。これを行うには、Procedure to enable Clair scanning of images in disconnected environments の手順に従ってください。
3.4.3.2.1. OpenShift Container Platform で自己管理 Clair デプロイメント用の clairctl コマンドラインユーティリティーツールをインストールする
以下の手順を使用して、OpenShift Container Platform に自己管理 Clair デプロイメント用の clairctl
CLI ツールをインストールします。
手順
podman cp
コマンドを使用して、自己管理の Clair デプロイメント用のclairctl
プログラムをインストールします。以下に例を示します。$ sudo podman cp clairv4:/usr/bin/clairctl ./clairctl
clairctl
ファイルの権限を設定して、ユーザーが実行できるようにします。次に例を示します。$ chmod u+x ./clairctl
3.4.3.2.2. 非接続の OpenShift Container Platform クラスター用の自己管理 Clair コンテナーをデプロイする
以下の手順を使用して、非接続の OpenShift Container Platform クラスター用の自己管理 Clair コンテナーをデプロイします。
前提条件
-
clairctl
コマンドラインユーティリティーツールをインストールしている。
手順
Clair 設定ファイル用のフォルダーを作成します。次に例を示します。
$ mkdir /etc/clairv4/config/
disable_updaters
パラメーターをtrue
に設定して Clair 設定ファイルを作成します。次に例を示します。--- indexer: airgap: true --- matcher: disable_updaters: true ---
コンテナーイメージを使用して Clair を起動し、作成したファイルから設定にマウントします。
$ sudo podman run -it --rm --name clairv4 \ -p 8081:8081 -p 8088:8088 \ -e CLAIR_CONF=/clair/config.yaml \ -e CLAIR_MODE=combo \ -v /etc/clairv4/config:/clair:Z \ registry.redhat.io/quay/clair-rhel8:v3.11.1
3.4.3.2.3. 接続された Clair インスタンスからアップデータバンドルをエクスポートする
次の手順を使用して、インターネットにアクセスできる Clair インスタンスから更新プログラムバンドルをエクスポートします。
前提条件
-
clairctl
コマンドラインユーティリティーツールをインストールしている。 - Clair をデプロイしている。
-
Clair の
config.yaml
ファイルで、disable_updaters
およびairgap
パラメーターがtrue
に設定されている。
手順
インターネットにアクセスできる Clair インスタンスから、設定ファイルで
clairctl
CLI ツールを使用して、アップデーターバンドルをエクスポートします。以下に例を示します。$ ./clairctl --config ./config.yaml export-updaters updates.gz
3.4.3.2.4. 非接続の OpenShift Container Platform クラスター内の Clair データベースへのアクセスの設定
以下の手順を使用して、非接続の OpenShift Container Platform クラスター内の Clair データベースへのアクセスを設定します。
前提条件
-
clairctl
コマンドラインユーティリティーツールをインストールしている。 - Clair をデプロイしている。
-
Clair の
config.yaml
ファイルで、disable_updaters
およびairgap
パラメーターがtrue
に設定されている。 - インターネットにアクセスできる Clair インスタンスからアップデーターバンドルをエクスポートしている。
手順
CLI ツール
oc
を使用して、Clair データベースサービスを特定します。次に例を示します。$ oc get svc -n quay-enterprise
出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE example-registry-clair-app ClusterIP 172.30.224.93 <none> 80/TCP,8089/TCP 4d21h example-registry-clair-postgres ClusterIP 172.30.246.88 <none> 5432/TCP 4d21h ...
Clair データベースポートを転送して、ローカルマシンからアクセスできるようにします。以下に例を示します。
$ oc port-forward -n quay-enterprise service/example-registry-clair-postgres 5432:5432
Clair の
config.yaml
ファイルを更新します。次に例を示します。indexer: connstring: host=localhost port=5432 dbname=postgres user=postgres password=postgres sslmode=disable 1 scanlock_retry: 10 layer_scan_concurrency: 5 migrations: true scanner: repo: rhel-repository-scanner: 2 repo2cpe_mapping_file: /data/cpe-map.json package: rhel_containerscanner: 3 name2repos_mapping_file: /data/repo-map.json
3.4.3.2.5. 非接続の OpenShift Container Platform クラスターへのアップデーターバンドルのインポート
以下の手順を使用して、アップデーターバンドルを非接続の OpenShift Container Platform クラスターにインポートします。
前提条件
-
clairctl
コマンドラインユーティリティーツールをインストールしている。 - Clair をデプロイしている。
-
Clair の
config.yaml
ファイルで、disable_updaters
およびairgap
パラメーターがtrue
に設定されている。 - インターネットにアクセスできる Clair インスタンスからアップデーターバンドルをエクスポートしている。
- アップデーターバンドルを非接続環境に転送している。
手順
CLI ツール
clairctl
を使用して、アップデーターバンドルを OpenShift Container Platform によってデプロイされた Clair データベースにインポートします。$ ./clairctl --config ./clair-config.yaml import-updaters updates.gz
3.4.4. Common Product Enumeration へのリポジトリーのマッピング
現在、Common Product Enumeration へのリポジトリーのマッピングは、IBM Power および IBM Z ではサポートされていません。
Clair の Red Hat Enterprise Linux (RHEL) スキャナーは、Common Product Enumeration (CPE) ファイルに依存して、RPM パッケージを対応するセキュリティーデータにマッピングし、マッチングする結果を生成します。これらのファイルは製品セキュリティーによって所有され、毎日更新されます。
スキャナーが RPM を適切に処理するには、CPE ファイルが存在するか、ファイルへのアクセスが許可されている必要があります。ファイルが存在しないと、コンテナーイメージにインストールされている RPM パッケージはスキャンされません。
CPE | JSON マッピングファイルへのリンク |
---|---|
| |
|
非接続の Clair インストール用のデータベースに CVE 情報をアップロードするだけでなく、マッピングファイルをローカルで使用できるようにする必要もあります。
- スタンドアロン Red Hat Quay および Clair デプロイメントの場合は、マッピングファイルを Clair Pod に読み込む必要があります。
-
OpenShift Container Platform デプロイメント上の Red Hat Quay の場合、Clair コンポーネントを
unmanaged
に設定する必要があります。次に、Clair を手動でデプロイメントし、マッピングファイルのローカルコピーを読み込むように設定する必要があります。
3.4.4.1. Common Product Enumeration サンプル設定へのリポジトリーのマッピング
Clair 設定の repo2cpe_mapping_file
フィールドと name2repos_mapping_file
フィールドを使用して、CPE JSON マッピングファイルを含めます。以下に例を示します。
indexer: scanner: repo: rhel-repository-scanner: repo2cpe_mapping_file: /data/cpe-map.json package: rhel_containerscanner: name2repos_mapping_file: /data/repo-map.json
詳細は、OVAL セキュリティーデータをインストール済みの RPM と正確にマッチングする方法 を参照してください。