0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Trivy Operatorで、稼働中Podの脆弱性を調べる

0
Posted at

1 はじめに

新規に脆弱性(CVE)が見つかった場合、運用する環境への影響を即座に確認し、必要であれば速やかにパッチ適用などの対応を行う必要があります。しかし、実際に運用している環境の中に該当の脆弱性が含まれているかどうかを即座に調べることは、容易ではありません。

この課題を解決するのが、Trivy Operatorです。Trivy Operatorは、ワークロード(DeploymentやDaemonSetなど)が作成または更新されると、そのワークロードで使用されるコンテナイメージを自動的にスキャンし、イメージに含まれる脆弱性を検出するツールです。

検出結果は VulnerabilityReport というKubernetesリソースとして保存されるため、kubectl コマンドを使用して、クラスタ内で利用されているコンテナイメージにどのような脆弱性が存在するかを確認できます。

本記事では、Trivy Operatorを導入し、実際に稼働中のPodが特定のCVEに該当するかどうかを検証します。

なお、本記事は、以下の記事で紹介している手順が完了していることを前提としています。

2 検証環境

2.1 ネットワーク構成

検証環境は、VMware Workstation Pro上に構築した3台の仮想マシンでKubernetesクラスタを構成しています。各仮想マシンはブリッジ接続により、PCと同じネットワーク(192.168.1.0/24)に接続されています。

一方、10.244.0.0/16 は、CalicoのCNIプラグインによってクラスタ内に作成されるPodネットワークです。各Podにはこのアドレス帯からIPアドレスが割り当てられ、異なるノード上のPod同士が相互に通信する際に使用されます。Calicoは各ノードに経路を設定することで、Pod間通信を透過的に実現しています。

+--- control ---+    +--- worker1 ---+   +--- worker2 ---+
|AlmaLinux 10.2 |    |AlmaLinux 10.2 |   |AlmaLinux 10.2 |
|               |    |               |   |               |
|      Pod      |    |      Pod      |   |      Pod      |
|       |       |    |       |       |   |       |       |
| 10.244.x.0/24 |    | 10.244.y.0/24 |   | 10.244.z.0/24 |
| ------------- |    | ------------- |   | ------------- |
|               |    |               |   |               |
+-------+-------+    +-------+-------+   +-------+-------+
        |.19                 |.20                |.22
        |                    |                   |
        |   192.168.1.0/24   |                   |
+--------------------------------------------------------+
|        VMware Workstation Pro(Bridged networking)    |
+--------------------------------------------------------+
                             |
                    +---------------+
                    |               |
                    |       PC      |
                    |               |
                    +---------------+

それぞれの役割は以下のとおりです。
1台をコントロールノード、2台をワーカーノードとして使用します。

ホスト名 名称 役割
control コントロールノード クラスタ(control、worker1、worker2)の状態を管理し、Pod をどのノードで実行するかを決定するノード
worker1 ワーカーノード Pod を実行するノード
worker2 ワーカーノード Pod を実行するノード

2.2 ソフトウェアのバージョン

各ノードのAlmaLinuxバージョンは以下のとおりです。

[root@control ~]# cat /etc/redhat-release
AlmaLinux release 10.2 (Lavender Lion)

各ノードのカーネルバージョンは以下のとおりです。

[root@control ~]# uname -r
6.12.0-211.7.3.el10_2.x86_64

Kubernetesのバージョンは以下のとおりです。

[root@control ~]# kubectl version
Client Version: v1.36.2
Kustomize Version: v5.8.1
Server Version: v1.36.2

2.3 ノードのリソース

各ノードには4GBのメモリを割り当てています。

[root@control ~]#  free -h
               total        used        free      shared  buff/cache   available
Mem:           3.6Gi       1.3Gi       1.0Gi       5.8Mi       1.5Gi       2.3Gi
Swap:             0B          0B          0B

各ノードは 4コアのCPU(4 vCPU) を搭載しています。

[root@control ~]# lscpu -xe
CPU NODE SOCKET CORE L1d:L1i:L2:L3 ONLINE
  0    0      0    0 0:0:0:0          yes
  1    0      1    1 1:1:1:1          yes
  2    0      2    2 2:2:2:2          yes
  3    0      3    3 3:3:3:3          yes

lscpuコマンドの詳しい使い方は、以下のページをご覧ください。

3 事前準備

3.1 Harborのホスト名登録

