导读:本期聚焦于徐致远创作的《如何用rekor-cli查询网络组件构建记录实现审计追踪》,敬请观看详情。在CI流水线里编译出的网络组件一旦分发到多台服务器,出了安全问题往往难以定位是哪次构建泄露的。rekor作为透明日志系统,把每次构建的元数据签名后写入不可篡改日志。通过rekor-cli工具,安全人员能直接根据组件哈希或签名证书检索对应条目,看清构建时间、触发用户与源码提交号。本文说明安装配置要点,演示如何过滤网络组件类型的条目,并把查询结果对接内部工单系统,让审计从被动翻日志变为主动追踪。

软件供应链攻击近年来频繁出现在网络组件的分发链条中,一个被篡改的镜像或依赖包可能悄无声息地进入生产环境。Rekor是Sigstore项目下的透明日志服务,它接收构建系统提交的签名元数据,并将记录永久留存。rekor-cli则是官方提供的命令行客户端,能够让我们在不依赖中心数据库的情况下,验证并检索每一次构建的证据。对于负责网络组件(如代理、网关、负载均衡模块)发布的团队来说,掌握这款工具意味着可以在几秒内回答“这个二进制是谁、在什么时候、基于哪次提交构建的”。

如何用rekor-cli查询网络组件构建记录实现审计追踪

rekor-cli的基础配置与日志结构解析

在开始查询之前,我们需要先让rekor-cli知道要对接哪一套透明日志实例。默认情况下,它指向公共的Rekor服务器,但在企业内网审计网络组件时,往往部署了私有化节点。通过环境变量REKOR_ADDR可以指定目标地址,例如export REKOR_ADDR=https://rekor.internal.corp。配置完成后,执行rekor-cli --version应正常返回客户端版本,这说明网络连通与证书信任链已就绪。

Rekor中的每一条日志都被称为一个“entry”,其结构包含全局索引、集成时间戳、以及被签名的透明日志证明(包括payload和签名)。对于网络组件构建,payload通常是in-toto物料清单或简易的构建声明,里面带有组件名称、版本、SHA256摘要。理解这个结构是写出精准查询条件的前提,因为rekor-cli的搜索参数实际上是在匹配这些嵌套字段。

很多团队误以为日志只能按UUID查,其实Rekor提供了丰富的索引类型。比如--sha可按工件哈希找记录,--email可按构建者身份找。在审计网络组件时,我们更关心--artifact--public-key的组合,这能确认某次出问题的二进制是否确实由受信任的私钥签名并入库。下面是一段配置与连通性测试的参考代码:

# 配置私有Rekor地址
export REKOR_ADDR=https://rekor.internal.corp

# 验证客户端可用
rekor-cli --version

# 搜索特定网络组件哈希
rekor-cli search --sha 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08

针对网络组件构建记录的精准查询实践

网络组件通常包括Nginx模块、Envoy过滤器、自研TCP代理等,它们的构建记录混杂在大量其他软件条目中。要提高查询效率,应当利用Rekor的索引扩展。以intoto类型为例,构建系统会在payload里写入subject数组,其中name字段常设为组件坐标。我们可以先用rekor-cli search --type intoto拿到大池子,再结合本地脚本过滤。但更直接的方式是使用--public-key限定仅显示由网络组件专用签名密钥提交的记录。

假设我们的网络组件构建流水线使用了一对专用Ed25519密钥,公钥已分发到审计机。执行以下命令即可列出该密钥签名的全部条目,输出中包含了条目的UUID与提交时间,审计人员能迅速圈定时间窗口。若进一步想知道某条记录里写了什么,用rekor-cli get --uuid <uuid>拉取完整JSON,里面能看到构建机的 hostname、CI 任务ID等上下文。

在真实排障中,我们曾遇到一个负载均衡组件在边缘节点表现异常。通过提取异常二进制的SHA256,运行下面指令,立即定位到是某次热修复构建,且签名者邮箱属于已离职员工账户,从而触发密钥轮换流程。这种从“现象”到“构建源头”的逆向追踪,正是rekor-cli的核心价值。

# 使用网络组件公钥过滤构建记录
rekor-cli search --type intoto --public-key ./netcomp_pub.pem

# 获取某条记录详情
rekor-cli get --uuid 5a1b2c3d4e5f6789

# 验证本地二进制与日志声明一致
rekor-cli verify --artifact ./lb-agent --signature ./lb-agent.sig --public-key ./netcomp_pub.pem

将查询结果接入审计追踪与告警系统

单靠人工执行命令无法覆盖持续交付节奏,因此要把rekor-cli封装进审计脚本。一种常见做法是用crontab定时调用搜索接口,把新增的网络组件条目写入内部PostgreSQL,同时比对CMDB里的资产清单。若发现某组件的构建者不在白名单,就自动生成工单。这种机制让审计从“出事翻账”变成“持续盯防”。

在代码层面,我们可以用Python的子进程模块包装rekor-cli,解析其JSON输出。注意rekor-cli的get命令支持--format json,这比正则截取文本更稳定。下方示例展示了如何拉取最近一小时条目并做基础判断。实践中还应加上指数退避重试,因为私有Rekor节点在高峰时可能返回503。

除了存储,可视化也关键。不少团队把审计数据接进Grafana,画出每日网络组件构建量、签名密钥分布。当某个密钥突然签发大量非常规组件时,面板会变红。这种基于rekor-cli提取的真相数据建立的追踪体系,比单纯扫描运行中的进程更早发现问题,真正实现了供应链可追溯。

import subprocess, json, datetime

def fetch_recent_netcomp():
    cmd = ["rekor-cli", "search", "--type", "intoto",
           "--public-key", "./netcomp_pub.pem", "--format", "json"]
    out = subprocess.check_output(cmd)
    entries = json.loads(out)
    now = datetime.datetime.utcnow()
    for e in entries:
        # 假设e含集成时间字段
        if now - parse_time(e["integratedTime"]) < datetime.timedelta(hours=1):
            yield e["uuid"]

for uid in fetch_recent_netcomp():
    print("需要审计的构建:", uid)

通过上述配置、查询与系统化接入三步,网络组件构建记录不再是一堆难以关联的日志,而成了可检索、可验证、可告警的审计资产。当安全事件发生时,团队能用rekor-cli在分钟级给出构建溯源报告,大幅缩减处置时间。

rekor-cli软件供应链审计构建记录查询修改时间:2026-08-17 00:16:15

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。