容器技术重塑了整个软件供应链。容器镜像将应用及其所依赖项打包,从而使应用可以在不同的计算环境之间快速、可靠地运行。容器镜像已经成为了应用分发的标准。镜像供应链安全应支持:
签名私钥:对接统一密钥管理系统或使用自签秘钥工具。
镜像签名:在镜像构建后使用私钥对镜像进行签名,并将镜像签名数据传递到容器镜像仓库。
镜像验签:当工作负载在集群内进行部署时,kubernetes回调验签插件,验签插件对工作负载所使用的镜像所对应的签名文件进行验证,验签通过后才能创建实例。
实现方案
用户提供密钥对,使用私钥对镜像进行镜像签名,公钥在部署应用时进行镜像验签
用户选择镜像仓库中已有镜像,选择对镜像进行签名;
签名后镜像连同签名提交到镜像仓库中;
用户在容器集群上创建工作负载,请求传递给Kubernetes;
Kubernetes中的kube-apiserver接收到请求并进行认证鉴权后,校验请求参数,当请求参数合法时调用验签控制器;
验签控制器根据创建工作负载时指定的镜像url以及镜像拉取secret,从镜像仓库获取镜像digest,并通过镜像digest获取镜像的签名数据;
使用签名数据和签名公钥信息进行验签,并返回验签结果;
验签控制器根据验签结果,确认拒绝或者接受工作负载的创建;
当前通过验签后pod正常创建,工作负载实例正常被kubelet拉起;