すべてのノード(コントロールノード、ワーカーノード)の /etc/hosts に、Harbor(harbor.home.lab)のIPアドレスを登録します。これにより、各ノードがharbor.home.labというホスト名でHarborを参照できるようになります。

[root@control ~]# cat /etc/hosts
-snip-
192.168.1.10 control
192.168.1.11 worker1
192.168.1.12 worker2
192.168.1.200 harbor.home.lab

3.2 ワーカーノードへのCA証明書の配置(全てのワーカーノードで実施)

コントロールノードには、HarborをHTTPS化した際に作成したCA証明書がすでに配置されています。

[root@control ~]# find . -name ca.crt
./harbor-certs/ca.crt

CA証明書の作成方法は、以下の記事で説明していますので参考にしてください。

全てのワーカーノードに、CA証明書を配置するためのディレクトリを作成します。CA証明書はワーカーノードのcontainerdがHarborへHTTPSで接続する際、Harborから送られてくるサーバー証明書の署名を検証するために使用します。今回のHarborは自己署名のCA証明書で署名されているため、そのCA証明書をワーカーノードへ配置する必要があります。

[root@worker1 ~]# mkdir -p /etc/containerd/certs.d/harbor.home.lab
[root@worker2 ~]# mkdir -p /etc/containerd/certs.d/harbor.home.lab

コントロールノードで作成したCA証明書を、全てのワーカーノードへコピーします。

[root@control ~]# scp /root/harbor-certs/ca.crt worker1:/etc/containerd/certs.d/harbor.home.lab/ca.crt
root@worker1's password:
ca.crt                                                                                                   100% 2033   267.8KB/s   00:00
[root@control ~]# scp /root/harbor-certs/ca.crt worker2:/etc/containerd/certs.d/harbor.home.lab/ca.crt
root@worker2's password:
ca.crt                                                                                                   100% 2033   969.9KB/s   00:00

全てのワーカーノードで、containerdがHarborへHTTPS接続する際に参照する設定ファイルhosts.tomlを作成します。caにはCA証明書のパスを配列形式で指定します。

[root@worker1 ~]# vi /etc/containerd/certs.d/harbor.home.lab/hosts.toml
[root@worker1 ~]# cat /etc/containerd/certs.d/harbor.home.lab/hosts.toml
server = "https://harbor.home.lab"

[host."https://harbor.home.lab"]
  ca = ["/etc/containerd/certs.d/harbor.home.lab/ca.crt"]

3.3 containerdのレジストリ証明書参照設定(全てのワーカーノードで実施)

全てのワーカーノードでcontainerdの設定ファイル(config.toml)を編集します。設定ファイルはデフォルトでは存在しないため、以下のように実行して作成します。

[root@worker1 ~]# containerd config default > /etc/containerd/config.toml

編集前に、変更差分を確認できるよう設定ファイルのバックアップを取得します。

[root@worker1 ~]# cp /etc/containerd/config.toml /etc/containerd/config.toml.org

containerdがCA証明書を格納したディレクトリを参照するようconfig_pathを設定します。

[root@worker1 ~]# vi /etc/containerd/config.toml

変更内容を確認します。config_pathにCA証明書を格納したディレクトリを指定しています。なお、SystemdCgroup = trueはKubernetes構築時に設定済みの内容です。

[root@worker1 ~]# diff -Nur /etc/containerd/config.toml.org /etc/containerd/config.toml
--- /etc/containerd/config.toml.org     2026-07-14 09:12:25.609474288 +0900
+++ /etc/containerd/config.toml 2026-07-22 19:59:21.408811282 +0900
@@ -51,7 +51,7 @@
       sandbox = 'registry.k8s.io/pause:3.10.1'

     [plugins.'io.containerd.cri.v1.images'.registry]
-      config_path = ''
+      config_path = '/etc/containerd/certs.d'

     [plugins.'io.containerd.cri.v1.images'.image_decryption]
       key_model = 'node'
@@ -106,7 +106,7 @@
             NoNewKeyring = false
             Root = ''
             ShimCgroup = ''
-            SystemdCgroup = false
+            SystemdCgroup = true

     [plugins.'io.containerd.cri.v1.runtime'.cni]
       bin_dir = ''

Harbor用の証明書ファイルが正しく配置されていることを確認します。

[root@worker1 ~]# ls -l /etc/containerd/certs.d/harbor.home.lab/
合計 8
-rw-r--r--. 1 root root 2033  7月 22 19:51 ca.crt
-rw-r--r--. 1 root root  127  7月 22 20:32 hosts.toml

