Skip to main content

Command Palette

Search for a command to run...

持续监控集群中的镜像漏洞——Trivy Operator 简介

Updated
2 min read

在本文中,我们将介绍 Trivy Operator,一款用于持续监控 Kubernetes 集群中的容器镜像漏洞的工具。我们将从 Trivy Operator 的简介开始,接着介绍如何安装和配置,最后探讨漏洞扫描与呈现,以及其他补充功能。

引言

当下,容器技术已成为企业构建和部署应用的关键组成部分。然而,容器镜像可能会携带软件漏洞,这些漏洞可能导致应用和数据面临安全风险。为了确保 Kubernetes 集群在运行时的持续安全,就需要自动对运行中的容器镜像进行扫描的工具。

很早以前曾经使用 Shell Operator 结合 Trivy 编写了一个小工具,对运行中的镜像进行扫描,然后把扫描结果用 Prometheus 的方式进行输出。

接下来将要介绍的 Trivy-Operator,是一个来自 Aqua 的开源工具,可以自动扫描容器镜像中已知的漏洞,并用最佳实践对 Kubernetes 资源进行验证,从而提高 Kubernetes 集群的运行时安全性。它易于安装,可以顺利地集成到监控系统中;更借助Kubernetes Operator 技术响应集群上的工作负载和其他更改,自动更新安全报告资源。Trivy-Operator 能够显著加强 Kubernetes 集群的安全性,保护其中的应用程序免受潜在威胁。

简介

在深入了解 Trivy-Operator 的使用方法之前,先简单交代一下它的大致功能:

  • 漏洞扫描:Trivy-Operator 基于 Trivy 扫描器,对容器镜像进行全面扫描,识别其中的已知漏洞。这有助于及时发现并修复潜在的安全隐患,保护您的应用程序免受攻击。

  • Kubernetes 资源验证:通过与 Kubernetes API 的集成,Trivy-Operator 可以自动验证 Kubernetes 资源的配置,确保遵循安全性最佳实践。这样可以避免因配置错误导致的安全风险。

  • 持续监控与报告:Trivy-Operator 自动更新安全报告资源,以响应 Kubernetes 集群上的工作负载和其他更改。这意味着它可以在创建新 Pod 时启动漏洞扫描和配置审核,然后更新扫描报告。这有助于实时了解集群安全状况,及时采取相应措施。

  • Prometheus 集成:Trivy-Operator 提供 Prometheus 指标端点,使其可以与现有的监控基础设施集成。通过Prometheus,用户可以收集和分析 Trivy-Operator 的指标数据,实现对集群安全的实时监控。通过 Prometheus 之后,还可以和 Grafana、Alert-manager 等联动,进一步提高集群的透明度和可运维性。

安装

可以通过三种方式安装和部署 Trivy Operator,YAML、Helm 和 OLM。

YAML

$ kubectl apply -f \
https://raw.githubusercontent.com/aquasecurity/trivy-operator/v0.12.1/deploy/static/trivy-operator.yaml

customresourcedefinition.apiextensions.k8s.io/clustercompliancereports.aquasecurity.github.io created
...

可以看到,这里创建了几个 CRD,都是以 reports 结尾的,看来都是各种报告,大概几个字面意思:

  • infraassessmentreports,clusterinfraassessmentreports:基础设施评估报告,包括 Kubernetes 核心组件的配置内容

  • vulnerabilityreports:漏洞报告

  • configauditreports、clusterconfigauditreports:配置审计报告

  • exposedsecretreports:Secret 报告

  • clusterrbacassessmentreports/rbacassessmentreports:RBAC 评估报告

  • clusterrbacassessmentreports:集群 RBAC 评估报告

另外还生成了一个叫做 trivy-operator 的 ServiceAccount,可以查看一下它的权限:

$ kubectl rolesum trivy-operator
ServiceAccount: trivy-system/trivy-operator
...
Policies:
...
• [CRB] */trivy-operator ⟶  [CR] */trivy-operator
  Resource                                                Name  Exclude  Verbs  G L W C U P D DC
  clustercompliancedetailreports.aquasecurity.github.io   [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖
  clustercompliancereports.aquasecurity.github.io         [*]     [-]     [-]   ✔ ✔ ✔ ✔ ✔ ✔ ✔ ✖

这里用到了 kubectl 的 rolesum 插件

可以看到,它从 trivy-operator 这个 ClusterRole 继承了大量权限,除了前面提到的 CR 之外,还包括了对 Pod、Configmap 等的读取权限,据此可以判断他的工作范围。

Helm

这个安装也比较简单,首先加入 Aqua 的仓库:

$ helm repo add aqua https://aquasecurity.github.io/helm-charts/
helm repo add aqua https://aquasecurity.github.io/helm-charts
"aqua" has been added to your repositories
$ helm repo update
...
$ helm install trivy-operator aqua/trivy-operator \
  --namespace trivy-system \
  --create-namespace \
  --set="trivy.ignoreUnfixed=true" \
  --version 0.12.1
...

可以用 helm show values aqua/trivy-operator 看看其中包含的丰富配置。后面也会进行一点讲解。

Operator Lifecycle Manager

OLM这是一种专门用于维护 Operator 生命周期的方式。这里暂时不做更多介绍。具体安装方式可以参照官方文档

配置

Operator Pod(trivy-operator-)支持很多环境变量用于其行为配置,下面列出一些关键内容:

  • OPERATOR_EXCLUDE_NAMESPACES:排除命名空间

  • OPERATOR_VULNERABILITY_SCANNER_ENABLED:启用漏洞扫描

  • OPERATOR_CONFIG_AUDIT_SCANNER_ENABLED:启用配置审计

  • OPERATOR_RBAC_ASSESSMENT_SCANNER_ENABLED:启用 RBAC 扫描

  • OPERATOR_CONFIG_AUDIT_SCANNER_BUILTIN:启用内置的配置扫描引擎

  • OPERATOR_WEBHOOK_BROADCAST_URL:Webhook 地址,置空则禁用该功能

另外,同一个命名空间内还有一个 Configmap,内容:

apiVersion: v1
data:
  trivy.additionalVulnerabilityReportFields: ""
  trivy.command: image
  trivy.dbRepository: ghcr.io/aquasecurity/trivy-db
  trivy.dbRepositoryInsecure: "false"
  trivy.mode: Standalone
  trivy.repository: ghcr.io/aquasecurity/trivy
  trivy.resources.limits.cpu: 500m
  trivy.resources.limits.memory: 500M
  trivy.resources.requests.cpu: 100m
  trivy.resources.requests.memory: 100M
  trivy.severity: UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL
  trivy.slow: "true"
  trivy.supportedConfigAuditKinds: Workload,Service,Role,ClusterRole,NetworkPolicy,Ingress,LimitRange,ResourceQuota
  trivy.tag: 0.38.2
  trivy.timeout: 5m0s
  trivy.useBuiltinRegoPolicies: "true"
kind: ConfigMap
metadata:
  annotations:
    ...
  name: trivy-operator-trivy-config
  namespace: trivy-system

其中的内容,熟悉 Trivy 扫描器的读者应该很容易看得出来——这里基本定义了最常用的几个 Trivy 开关。另外根据官网看来,还可以使用 trivy-operator-trivy-config Secret 的 data.trivy.githubToken 来设置用于抓取 Trivy 特征库的 Github Token。

漏洞扫描和呈现

事实上,Trivy Operator 部署之后直接就会启动扫描,生成漏洞报告(vulnerabilityreports)以及 RBAC 报告(rbacassessment),可以使用 kubectl get xx yy-o wide,或者 kubectl descrbe xx yy 来查看具体内容。例如漏洞报告显示各级别问题都是 0

新建一个工作负载,例如 kubectl create deployment nginx --image nginx:1.16,创建之后,会发现马上出现一个 scan-vulnerabilityreport-* 的 Pod 启动了,在它完成任务消失之后,我们会看到 vulns 多了一条针对 nginx:1.16 镜像的记录,其中包含高中低各种级别的漏洞若干。

另外还新出现了一个名为 replicaset-nginx-XXXConfigAuditReport 对象,其中包含了对这个 RS 的审计内容,例如:

  - category: Kubernetes Security Check
    checkID: KSV015
    description: When containers have resource requests specified, the scheduler can
      make better decisions about which nodes to place pods on, and how to deal with
      resource contention.
    messages:
    - Container 'nginx' of ReplicaSet 'nginx-54f8f9f495' should set 'resources.requests.cpu'
    severity: LOW
    success: false
    title: CPU requests not specified

这些基本内容都可以通过 Prometheus 监控栈进行监控,并可通过 Grafana Dashboard 进行可视化呈现;或者用 Alert Manager 以及 Webhook 进行告警。

补充

其实除了 YAML 和镜像漏洞的检查之外,这个 Operator 还定义了多种合规性、安全基线方面的内容,并可以通过 REGO 语言进行自定义的基线检查。虽然多数功能还处于非正式版本,但这是一个合理的方向———对集群安全,要进行可视化的、持续的审视,而不是。。我不说了。

More from this blog

龙虾恐慌:AIOps 又要改名了?

ChatGPT 开始,把 AI 拉近到普罗大众的面前,让无数人感受到 AI 的亲民魅力。而龙虾,则把大模型驱动的自动化能力,突然间变得水灵灵、活泼泼地走进千家万户。它不只是“风口上的猪”,而是风口本身。热度高到让 Mac mini 一度断货,不知道这在不在库克的预料之内。 每代人都有每代人的鸡蛋,春节期间,我就领了我的鸡蛋。翻出古老的 MacBook Air M1,充值各种大模型。当然了,这个工具

Mar 9, 20261 min read

再见 2025

我猜不少人以为这个号废了吧?并没有,只是今年变化有点大,一直有种抄起键盘,无从说起的感觉,所以一直偷懒到今天,2025 的最后一天。 今年是我的第四个本命年,去年末一期播客里,大内说本命年不是灾年,是变化年,有危也有机。可是讲真啊,只看到危,没看到机。 各种因缘际会,从鹅厂跳槽到前东家,已经接近四年,第一个合同期已经进入尾声。除了前两年还在云原生领域嗷嗷叫,后两年基本都是些鸡零狗碎的东西了,用老东家的术语说是——偏离主航道,可谓是前景暗淡了。 一旦确定要滚蛋,反倒心思轻松起来,每天骑着我的小红车...

Jan 5, 20261 min read

辅助编程?dora 说:我知道你很急可是请你别急

从 OpenGPT 把大模型的火烧旺了之后,这三年来,相信很多组织或摩拳擦掌、或躬身入局,希望借助聪明能干的大模型,或想偿还技术宅,或想降本增效,或想弯道超车。一时间,沉寂许久的 AIxx 又活过来了,LLM Ops、Vibe Coding、中医大模型、GPT 算命等等,全都老树发新芽,焕发了勃勃生机。那么视角拉回从业者最关注的饭碗相关的领域之一——AI 辅助开发,产生了什么触动,应该如何拥抱呢? DORA 的年度报告中给出了很有意思的结论——强者恒强。 执行摘要部分总结了几个有趣的点: 问题...

Oct 6, 20251 min read

[译]dora:ai 辅助软件开发状态报告

执行摘要 在 2025 年,科技领导者面临的核心问题已不再是“是否要采用 AI”,而是“如何实现其价值”。 DORA 的研究基于超过 100 小时的定性访谈和来自全球近 5,000 名技术专业人士的问卷调查。研究揭示了一个关键事实:AI 在软件开发中的主要角色是“放大器”。它会放大高效能组织的优势,也会凸显组织的缺陷。 关键结论:AI 是放大器 AI 投资的最大回报并非来自工具本身,而是来自组织底层系统的战略性建设: 高质量的内部平台 清晰的工作流 团队的协同能力 缺少这些基础,AI ...

Oct 2, 202514 min read

僭越了,有人在用 Rust 写 Kubernetes

一个新语言问世,最爱做的事情之一,就是重写存量软件了。 云原生喝酒 SIG 重点扶持项目——rk8s(https://github.com/rk8s-dev/rk8s) 也可以归在这个范畴里,只不过这个项目重写的东西比较大,是 Kubernetes。 从 2025 年 1 月第一个 Commit 开始,到现在有了 200 多次 Commit,十几万行代码。当然距离 Kubernetes 的几百万行代码还差得远——老马就是喜欢整这种大无畏项目。 另外该项目也是国内第一个脱离 Cargo 转向使用 ...

Sep 27, 20253 min read

【伪】架构师

342 posts