如何正确配置Trivy的密钥检测功能?
Trivy密钥检测配置解析与正则调整方案
现有配置字段解析
先给你拆解当前配置里每个字段的作用:
rules:自定义密钥检测规则的集合,每个子项是一条独立规则id:规则的唯一标识,随便起名但要唯一category:规则分类,比如general就是通用类title:规则的名称,用来快速知道这条规则是干啥的severity:风险级别,比如HIGH表示高风险regex:核心的检测正则,用来匹配密钥的格式secret-group-name:指定正则里捕获密钥内容的分组名称,对应正则里的(?P<secret>...)
disable-allow-rules:禁用Trivy默认的误报排除规则,比如markdown、tests这些场景下的内容会被默认忽略,这里关掉后就会检测这些场景
当前配置的问题
你的正则里(?P<key>(secret))只限定了匹配secret这一个关键词,而且强制要求密钥被单/双引号包裹,所以PAT、API_KEY这类关键词,以及不带引号的密钥都检测不到。
修改后的完整配置
rules: - id: generic-key-detection category: general title: Generic API Key/Secret Detection severity: HIGH regex: (?i)(?P<key>(secret|pat|api_key|token|api_token|password))(=|:).{0,5}['"]?(?P<secret>[0-9a-zA-Z\-_=]{8,64})['"]? secret-group-name: secret disable-allow-rules: - markdown - tests
正则调整细节
- 扩展关键词范围:把原来的
(secret)改成(secret|pat|api_key|token|api_token|password),用|分隔所有你需要检测的关键词,开头的(?i)开启了不区分大小写模式,所以API_KEY和api_key都能匹配到 - 兼容无引号密钥:把原来的
['"]改成['"]?,?表示该字符可选,这样既匹配带引号的(比如secret="somevalue"),也匹配不带引号的(比如PAT=1234sw223esaa) - 保留核心匹配逻辑:
(=|:):匹配关键词后的分隔符(等于号或冒号).{0,5}:允许分隔符和密钥之间最多有5个任意字符(比如空格、制表符)(?P<secret>[0-9a-zA-Z\-_=]{8,64}):捕获长度在8-64之间的密钥内容,这是常见密钥的长度范围,如果需要检测更短的密钥,把{8,64}改成{3,64}这类你需要的范围就行
匹配效果验证
修改后的规则能检测你提供的所有目标条目:
- 原有的
secret="somevalue"、secret="othervalue" password: "123456789"这类带冒号和引号的密码PAT=1234sw223esaa、API_KEY=1234sw223esaa这类不带引号的API密钥- 注意:
TOKEN=21313和API_TOKEN=12因为密钥长度不足8位,所以不会被检测到,调整正则里的长度范围就能解决
内容的提问来源于stack exchange,提问作者Bennimi
相关产品推荐
相关产品推荐