設定を反映するため、containerdを再起動します。

[root@worker1 ~]# systemctl restart containerd

3.4 Harborのデプロイ防止ポリシーの無効化

Harborには、指定した重大度以上の脆弱性を含むイメージのpullを禁止するポリシー(Prevent vulnerable images from running)があります。今回は脆弱性を含むイメージをTrivy Operatorでスキャンすることが目的であるため、このポリシーを一時的に無効化します。
aa-01.jpg

3.5 Harborの名前解決設定

Trivy Operatorが作成するスキャン用Podは、イメージをpullする際にHarbor(harbor.home.lab)へアクセスします。そのため、harbor.home.labをIPアドレスに変換するための設定を追加します。

CoreDNSの設定はConfigMapとして管理されているため、kubectl editコマンドで編集します。

[root@control ~]# kubectl edit configmap coredns -n kube-system

CoreDNSの設定ファイルにhosts を追加します

        prometheus :9153
        hosts {
           192.168.1.200 harbor.home.lab
           fallthrough
        }
        forward . /etc/resolv.conf {
           max_concurrent 1000
        }

設定を反映するため、CoreDNSのDeploymentを再起動します。

[root@control ~]# kubectl rollout restart deployment coredns -n kube-system

一時的にBusyBoxコンテナを起動し、Harbor(harbor.home.lab)の名前解決が正常に行えることを確認します

[root@control ~]# kubectl run dns-test --image=busybox:1.28 --rm -it --restart=Never -- nslookup harbor.home.lab
Server:    10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name:      harbor.home.lab
Address 1: 192.168.1.200 harbor.home.lab
All commands and output from this session will be recorded in container logs, including credentials and sensitive information passed through the command prompt.
If you don't see a command prompt, try pressing enter.
Session ended, resume using 'kubectl attach dns-test -c dns-test -n default -i -t' command
pod "dns-test" deleted from default namespace

4 Trivy Operatorのインストール手順

Trivy Operatorが含まれるリポジトリをaquaという名前で登録します。

[root@control ~]# helm repo add aqua https://aquasecurity.github.io/helm-charts/
"aqua" has been added to your repositories

登録済みリポジトリを確認します。

[root@control ~]# helm repo list
NAME            URL
metallb         https://metallb.github.io/metallb
ingress-nginx   https://kubernetes.github.io/ingress-nginx
harbor          https://helm.goharbor.io
aqua            https://aquasecurity.github.io/helm-charts/

Helmはリポジトリ情報をローカルにキャッシュしており、古いキャッシュのままでは最新バージョンのチャートがインストールできない場合があるため、helm repo updateコマンドを実行して最新のチャート情報を取得します。

[root@control ~]# helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "metallb" chart repository
...Successfully got an update from the "aqua" chart repository
...Successfully got an update from the "ingress-nginx" chart repository
...Successfully got an update from the "harbor" chart repository
Update Complete. ?Happy Helming!?

Trivy Operator 用の namespace を作成します。

[root@control ~]# kubectl create namespace trivy-system
namespace/trivy-system created

Trivy Operator用の設定ファイルを保存するディレクトリを作成します。

[root@control ~]# mkdir -p ~/trivy-operator-install

trivy-operatorの設定ファイル(values.yaml)を作成します。sslCertDirには、CA証明書を格納したディレクトリを指定します。Trivy Operatorは、このディレクトリをhostPathボリュームとしてスキャン用Podにマウントし、プライベートレジストリとのHTTPS通信で使用するCA証明書として利用します。また、ignoreUnfixed: falseを設定することで、修正版が提供されていない脆弱性についても除外せず、検出結果に含めるようになります。

[root@control ~]# vi ~/trivy-operator-install/values.yaml
[root@control ~]# cat ~/trivy-operator-install/values.yaml
trivy:
  ignoreUnfixed: false
  sslCertDir: "/etc/containerd/certs.d/harbor.home.lab"
  useBuiltinCache: false

operator:
  scanJobsConcurrentLimit: 1

scanJobsConcurrentLimit は、同時に実行できるスキャンジョブの最大数を指定するパラメータです。今回の検証環境では、当初このパラメータを設定していなかったため、複数のスキャンジョブが同時に実行され、スキャンが完了しない状況が発生しました。そこで、この値を 1 に設定したところ、スキャンが正常に完了しました。環境によっては、同時実行数を増やしても問題なく動作するため、利用するクラスタのリソース状況に応じて適切な値を設定するとよいでしょう。

