☰
Trivy config 命令完全指南:用 `trivy config` 扫描 IaC 与配置文件中的错误配置
2026/10/16 18:52:10 网站建设 项目流程

Trivy config 命令完全指南:用trivy config扫描 IaC 与配置文件中的错误配置

【免费下载链接】trivyFind vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and more项目地址: https://gitcode.com/GitHub_Trending/tr/trivy

trivy config是 Trivy(统一安全扫描器)中负责对**配置文件 / 基础设施即代码(IaC)**执行错误配置(misconfiguration)扫描的子命令。它支持 Dockerfile、Terraform、CloudFormation、Kubernetes、Helm、Ansible、Azure ARM 等十余种配置类型,既可用内置的 checks bundle 规则开箱即用,也可通过 Rego 策略定制扫描范围。阅读本文后,你将完整掌握trivy config的语法、全部命令行选项的语义与默认值、各选项背后的源码实现逻辑,以及将其嵌入 CI 流水线的典型用法。

本文以官方 CLI 参考文档 docs/guide/references/configuration/cli/trivy_config.md 为骨架,并结合pkg/commands/app.go、pkg/flag/下的实现进行纵深说明。文中所有链接均指向当前仓库。

trivy config 命令是什么

在 trivy 命令总览 中,config是归入Scanning 组(groupScanning)的子命令,其别名(alias)为conf,一句Short描述即可概括其职责:

Scan config files for misconfigurations

基本语法如下:

trivy config [flags] DIR

它接收一个目录(DIR)作为参数,对该目录树内的配置文件进行错误配置扫描。与trivy fs等通用文件系统扫描不同,该命令在源码层面被专门收敛为"纯错误配置扫描":

  • 在 pkg/commands/app.go#L688-L760 的NewConfigCommand中,命令创建时通过options.DisabledAnalyzers = append(analyzer.TypeOSes, analyzer.TypeLanguages...)禁用了所有 OS 层与语言层分析器(不再探测系统包、语言依赖与漏洞);
  • 同时以options.Scanners = types.Scanners{types.MisconfigScanner}强制只启用 misconfig 扫描器;
  • 最终以artifact.Run(cmd.Context(), options, artifact.TargetFilesystem)的形式,把DIR当作文件系统目标交给通用扫描管线执行。

因此,trivy config的输出聚焦于配置缺陷(如非安全的权限、暴露的管理端口、不符合规范的编排资源等),不会混杂容器漏洞与依赖漏洞信息。

注意:trivy config与trivy fs --scanners misconfig的可观测行为高度相似,但它省去了手动指定--scanners misconfig与关闭无关分析器的麻烦。此外,历史版本中形如--scanners config的写法已被废弃,在 pkg/flag/scan_flags.go#L54-L60 中会打印弃用告警并自动将其映射为 misconfig 扫描器。

全部命令行选项详解

下表按功能分组整理了trivy config支持的全部选项,均来自官方参考文档,并标注了其在源码中的定义位置(集中在 pkg/flag/misconf_flags.go、pkg/flag/rego_flags.go、pkg/flag/cache_flags.go、pkg/flag/report_flags.go),以及可供配置文件trivy.yaml使用的键名(ConfigName)。

IaC / 配置类型相关选项

这些选项决定"扫哪些配置类型、如何解析它们",多数定义于 pkg/flag/misconf_flags.go。

