第3章 スタンドアロンの Red Hat Quay デプロイメントでの Clair のセットアップ
スタンドアロンの Red Hat Quay デプロイメントの場合、Clair を手動でセットアップできます。
手順
Red Hat Quay インストールディレクトリーに、Clair データベースデータ用の新しいディレクトリーを作成します。
$ mkdir /home/<user-name>/quay-poc/postgres-clairv4
次のコマンドを入力して、
postgres-clairv4
ファイルに適切な権限を設定します。$ setfacl -m u:26:-wx /home/<user-name>/quay-poc/postgres-clairv4
次のコマンドを入力して、Clair PostgreSQL データベースをデプロイします。
$ sudo podman run -d --name postgresql-clairv4 \ -e POSTGRESQL_USER=clairuser \ -e POSTGRESQL_PASSWORD=clairpass \ -e POSTGRESQL_DATABASE=clair \ -e POSTGRESQL_ADMIN_PASSWORD=adminpass \ -p 5433:5432 \ -v /home/<user-name>/quay-poc/postgres-clairv4:/var/lib/pgsql/data:Z \ registry.redhat.io/rhel8/postgresql-15
Clair デプロイメント用に PostgreSQL
uuid-ossp
モジュールをインストールします。$ sudo podman exec -it postgresql-clairv4 /bin/bash -c 'echo "CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\"" | psql -d clair -U postgres'
出力例
CREATE EXTENSION
注記Clair では、
uuid-ossp
拡張機能を PostgreSQL データベースに追加する必要があります。適切な権限を持つユーザーの場合は、拡張機能を作成すると、Clair によって自動的に追加されます。ユーザーが適切な権限を持っていない場合は、Clair を開始する前に拡張機能を追加する必要があります。拡張機能が存在しない場合は、Clair が起動しようとすると、
ERROR: Please load the "uuid-ossp" extension.(SQLSTATE 42501)
エラーが発生します。実行中の場合は、
Quay
コンテナーを停止し、設定モードで再始動して、既存の設定をボリュームとしてロードします。$ sudo podman run --rm -it --name quay_config \ -p 80:8080 -p 443:8443 \ -v $QUAY/config:/conf/stack:Z \ registry.redhat.io/quay/quay-rhel8:v3.13.3 config secret
- 設定ツールにログインし、UI の Security Scanner セクションで Enable Security Scanning をクリックします。
-
quay-server
システムでまだ使用されていないポート (8081
など) を使用して、Clair の HTTP エンドポイントを設定します。 Generate PSK ボタンを使用して、事前共有キー (PSK) を作成します。
セキュリティースキャナー UI
-
Red Hat Quay の
config.yaml
ファイルを検証してダウンロードし、設定エディターを実行しているQuay
コンテナーを停止します。 新しい設定バンドルを Red Hat Quay インストールディレクトリーに展開します。次に例を示します。
$ tar xvf quay-config.tar.gz -d /home/<user-name>/quay-poc/
Clair 設定ファイル用のフォルダーを作成します。次に例を示します。
$ mkdir /etc/opt/clairv4/config/
Clair 設定フォルダーに移動します。
$ cd /etc/opt/clairv4/config/
以下のように、Clair 設定ファイルを作成します。
http_listen_addr: :8081 introspection_addr: :8088 log_level: debug 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 matcher: connstring: host=quay-server.example.com port=5433 dbname=clair user=clairuser password=clairpass sslmode=disable max_conn_pool: 100 migrations: true indexer_addr: clair-indexer notifier: connstring: host=quay-server.example.com port=5433 dbname=clair user=clairuser password=clairpass sslmode=disable delivery_interval: 1m poll_interval: 5m migrations: true auth: psk: key: "MTU5YzA4Y2ZkNzJoMQ==" iss: ["quay"] # tracing and metrics trace: name: "jaeger" probability: 1 jaeger: agent: endpoint: "localhost:6831" service_name: "clair" metrics: name: "prometheus"
Clair の設定形式の詳細は、Clair 設定リファレンス を参照してください。
コンテナーイメージを使用して Clair を起動し、作成したファイルから設定にマウントします。
$ sudo podman run -d --name clairv4 \ -p 8081:8081 -p 8088:8088 \ -e CLAIR_CONF=/clair/config.yaml \ -e CLAIR_MODE=combo \ -v /etc/opt/clairv4/config:/clair:Z \ registry.redhat.io/quay/clair-rhel8:v3.13.3
注記複数の Clair コンテナーを実行することもできますが、単一のコンテナーを超えるデプロイシナリオでは、Kubernetes や OpenShift Container Platform などのコンテナーオーケストレーターを使用することが強く推奨されます。
3.1. Clair PostgreSQL データベースのアップグレード
Red Hat Quay をバージョン 13 にアップグレードする場合は、Clair PostgreSQL データベースのバージョンを PostgreSQL バージョン 13
Clair PostgreSQL データベースをバージョン 13 からバージョン 15 にアップグレードするには、次の手順に従います。
移行手順が成功した後、Clair セキュリティースキャンが一時的に中断される可能性があります。
手順
次のコマンドを実行して、Red Hat Quay コンテナーを停止します。
$ sudo podman stop <quay_container_name>
次のコマンドを実行して、Clair コンテナーを停止します。
$ sudo podman stop <clair_container_id>
SCLOrg の データ移行 手順から次の Podman プロセスを実行します。これにより、リモート PostgreSQL サーバーからのデータ移行が可能になります。
$ sudo podman run -d --name <clair_migration_postgresql_database> 1 -e POSTGRESQL_MIGRATION_REMOTE_HOST=<container_ip_address> \ 2 -e POSTGRESQL_MIGRATION_ADMIN_PASSWORD=remoteAdminP@ssword \ -v </host/data/directory:/var/lib/pgsql/data:Z> \ 3 [ OPTIONAL_CONFIGURATION_VARIABLES ] registry.redhat.io/rhel8/postgresql-15
$ mkdir -p /host/data/clair-postgresql15-directory
$ setfacl -m u:26:-wx /host/data/clair-postgresql15-directory
これにより、新しいコンテナーによってデータが上書きされるのを防ぎます。
Clair PostgreSQL 13 コンテナーを停止します。
$ sudo podman stop <clair_postgresql13_container_name>
PostgreSQL の移行が完了したら、手順 3 の新しいデータボリュームマウントを使用して、Clair PostgreSQL 15 コンテナーを実行します (例:
</host/data/clair-postgresql15-directory:/var/lib/postgresql/data>
)。$ sudo podman run -d --rm --name <postgresql15-clairv4> \ -e POSTGRESQL_USER=<clair_username> \ -e POSTGRESQL_PASSWORD=<clair_password> \ -e POSTGRESQL_DATABASE=<clair_database_name> \ -e POSTGRESQL_ADMIN_PASSWORD=<admin_password> \ -p 5433:5432 \ -v </host/data/clair-postgresql15-directory:/var/lib/postgresql/data:Z> \ registry.redhat.io/rhel8/postgresql-15
次のコマンドを実行して、Red Hat Quay コンテナーを起動します。
$ sudo podman run -d --rm -p 80:8080 -p 443:8443 --name=quay \ -v /home/<quay_user>/quay-poc/config:/conf/stack:Z \ -v /home/<quay_user>/quay-poc/storage:/datastorage:Z \ {productrepo}/{quayimage}:{productminv}
次のコマンドを実行して Clair コンテナーを起動します。
$ sudo podman run -d --name clairv4 \ -p 8081:8081 -p 8088:8088 \ -e CLAIR_CONF=/clair/config.yaml \ -e CLAIR_MODE=combo \ registry.redhat.io/quay/clair-rhel8:{productminv}
詳細は、Data Migration を参照してください。