作成した values.yaml を指定して、Trivy Operator をインストールします。

[root@control ~]# helm install trivy-operator aqua/trivy-operator --namespace trivy-system -f ~/trivy-operator-install/values.yaml
NAME: trivy-operator
LAST DEPLOYED: Sun Jul 26 08:49:21 2026
NAMESPACE: trivy-system
STATUS: deployed
REVISION: 1
DESCRIPTION: Install complete
TEST SUITE: None
NOTES:
You have installed Trivy Operator in the trivy-system namespace.
It is configured to discover Kubernetes workloads and resources in
all namespace(s).

Inspect created VulnerabilityReports by:

    kubectl get vulnerabilityreports --all-namespaces -o wide

Inspect created ConfigAuditReports by:

    kubectl get configauditreports --all-namespaces -o wide

Inspect the work log of trivy-operator by:

    kubectl logs -n trivy-system deployment/trivy-operator

Helm リリース一覧を確認します。

[root@control ~]# helm list -n trivy-system
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
trivy-operator  trivy-system    1               2026-07-26 08:49:21.026057855 +0900 JST deployed        trivy-operator-0.34.0   0.32.0

インストール直後は、クラスタ内で稼働している全てのワークロードを対象に、スキャンが一斉に開始されます。Trivy Operatorはワークロード1つに対してスキャン用Pod(scan-vulnerabilityreport-*)を1つ生成し、スキャンが完了すると自動的に削除します。スキャン対象のワークロードが複数存在する場合、この処理がワークロードの数だけ繰り返されるため、インストール直後はscan-vulnerabilityreport-*という名前のPodの生成と終了が続く状態になります。

[root@control ~]# kubectl get pods -n trivy-system
NAME                                        READY   STATUS    RESTARTS   AGE
node-collector-855455d7f8-2bflx             0/1     Pending   0          58s
scan-vulnerabilityreport-7b99c4b95d-wts2h   1/1     Running   0          60s
trivy-operator-5f54f465b7-nbrwh             1/1     Running   0          62s

以下のコマンドを実行すると、スキャン結果のレポートが順次作成されていく様子が確認できます。最終的にはクラスタ内の全てのPodに対するレポートが表示されますが、全てのレポートが出揃うのを待たずに次の手順に進んでも問題ありません。

[root@control ~]# kubectl get vulnerabilityreports -A
NAMESPACE     NAME                                        REPOSITORY                      TAG       SCANNER   AGE
harbor        statefulset-harbor-database-database        goharbor/harbor-db              v2.15.1   Trivy     36s
harbor        statefulset-harbor-trivy-trivy              goharbor/trivy-adapter-photon   v2.15.1   Trivy     91s
kube-system   pod-kube-scheduler-control-kube-scheduler   kube-scheduler                  v1.36.2   Trivy     41s

5 動作確認

ここでは、Harborに登録したNginxのイメージを使ってPodを起動し、Trivy Operatorが脆弱性レポートを生成できることを確認します。

(1) Harbor認証用のSecretを作成
Nginxのイメージを登録したlibraryプロジェクトは、Privateに設定しているため、containerdがHarborからイメージをpullする際に認証が必要です。Harborの認証情報をSecretとして登録します。

[root@control ~]# kubectl create secret docker-registry harbor-cred \
  --docker-server=harbor.home.lab \
  --docker-username=admin \
  --docker-password=Harbor12345 \
  --docker-email=dummy@example.com \
  -n default
secret/harbor-cred created

Secretが作成されたことを確認します。

[root@control ~]# kubectl get secrets
NAME          TYPE                             DATA   AGE
harbor-cred   kubernetes.io/dockerconfigjson   1      13s

(2) Deploymentマニフェストの作成
Harborに登録したNginxのイメージ(nginx:1.30)を使用するDeploymentのマニフェストを作成します。imagePullSecretsに先ほど作成したSecretを指定することで、HarborのPrivateプロジェクトからイメージをpullできるようになります。

[root@control ~]# vi nginx-test.yaml
[root@control ~]# cat nginx-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-test
  template:
    metadata:
      labels:
        app: nginx-test
    spec:
      containers:
        - name: nginx
          image: harbor.home.lab/library/nginx:1.30
      imagePullSecrets:
        - name: harbor-cred

(3) Pod起動確認
マニフェストを適用してDeploymentを作成します。

