cosign 镜像签名工具
🧪

cosign 镜像签名工具

 

起因

我最近在搞 ACS (ADVANCED CLUSTER SECURITY FOR KUBERNETES),其中有一个功能是验证镜像签名。
notion image
 

它是个什么?

Cosign 是一个用于签名和验证容器镜像的工具,它允许用户对镜像进行数字签名,并验证签名以确保镜像的完整性和来源。通过使用 Cosign,你可以创建和管理镜像的签名,并在部署时验证这些签名,以确保镜像的安全性。

如何使用?

一、安装程序

  • 我使用的是下载 rpm 包(自行找合适自己的安装方式)
wget https://github.com/sigstore/cosign/releases/download/v2.2.2/cosign-2.2.2-1.x86_64.rpm
  • 安装
rpm -ivh cosign-2.2.2-1.x86_64.rpm
notion image

二、验证程序

查看版本
notion image

三、生成 key

cosign generate-key-pair
notion image
其中的
  • cosign.key 是私钥
  • cosign.pub 是公钥
注意:输入保护key 密码时,我直接回车了,这里如果有需要的话可以设置。后续上传镜像前面时会用到。

四、使用 cosign 登录镜像注册中心(docker.io 或者私有仓库)

cosign sign --key cosign.key docker.io/ljtian/http-server-gen:v0.2
notion image
注意1:上面有个告警,有需要的人可以仔细看一下,演示可以跳过
注意2:下面报错为未授权登录,我看网上其他文章都没有对这个描述,也没有介绍。我以为是常见podman login、 docker login。 重新进行了 podman login 登录,发现并没有解决。执行 cosign help 发现 cosign 是自己上传的,并不是通过 podman 或者 docker 这类工具上传。所以需要执行登录操作。登录成功之后再执行上面的命令
cosign login domain.com -u **** -p ****
notion image
目前做的很粗糙只能通过 -u -p 执行,不能交互方式执行。

五、生成签名文件并进行上传

cosign sign --key cosign.key docker.io/ljtian/http-server-gen:v0.2
notion image
去镜像注册中心查看
notion image
可以看到上传了一个 .sig 签名镜像
注意:红框对应的值与进行签名的镜像sha256值是一致的,所以,签名跟这个值一一对应,并不是标签 v0.2。 如果我现在再推送一个新的v0.2标签。新的 v0.2 将是未签名的镜像。这也是前面警告所描述的信息。

六、验证签名

cosign verify --key cosign.pub index.docker.io/ljtian/http-server-gen:v0.2 | jq .
notion image
签名没有问题。

资源来源