Skip to main content

Command Palette

Search for a command to run...

在 Kubernetes 环境中检查镜像签名的一种方法

Updated
1 min read

Kubernetes 的供应链安全需求中,有一个重要的镜像签署和校验的环节,这个环节可以使用 OPA 结合 Notary 的方式来完成。最近 Linux基金会宣布免费 sigstore 签名服务,以确认软件的来源和真实性,在项目网站闲逛时,发现一个叫做 cosign 的子项目,这是个轻量级的选择,让我非常有兴趣,于是就有了本文。

部署

目前这个工具还没有提供二进制发布,需要克隆源代码,并使用 go 1.5 进行构建,具体方法请参阅项目页面。简单说就是

# git clone https://github.com/sigstore/cosign.git
...
# cd cosign
# go build -o cosign ./cmd/cosign
...

这个工具的最基础功能有三个,分别是生成密钥对、镜像签名和校验签名。

生成密钥对

这个功能是很直白的:

cosign generate-key-pair
Enter password for private key:
Enter again:
Private key written to cosign.key
Public key written to cosign.pub

执行命令之后,输入密码,就会生成密钥对文件,私钥和公钥分别是 consign.keycosign.pub

签名

可以使用前边生成的密钥对进行签名,例如我的工具镜像:

cosign sign -key cosign.key dustise/sleep:v0.9.6
Enter password for private key:
Pushing signature to: index.docker.io/dustise/sleep:sha256-92dad62e00d08157a3921b7d7b568a247a8b24e8a067ad5dc20b210d7b1c2ad1.cosign

读者需要注意的一点是,这个功能是对仓库中镜像的哈希码生效的,因此签署过程无需本地镜像的参与,cosign 会直接在镜像仓库中获取对应 tag 的 sha256 内容,签署之后生成一个 OCI 镜像推送到该镜像的原有仓库之中,例如前面为 dustise/sleep:v0.9.6 进行签名,就生成了一个 dustise/sleep:sha256-92da.....1c2ad1.cosign 的镜像。如果被签名镜像在本地不存在,在完成操作之后,使用 docker images 命令查看,会发现被签署镜像和签署生成的镜像都不存在于本地。

另外一个就是,因为这里有 Push 操作,因此这个签署过程通常是有登录镜像库的需求的。

校验

校验过程很简单,使用 verify 指令,指定公钥即可,例如:

cosign verify  -key cosign.pub dustise/sleep:v0.9.6
The following checks were performed on each of these signatures:
  - The cosign claims were validated
  - The signatures were verified against the specified public key
  - Any certificates were verified against the Fulcio roots.
...

注意

如果使用 cosign 来进行签署,过程基本上来说还算是愉快的,私钥放置在 CI 之中,而公钥则可以保存在集群里,简单一点的方式,使用客户端定期扫描;复杂的方式,可以实现一个简单的 admission controller 来根据 Selector 对负载进行校验,同样需要注意的是,cosign 只针对远程(镜像库)进行操作,对本地的同 Tag 替换是没什么防御力的,因此这里还要使用 Always Pull 的策略进行弥补(可以使用 Kyverno 或者 Gatekeeper 来强制实施)。

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