[root@control ~]# kubectl apply -f nginx-test.yaml
deployment.apps/nginx-test created

Podが正常に起動していることを確認します。

[root@control ~]# kubectl get pods
NAME                          READY   STATUS    RESTARTS   AGE
nginx-test-654b84664c-dvhp7   1/1     Running   0          11s

(4) Trivy Operatorの動作確認
Trivy Operatorは、ワークロードで使用されているコンテナイメージを自動的にスキャンし、脆弱性レポートを生成します。まずは、Trivy Operatorが正常に起動していることを確認します。

[root@control ~]# kubectl get pods -n trivy-system
NAME                                        READY   STATUS     RESTARTS   AGE
node-collector-855455d7f8-2nknj             0/1     Pending    0          40s
scan-vulnerabilityreport-5769c7bbdb-psnqd   0/1     Init:0/1   0          6s
trivy-operator-5f54f465b7-nbrwh             1/1     Running    0          9m30s

(5) VulnerabilityReportの生成確認
スキャン結果は、VulnerabilityReportリソースとして保存されます。

[root@control ~]# kubectl get vulnerabilityreports
NAME                                     REPOSITORY      TAG    SCANNER   AGE
replicaset-nginx-test-654b84664c-nginx   library/nginx   1.30   Trivy     3m54s

他のPodのスキャン結果は、-Aオプションを指定することで確認できます。

[root@control ~]# kubectl get vulnerabilityreports -A
NAMESPACE            NAME                                                          REPOSITORY                       TAG       SCANNER   AGE
default              replicaset-nginx-test-654b84664c-nginx                        library/nginx                    1.30      Trivy     15m
harbor               replicaset-harbor-core-57b57bcdd5-core                        goharbor/harbor-core             v2.15.1   Trivy     11m
harbor               replicaset-harbor-jobservice-7cddc45866-jobservice            goharbor/harbor-jobservice       v2.15.1   Trivy     19m
harbor               replicaset-harbor-portal-5b6bc45d5c-portal                    goharbor/harbor-portal           v2.15.1   Trivy     18m
harbor               replicaset-harbor-registry-748df588c7-registry                goharbor/registry-photon         v2.15.1   Trivy     20m
harbor               statefulset-harbor-database-database                          goharbor/harbor-db               v2.15.1   Trivy     25m
harbor               statefulset-harbor-redis-redis                                goharbor/redis-photon            v2.15.1   Trivy     24m
harbor               statefulset-harbor-trivy-trivy                                goharbor/trivy-adapter-photon    v2.15.1   Trivy     26m
ingress-nginx        replicaset-ingress-nginx-controller-5cd9869bf8-controller     ingress-nginx/controller         v1.15.1   Trivy     14m
kube-system          daemonset-calico-node-calico-node                             calico/node                      v3.32.1   Trivy     10m
kube-system          daemonset-kube-proxy-kube-proxy                               kube-proxy                       v1.36.2   Trivy     8m47s
kube-system          pod-etcd-control-etcd                                         etcd                             3.6.8-0   Trivy     23m
kube-system          pod-kube-apiserver-control-kube-apiserver                     kube-apiserver                   v1.36.2   Trivy     24m
kube-system          pod-kube-controller-manager-control-kube-controller-manager   kube-controller-manager          v1.36.2   Trivy     21m
kube-system          pod-kube-scheduler-control-kube-scheduler                     kube-scheduler                   v1.36.2   Trivy     25m
kube-system          replicaset-7d57bc9844                                         calico/kube-controllers          v3.32.1   Trivy     21m
kube-system          replicaset-coredns-779fc6c7c4-coredns                         coredns/coredns                  v1.14.2   Trivy     15m
local-path-storage   replicaset-c64f4fcf9                                          rancher/local-path-provisioner   v0.0.36   Trivy     13m
metallb-system       replicaset-metallb-controller-bc9cbb54b-controller            metallb/controller               v0.16.1   Trivy     12m
trivy-system         replicaset-trivy-operator-5f54f465b7-trivy-operator           aquasec/trivy-operator           0.32.0    Trivy     24m

6 脆弱性の確認

Trivy Operatorによって生成されたVulnerabilityReportを使い、脆弱性の確認方法を説明します。特定のPodに絞った確認と、クラスタ全体を横断した確認の2つの観点で説明します。

6.1 特定のPodの脆弱性確認

まず、default namespaceに存在するVulnerabilityReportの一覧を確認します。