选项类型说明
--misconfig-scanners strings逗号分隔列表指定参与错误配置扫描的扫描器集合。默认值为azure-arm,cloudformation,dockerfile,helm,kubernetes,terraform,terraformplan-json,terraformplan-snapshot,ansible(对应配置键misconfiguration.scanners)。从源码看,默认值取自analyzer.TypeConfigFiles并剔除通用 YAML/JSON 类型
--helm-values strings路径列表指定用于覆盖 Helm 模板渲染的values.yaml文件路径,对应 Helm 模板-f/--values
--helm-set stringskey=value列表在命令行直接指定 Helm values,可多次传入或用逗号分隔多个key1=val1,key2=val2(对应misconfiguration.helm.set)
--helm-set-file stringskey=path列表指定从文件读取的 Helm values,形如key1=path1,key2=path2
--helm-set-string stringskey=value列表类似--helm-set,但强制将 value 视为字符串处理
--helm-api-versions strings逗号分隔列表指定 Helm 模板渲染时Capabilities.APIVersions可用的 Kubernetes API 版本,语义与helm template --api-versions相同,如policy/v1/PodDisruptionBudget,apps/v1/Deployment
--helm-kube-version string字符串指定Capabilities.KubeVersion,语义与helm template --kube-version相同
--tf-vars strings路径列表指定覆盖 Terraform 的*.tfvars文件路径
--tf-exclude-downloaded-modules布尔排除已下载的 Terraform 模块中的错误配置(配置键misconfiguration.terraform.exclude-downloaded-modules)。CI 环境中若无需审查第三方模块,可显著减少输出噪音
--cf-params strings路径列表指定覆盖 CloudFormation 参数(parameters)文件的路径
--ansible-playbook strings路径列表指定要扫描的 Ansible playbook 文件路径
--ansible-inventory strings主机路径/列表指定 Ansible inventory 主机路径或以逗号分隔的主机列表
--ansible-extra-vars stringskey=value/@file为 Ansible 设置额外变量,支持key=value形式,或@file引用 YAML/JSON 变量文件
--raw-config-scanners strings允许值:terraform额外对"原始配置"执行扫描(即把未适配的结构化配置放入共享状态再评估)。默认空
--render-cause strings允许值:terraform,ansible在 table 报告中展示指定配置类型的渲染后 cause。默认空
--config-file-schemas strings路径列表指定 JSON 配置文件 schema 路径:用于判断某文件匹配何种配置、并把 schema 传给 Rego check 做类型检查
--k8s-version string字符串指定 Kubernetes 版本(如1.21.0),用于校验过期的 Kubernetes API。该命令仅保留这一个 k8s 相关选项(见 pkg/commands/app.go#L716-L719)

Rego 自定义策略与 checks bundle 相关选项

内置规则由 OCI 形态的 checks bundle 下发,同时支持以 Rego 编写自定义策略。这些选项定义于 pkg/flag/rego_flags.go。

选项默认值说明
--checks-bundle-repository stringmirror.gcr.io/aquasecurity/trivy-checks:2拉取 checks bundle 的 OCI 仓库地址(配置键misconfiguration.checks-bundle-repository)。注意:旧选项名--policy-bundle-repository已废弃
--skip-check-updatefalse跳过拉取/更新 Rego checks bundle,配合离线环境或固定版本规则使用(别名--skip-policy-update已废弃)
--config-check strings无指定自定义 Rego check 文件的路径,或包含它们的目录(配置键rego.check)。旧别名--policy、--config-policy已废弃
--config-data strings无指定用于 Rego 规则评估的数据文件/目录,其中的数据会被递归加载(配置键rego.data)
--check-namespaces strings无自定义 Rego 规则所在的名字空间(配置键rego.namespaces),评估时会从这些命名空间加载规则
--include-deprecated-checksfalse是否包含已被弃用的内置 check
--rego-error-limit int10Rego 策略评估期间允许的最大编译错误数(配置键rego.error-limit),默认值来自 Rego 引擎的DefaultAllowedRegoErrors
--trace-regofalse为自定义查询开启更详细的 Rego trace 输出(配置键rego.trace),排查自定义策略时非常有用

结合 docs/guide/scanner/misconfiguration/custom 与教程 docs/tutorials/misconfiguration/custom-checks.md 可编写自有策略,基本形态为:--config-check ./policy --check-namespaces user。仓库中的 examples/ignore-policies/basic.rego 与 examples/ignore-policies/advanced.rego 提供了可直接参考的 Rego 片段。

文件过滤与跳过选项

选项默认值说明
--skip-files strings无按文件名或 glob 模式跳过文件(配置键scan.skip-files)
--skip-dirs strings无按目录或 glob 模式跳过目录(配置键scan.skip-dirs),例如排除vendor、.terraform等目录
--file-patterns strings无指定需要匹配的配置文件模式,用于自定义"哪些文件算配置文件"
--include-non-failuresfalse在输出中同时包含通过(无失败)的检查结果,仅配合 misconfig 扫描使用(配置键misconfiguration.include-non-failures)
--severity strings(-s)UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL要展示的问题级别,可按需缩小为HIGH,CRITICAL等
--ignorefile string.trivyignore指定 ignore 文件(格式参考 docs/guide/configuration/filtering.md),可用于按 rule ID 忽略特定检查
--ignore-policy string无指定用于评估每条漏洞/问题的 Rego 文件路径,实现细粒度豁免策略
--skip-version-checkfalse抑制版本更新提示与 Trivy 公告
--disable-telemetryfalse禁止向 Aqua 发送匿名使用数据

从 pkg/commands/app.go#L689-L697 可以看出:trivy config在完整 ScanFlagGroup 中只启用了上述--skip-dirs、--skip-files、--file-patterns、--skip-version-check、--disable-telemetry,其余通用扫描标志被有意关闭。

报告与输出选项

选项默认值说明
--format string(-f)table输出格式。允许值:table、json、template、sarif、cyclonedx、spdx、spdx-json、github、cosign-vuln
--report stringall合规报告输出形式,允许值all或summary。源码注释表明未来计划支持非合规报告的 summary 模式
--template string(-t)无自定义模板(模板文件路径必须以.tpl结尾),需与--format template搭配。仓库内建模板示例见 contrib/html.tpl、contrib/junit.tpl、contrib/sarif.tpl 等
--table-mode stringssummary,detailed实验性选项:控制table格式中显示哪些表格,允许值summary、detailed。注意源码中若与--format table之外的格式混用会直接报错
--output string(-o)无将结果写入文件而非 stdout
--output-plugin-arg string无实验性:传给输出插件的参数
--exit-code int0当发现安全问题且其严重度命中--severity过滤时,进程退出码设为该值(CI 中断门使用)
--compliance string无生成指定合规报告的扫描结果,例如--compliance=cis-v1.5之类内置规范,或@/path/to/spec.yaml自定义规范;更多见 docs/guide/compliance/compliance.md

关于模板的取舍,源码 pkg/flag/report_flags.go#L220-L236 内置了校验逻辑:当指定--template但格式不是template时打印告警并忽略模板;反之若--format template而未指定模板同样告警。

缓存相关选项

trivy config的命令级默认缓存后端被改为memory(见 pkg/commands/app.go#L706-L707),因此在单次调用中默认不做磁盘缓存。

选项默认值说明
--cache-backend stringmemory(该命令级覆盖)实验性:缓存后端。例如redis://localhost:6379。注意通用 flag 定义默认值在 pkg/flag/cache_flags.go#L25-L30 中为fs,此处被 config 命令覆盖为memory
--cache-ttl duration无使用 Redis 作为缓存后端时的缓存 TTL
--redis-tlsfalse使用 Redis 缓存后端时启用 TLS(基于公共证书)
--redis-ca string无Redis CA 证书文件路径
--redis-cert string无Redis 客户端证书文件路径
--redis-key string无Redis 客户端私钥文件路径

模块与凭据选项

选项说明
--enable-modules strings实验性:启用的 WASM 模块名(需要扫描逻辑扩展时使用,插件体系参见 docs/guide/advanced/modules.md)
--module-dir stringWASM 模块目录,默认$HOME/.trivy/modules
--registry-token string私有镜像仓库访问令牌(当目标配置引用私有仓库资源时使用)
--username strings用户名,支持逗号分隔多个(安全起见生产环境建议用环境变量替代)
--password strings密码,支持逗号分隔多个;文档明确提示出于安全考虑应使用TRIVY_PASSWORD环境变量
--password-stdin从标准输入读取密码(不支持逗号分隔多个密码)
-h, --help显示 config 子命令帮助

从父命令继承的全局选项

这些选项对所有 Trivy 子命令通用,定义于 pkg/flag/global_flags.go:

选项默认值说明
-c, --config stringtrivy.yaml指定配置文件路径
--generate-default-configfalse将默认配置写入当前目录的trivy-default.yaml
-d, --debugfalse开启调试模式
-q, --quietfalse抑制进度条与日志输出
--timeout duration5m0s整体超时时间
--cache-dir string/path/to/cache缓存目录(示例占位路径,实际随平台而定)
--cacert string无PEM 格式 CA 证书路径
--insecurefalse允许不安全的服务器连接
-v, --versionfalse显示版本

典型用法示例

# 扫描当前目录下的 IaC/配置文件(Dockerfile、Terraform、K8s YAML 等自动识别) trivy config . # 只扫描指定类型的配置并只输出高危及以上 trivy config --misconfig-scanners terraform,kubernetes \ --severity HIGH,CRITICAL . # 以 JSON 输出并写入文件,供后续程序消费 trivy config --format json --output result.json ./infra # 在 CI 中作为质量门禁:发现问题即以退出码 1 结束 trivy config --exit-code 1 --severity HIGH,CRITICAL ./deploy # 渲染 Helm Chart 前先用自定义 values 试扫 trivy config --helm-values values-prod.yaml --helm-kube-version 1.28.0 ./chart # 加载自定义 Rego 检查与数据 trivy config --config-check ./policy --config-data ./data --check-namespaces user . # 跳过自动拉取 checks bundle(离线环境) trivy config --skip-check-update .

一次性扫描时,trivy config .默认不落盘缓存(--cache-backend memory);若在 CI 中反复扫描同一目录并希望加速,可显式改用磁盘/Redis 后端,例如--cache-backend redis://localhost:6379。

命令行选项与配置文件、环境变量的对应关系

trivy config的所有选项都可以沉淀到trivy.yaml(默认由-c指定)。源码中每个 flag 都带有ConfigName,例如:

  • --misconfig-scanners→misconfiguration.scanners
  • --helm-set→misconfiguration.helm.set
  • --tf-vars→misconfiguration.terraform.vars
  • --cf-params→misconfiguration.cloudformation.params
  • --config-check→rego.check
  • --rego-error-limit→rego.error-limit
  • --cache-backend→cache.backend
  • --severity→severity
  • --skip-dirs→scan.skip-dirs

参考 examples/trivy-conf/trivy.yaml 展示的写法,对应到 misconfig 场景的配置片段形如:

severity: - HIGH - CRITICAL exit-code: 1 misconfiguration: scanners: - terraform - kubernetes terraform: vars: - env.tfvars checks-bundle-repository: mirror.gcr.io/aquasecurity/trivy-checks:2 scan: skip-dirs: - .terraform rego: check: - policy namespaces: - user

此外,用户名/密码等敏感参数建议通过TRIVY_*环境变量注入(例如TRIVY_PASSWORD),避免在命令行与 CI 日志中明文泄露。通用配置机制的更多细节见 docs/guide/configuration/index.md。

背后执行流程:从命令到扫描

trivy config在源码层是一个"精简配置器 + 复用通用管线"的实现,理解它有助于预测命令行为:

  1. 组装 flag 组:NewConfigCommand仅组合全局、缓存、Misconf、Module、Registry、Rego、报告与(裁剪后的)扫描 flag 组,并将缓存后端默认值覆盖为memory(pkg/commands/app.go#L688-L722);
  2. 裁剪报告选项:禁用与本命令无关的--dependency-tree、--list-all-pkgs、--exit-on-eol、--show-suppressed(pkg/commands/app.go#L699-L704);
  3. 绑定与转换:通过configFlags.Bind(cmd)绑定 Cobra 标志,再由ToOptions汇总为统一的Options;
  4. 锁定扫描目标:RunE中把 OS 与语言分析器全部加入DisabledAnalyzers,把Scanners固定为MisconfigScanner(pkg/commands/app.go#L744-L748);
  5. 进入通用文件系统扫描:以TargetFilesystem调用artifact.Run,复用与trivy fs相同的分析、检测与报告流水线。

因此trivy config的结果结构与trivy fs --scanners misconfig一致,可无缝对接 SARIF、JUnit 等下游工具(模板见 contrib)。

与其他子命令及配套文档的关系

  • 本命令的父命令为 trivy(Unified security scanner);
  • 错误配置扫描的整体概念与检查规则见 docs/guide/scanner/misconfiguration/index.md;
  • 各配置类型(Dockerfile、Kubernetes、Terraform、CloudFormation、Helm、Ansible、Azure ARM 等)的检测细节见 docs/guide/scanner/misconfiguration/config/config.md;
  • 自定义 Rego 策略开发参见 docs/guide/scanner/misconfiguration/custom 与教程 docs/tutorials/misconfiguration/custom-checks.md;
  • 若同时需要扫描漏洞与密钥,应改用trivy fs/trivy repo并配合--scanners vuln,secret,misconfig。

小结

trivy config提供了一条聚焦 IaC 与配置文件的扫描路径:一条命令即可覆盖 Dockerfile、Terraform、CloudFormation、Kubernetes、Helm、Ansible、Azure ARM 等主流声明式配置,支持通过 Helm values/tfvars/CF 参数/Ansible 变量注入真实渲染上下文,并允许以 Rego 自定义规则与 JSON schema 扩展检测能力。结合--exit-code、--severity、--format sarif/json等选项,它可直接作为 IaC 上线前的自动化质量门禁;而其"禁用无关分析器、固定 misconfig 扫描器"的实现细节,也决定了它能保持输出聚焦、语义清晰的特点。

【免费下载链接】trivyFind vulnerabilities, misconfigurations, secrets, SBOM in containers, Kubernetes, code repositories, clouds and more项目地址: https://gitcode.com/GitHub_Trending/tr/trivy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询