14.5. RHCOS ノードホストのスキャン
OpenShift Container Platform の場合、コントロールプレーンとしてサポートされるオペレーティングシステムは、Red Hat Enterprise Linux CoreOS (RHCOS) のみです。ノードホストの場合、OpenShift Container Platform は RHCOS と Red Hat Enterprise Linux (RHEL) の両方をサポートします。Red Hat Advanced Cluster Security for Kubernetes (RHACS) を使用すると、RHCOS ノードの脆弱性をスキャンし、潜在的なセキュリティー脅威を検出できます。
RHACS は、RHCOS インストールの一部としてノードホストにインストールされた RHCOS RPM をスキャンして、既知の脆弱性がないか調べます。
まず、RHACS は RHCOS コンポーネントを分析して検出します。次に、RHEL と次のデータストリームを使用して、特定されたコンポーネントの脆弱性を照合します。
- StackRox Scanner がノードスキャンに使用される場合は、OpenShift 4.X Open Vulnerability and Assessment Language (OVAL) v2 セキュリティーデータストリームが使用されます。
- ノードスキャンに Scanner V4 が使用される場合は、Red Hat Common Security Advisory Framework (CSAF) Vulnerability Exploitability eXchange (VEX) が使用されます。
-
roxctl
CLI を使用して RHACS をインストールした場合は、RHCOS ノードのスキャン機能を手動で有効にする必要があります。OpenShift Container Platform で Helm または Operator インストール方法を使用する場合、この機能はデフォルトで有効になります。
14.5.1. StackRox Scanner を使用した RHCOS ノードスキャンの有効化
OpenShift Container Platform を使用する場合は、Red Hat Advanced Cluster Security for Kubernetes (RHACS) を使用して、Red Hat Enterprise Linux CoreOS (RHCOS) ノードの脆弱性スキャンを有効にできます。
前提条件
- セキュアなクラスターの RHCOS ノードホストをスキャンするには、OpenShift Container Platform 4.12 以降にセキュアなクラスターをインストールしておく必要があります。サポートされるプラットフォームおよびアーキテクチャーの詳細は、Red Hat Advanced Cluster Security for Kubernetes Support Matrix を参照してください。RHACS のライフサイクルのサポート情報は、Red Hat Advanced Cluster Security for Kubernetes サポートポリシー を参照してください。
手順
次のコマンドのいずれかを実行して、コンプライアンスコンテナーを更新します。
メトリクスが無効になっているデフォルトのコンプライアンスコンテナーの場合は、次のコマンドを実行します。
$ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"containers":[{"name":"compliance","env":[{"name":"ROX_METRICS_PORT","value":"disabled"},{"name":"ROX_NODE_SCANNING_ENDPOINT","value":"127.0.0.1:8444"},{"name":"ROX_NODE_SCANNING_INTERVAL","value":"4h"},{"name":"ROX_NODE_SCANNING_INTERVAL_DEVIATION","value":"24m"},{"name":"ROX_NODE_SCANNING_MAX_INITIAL_WAIT","value":"5m"},{"name":"ROX_RHCOS_NODE_SCANNING","value":"true"},{"name":"ROX_CALL_NODE_INVENTORY_ENABLED","value":"true"}]}]}}}}'
Prometheus メトリクスが有効になっているコンプライアンスコンテナーの場合は、次のコマンドを実行します。
$ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"containers":[{"name":"compliance","env":[{"name":"ROX_METRICS_PORT","value":":9091"},{"name":"ROX_NODE_SCANNING_ENDPOINT","value":"127.0.0.1:8444"},{"name":"ROX_NODE_SCANNING_INTERVAL","value":"4h"},{"name":"ROX_NODE_SCANNING_INTERVAL_DEVIATION","value":"24m"},{"name":"ROX_NODE_SCANNING_MAX_INITIAL_WAIT","value":"5m"},{"name":"ROX_RHCOS_NODE_SCANNING","value":"true"},{"name":"ROX_CALL_NODE_INVENTORY_ENABLED","value":"true"}]}]}}}}'
次の手順を実行して、Collector DaemonSet (DS) を更新します。
次のコマンドを実行して、新しいボリュームマウントを Collector DS に追加します。
$ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"volumes":[{"name":"tmp-volume","emptyDir":{}},{"name":"cache-volume","emptyDir":{"sizeLimit":"200Mi"}}]}}}}'
次のコマンドを実行して、新しい
NodeScanner
コンテナーを追加します。$ oc -n stackrox patch daemonset/collector -p '{"spec":{"template":{"spec":{"containers":[{"command":["/scanner","--nodeinventory","--config=",""],"env":[{"name":"ROX_NODE_NAME","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"spec.nodeName"}}},{"name":"ROX_CLAIR_V4_SCANNING","value":"true"},{"name":"ROX_COMPLIANCE_OPERATOR_INTEGRATION","value":"true"},{"name":"ROX_CSV_EXPORT","value":"false"},{"name":"ROX_DECLARATIVE_CONFIGURATION","value":"false"},{"name":"ROX_INTEGRATIONS_AS_CONFIG","value":"false"},{"name":"ROX_NETPOL_FIELDS","value":"true"},{"name":"ROX_NETWORK_DETECTION_BASELINE_SIMULATION","value":"true"},{"name":"ROX_NETWORK_GRAPH_PATTERNFLY","value":"true"},{"name":"ROX_NODE_SCANNING_CACHE_TIME","value":"3h36m"},{"name":"ROX_NODE_SCANNING_INITIAL_BACKOFF","value":"30s"},{"name":"ROX_NODE_SCANNING_MAX_BACKOFF","value":"5m"},{"name":"ROX_PROCESSES_LISTENING_ON_PORT","value":"false"},{"name":"ROX_QUAY_ROBOT_ACCOUNTS","value":"true"},{"name":"ROX_ROXCTL_NETPOL_GENERATE","value":"true"},{"name":"ROX_SOURCED_AUTOGENERATED_INTEGRATIONS","value":"false"},{"name":"ROX_SYSLOG_EXTRA_FIELDS","value":"true"},{"name":"ROX_SYSTEM_HEALTH_PF","value":"false"},{"name":"ROX_VULN_MGMT_WORKLOAD_CVES","value":"false"}],"image":"registry.redhat.io/advanced-cluster-security/rhacs-scanner-slim-rhel8:4.6.1","imagePullPolicy":"IfNotPresent","name":"node-inventory","ports":[{"containerPort":8444,"name":"grpc","protocol":"TCP"}],"volumeMounts":[{"mountPath":"/host","name":"host-root-ro","readOnly":true},{"mountPath":"/tmp/","name":"tmp-volume"},{"mountPath":"/cache","name":"cache-volume"}]}]}}}}'
14.5.2. Scanner V4 を使用した RHCOS ノードスキャンの有効化
OpenShift Container Platform を使用する場合は、Red Hat Advanced Cluster Security for Kubernetes (RHACS) を使用して、Red Hat Enterprise Linux CoreOS (RHCOS) ノードの脆弱性スキャンを有効にできます。
Scanner V4 を使用した RHCOS ノードのスキャンは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat では、実稼働環境での使用を推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
前提条件
セキュアクラスターの RHCOS ノードホストをスキャンするには、次のソフトウェアがインストールされている必要があります。
- OpenShift Container Platform 4.12 以降のセキュアクラスターサービス
RHACS バージョン 4.6 以降
サポートされるプラットフォームおよびアーキテクチャーの詳細は、Red Hat Advanced Cluster Security for Kubernetes Support Matrix を参照してください。RHACS のライフサイクルのサポート情報は、Red Hat Advanced Cluster Security for Kubernetes サポートポリシー を参照してください。
手順
Scanner V4 を使用してノードインデックス (ノードスキャンとも呼ばれます) を有効にするには、次の手順を実行します。
Central Pod の
Central
コンテナーで、Central クラスターで次のコマンドを実行して、ROX_NODE_INDEX_ENABLED
変数をtrue
に設定します。$ kubectl -n stackrox set env deployment/central ROX_NODE_INDEX_ENABLED=true 1
- 1
- OpenShift Container Platform の場合は、
kubectl
の代わりにoc
を使用します。
compliance
コンテナーの Collector Daemonset で、セキュアクラスターで次のコマンドを実行して、ROX_NODE_INDEX_ENABLED
変数をtrue
に設定します。$ kubectl -n stackrox set env daemonset/collector ROX_NODE_INDEX_ENABLED=true 1
- 1
- OpenShift Container Platform の場合は、
kubectl
の代わりにoc
を使用します。
ノードスキャンが機能していることを確認するには、Central ログで次のメッセージを調べます。
Scanned index report and found <number> components for node <node_name>.
ここでは、以下のようになります。
- <number>
- 検出されたコンポーネントの数を指定します。
- <node_name>
- ノードの名前を指定します。
14.5.3. 分析と検出
RHACS を OpenShift Container Platform とともに使用すると、RHACS は分析と検出用に 2 つの調整コンテナー (Compliance コンテナーと Node-inventory コンテナー) を作成します。Compliance コンテナーは、以前の RHACS バージョンの一部としてすでに組み込まれていました。ただし、Node-inventory コンテナーは RHACS 4.0 で新しく追加されたもので、OpenShift Container Platform クラスターノードでのみ機能します。
起動時に、Compliance コンテナーと Node-inventory コンテナーは、5 分以内に Red Hat Enterprise Linux CoreOS (RHCOS) ソフトウェアコンポーネントの最初のインベントリースキャンを開始します。次に、Node-inventory コンテナーはノードのファイルシステムをスキャンして、インストールされている RPM パッケージを特定し、RHCOS ソフトウェアコンポーネントをレポートします。その後、インベントリースキャンが定期的な間隔 (通常は 4 時間ごと) で行われます。Compliance コンテナーの ROX_NODE_SCANNING_INTERVAL 環境変数を設定することで、デフォルトの間隔をカスタマイズできます。
14.5.4. RHCOS ノードでの脆弱性照合
Central や Scanner などの Central サービスは、脆弱性の照合を実行します。ノードスキャンは、次のスキャナーを使用して実行されます。
- StackRox Scanner: これはデフォルトのスキャナーです。StackRox Scanner は、Red Hat の Open Vulnerability and Assessment Language (OVAL) v2 セキュリティーデータストリームを使用して、Red Hat Enterprise Linux CoreOS (RHCOS) ソフトウェアコンポーネントの脆弱性を照合します。
- Scanner V4: Scanner V4 は、ノードスキャンに使用できるテクノロジープレビュー機能です。Scanner V4 を明示的に有効にする必要があります。詳細は、「関連情報」のドキュメントを参照してください。
RHCOS ノードをスキャンする場合、RHACS リリース 4.0 以降では、カーネルとコンテナーのランタイムバージョンを見つけるために Kubernetes ノードのメタデータを使用しなくなりました。代わりに、RHACS は、インストールされている RHCOS RPM を使用してその情報を評価します。
14.5.5. 関連する環境変数
次の環境変数を使用して、RHACS での RHCOS ノードのスキャンを設定できます。
環境変数 | 説明 |
---|---|
|
キャッシュされたインベントリーが古いとみなされるまでの時間。デフォルトは |
|
バックオフファイルが見つかった場合にノードスキャンが遅延する最初の時間 (秒)。デフォルト値は |
| バックオフの上限。デフォルト値は 5m で、これは Kubernetes 再起動ポリシー安定性タイマーの 50% です。 |
環境変数 | 説明 |
---|---|
|
このクラスターでノードインデックスを有効にするかどうかを制御します。デフォルト値は |
|
ノードスキャン間の間隔期間の基本値。デフォルト値は |
|
ノードスキャンの継続時間は、基本間隔時間と異なる場合があります。ただし、最大値は |
|
最初のノードスキャンまでの最大待機時間。ランダムに生成されます。この値を |
14.5.6. ダッシュボードを使用してノードの脆弱性を特定する
Vulnerability Management ビューを使用して、ノードの脆弱性を特定できます。特定される脆弱性には、Docker、CRI-O、runC、containerd などの Kubernetes コアコンポーネントとコンテナーランタイムの脆弱性も含まれます。RHACS がスキャンできるオペレーティングシステムの詳細は、「サポート対象オペレーティングシステム」を参照してください。
手順
-
RHACS ポータルで、Vulnerability Management
Dashboard に移動します。 - ヘッダーの Nodes を選択し、ノードに影響するすべての CVE のリストを表示します。
リストからノードを選択し、そのノードに影響するすべての CVE の詳細を表示します。
- ノードを選択すると、選択したノードの Node の詳細パネルが開きます。Node ビューには、ノードの詳細が表示され、CVSS スコア別の CVE およびそのノードの修正可能な CVE に関する情報が含まれます。
- 選択したノードのすべての CVE のリストを表示するには、CVEs by CVSS score で、View All を選択します。CVE の一覧をフィルタリングすることもできます。
- 修正可能な CVE を CSV ファイルとしてエクスポートするには、Node Findings セクションで Export as CSV を選択します。
14.5.7. ノードの CVE の表示
RHACS を使用すると、ノード内の脆弱性を特定できます。特定される脆弱性は次のとおりです。
- Kubernetes コアコンポーネントの脆弱性
- Docker、CRI-O、runC、containerd などのコンテナーランタイムの脆弱性
RHACS がスキャンできるオペレーティングシステムの詳細は、「サポート対象オペレーティングシステム」を参照してください。
手順
-
RHACS ポータルで、Vulnerability Management
Node CVEs をクリックします。 データを表示するために、次のいずれかのタスクを実行します。
- すべてのノードに影響するすべての CVE のリストを表示するには、<number> CVEs を選択します。
- CVE を含むノードのリストを表示するには、<number> Nodes を選択します。
オプション: CVE をエンティティー別にフィルタリングするには、適切なフィルターと属性を選択します。フィルタリング条件をさらに追加するには、次の手順に従います。
- リストからエンティティーまたは属性を選択します。
- 必要に応じて、テキストなどの適切な情報を入力するか、日付またはオブジェクトを選択します。
- 右矢印アイコンをクリックします。
オプション: 追加のエンティティーと属性を選択し、右矢印アイコンをクリックして追加します。フィルターのエンティティーと属性を次の表に示します。
表14.6 CVE のフィルタリング エンティティー 属性 ノード
- Name: ノードの名前。
- Operating system: ノードのオペレーティングシステム (例: Red Hat Enterprise Linux (RHEL))。
- Label: ノードのラベル。
- Annotation: ノードのアノテーション。
- Scan time: ノードのスキャン日。
CVE
- Name: CVE の名前。
- Discovered time: RHACS が CVE を検出した日付。
CVSS: CVE の重大度。
CVE の重大度レベルには次の値が関連付けられています。
- is greater than
- is greater than or equal to
- is equal to
- is less than or equal to
- is less than
Node Component
- Name: コンポーネントの名前。
-
Version: コンポーネントのバージョン (例:
4.15.0-2024
)。これを使用すると、たとえばコンポーネント名と組み合わせて、特定のバージョンのコンポーネントを検索できます。
Cluster
- Name: クラスターの名前。
- Label: クラスターのラベル。
- Type: クラスターのタイプ (例: OCP)。
- Platform type: プラットフォームのタイプ (例: OpenShift 4 クラスター)。
オプション: 結果のリストを絞り込むには、次のいずれかのタスクを実行します。
- CVE severity をクリックし、1 つ以上のレベルを選択します。
- CVE status をクリックし、Fixable または Not fixable を選択します。
- オプション: ノードの詳細と、そのノードの CVSS スコアと修正可能な CVE に基づく CVE 情報を表示するには、ノードのリストでノード名をクリックします。