[root@control ~]# kubectl get vulnerabilityreports -n default
NAME                                     REPOSITORY      TAG    SCANNER   AGE
replicaset-nginx-test-654b84664c-nginx   library/nginx   1.30   Trivy     40m

(1) 特定のPodに含まれる脆弱性を表示する方法
nginx:1.30に含まれる全CVEを、CVE ID・重大度・対象パッケージ・インストール済みバージョン・修正済みバージョンの形式で表示します。fixedVersionが空のものは、現時点で修正版が提供されていないCVEです。

[root@control ~]# kubectl get vulnerabilityreport replicaset-nginx-test-654b84664c-nginx -n default -o json |   jq '.report.vulnerabilities[] | {id: .vulnerabilityID, severity: .severity, resource: .resource, installedVersion: .installedVersion, fixedVersion: .fixedVersion}'
{
  "id": "CVE-2011-3374",
  "severity": "LOW",
  "resource": "apt",
  "installedVersion": "3.0.3",
  "fixedVersion": ""
}
{
  "id": "TEMP-0841856-B18BAF",
  "severity": "LOW",
  "resource": "bash",
  "installedVersion": "5.2.37-2+b9",
  "fixedVersion": ""
}
-snip-

(2) CVE件数のサマリー表示
nginxに含まれる脆弱性の総数、修正版が提供されているCVE数、修正版が未提供のCVE数を表示します。nginx:1.30の場合、合計347件の脆弱性が検出されており、修正版が提供されているものは1件、残りの346件は現時点で修正未提供の状態です。

[root@control ~]# kubectl get vulnerabilityreport replicaset-nginx-test-654b84664c-nginx -n default -o json | \
  jq '{total: (.report.vulnerabilities | length), fixable: [.report.vulnerabilities[] | select(.fixedVersion != "")] | length, unfixable: [.report.vulnerabilities[] | select(.fixedVersion == "")] | length}'
{
  "total": 347,
  "fixable": 1,
  "unfixable": 346
}

(3) 修正版が存在するCVEのみ表示
修正版が提供されているCVEのみを絞り込んで表示します。対応可能な脆弱性を優先的に把握したい場合に使用します。

[root@control ~]# kubectl get vulnerabilityreport replicaset-nginx-test-654b84664c-nginx -n default -o json | \
  jq '.report.vulnerabilities[] | select(.fixedVersion != "") | {id: .vulnerabilityID, severity: .severity, resource: .resource, installedVersion: .installedVersion, fixedVersion: .fixedVersion}'
{
  "id": "CVE-2026-12912",
  "severity": "UNKNOWN",
  "resource": "libtiff6",
  "installedVersion": "4.7.0-3+deb13u2",
  "fixedVersion": "4.7.0-3+deb13u3"
}
[root@control ~]#

6.2 システム全体の脆弱性確認

(1) 全ワークロードの脆弱性サマリー表示
クラスタ内の全ワークロードについて、重大度別(Critical・High・Medium・Low・Unknown)のCVE件数を一覧表示します。どのコンポーネントにどの程度の脆弱性が存在するかを把握するのに役立ちます。

[root@control ~]# kubectl get vulnerabilityreports -A -o json | \
  jq '.items[] | {namespace: .metadata.namespace, name: .metadata.name, critical: .report.summary.criticalCount, high: .report.summary.highCount, medium: .report.summary.mediumCount, low: .report.summary.lowCount, unknown: .report.summary.unknownCount}'
{
  "namespace": "default",
  "name": "replicaset-nginx-test-654b84664c-nginx",
  "critical": 4,
  "high": 16,
  "medium": 35,
  "low": 111,
  "unknown": 181
}
{
  "namespace": "harbor",
  "name": "replicaset-harbor-core-57b57bcdd5-core",
  "critical": 6,
  "high": 46,
  "medium": 56,
  "low": 5,
  "unknown": 32
}
-snip-

(2) 特定のCVEに該当するワークロードを横断検索
新たなCVEが公表された際、そのCVEに該当するワークロードがクラスタ内のどこで稼働しているかを即座に特定できます。以下はCVE-2026-12912を例に検索した結果です。

[root@control ~]# kubectl get vulnerabilityreports -A -o json |   jq '.items[] | select(.report.vulnerabilities[]?.vulnerabilityID == "CVE-2026-12912") | {namespace: .metadata.namespace, name: .metadata.name}'
{
  "namespace": "default",
  "name": "replicaset-nginx-test-654b84664c-nginx"
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?