本文发布时间已超过一年。较旧的文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不准确。
Kubernetes 1.26:我们现在签署二进制发布工件!
Kubernetes 特别兴趣小组 (SIG) Release 自豪地宣布,我们已对所有发布工件进行数字签名,并且 Kubernetes 的这一方面现已达到 beta 阶段。
对工件签名让最终用户有机会验证下载资源的完整性。它允许直接在客户端缓解中间人攻击,从而确保远程服务工件的可信度。我们过去工作的总体目标是定义用于签署所有 Kubernetes 相关工件的工具,以及为相关项目(例如 kubernetes-sigs 中的项目)提供标准签名流程。
我们已经签署了所有官方发布的容器镜像(从 Kubernetes v1.24 及更高版本开始)。镜像签名在 v1.24 和 v1.25 中处于 alpha 阶段。对于 v1.26,我们还将所有二进制工件添加到签名过程中!这意味着现在所有 客户端、服务器和源 tar 包、二进制工件、软件物料清单 (SBOM) 以及 构建出处 都将使用 cosign 进行签名。从技术上讲,我们现在随工件一起提供了额外的 *.sig
(签名)和 *.cert
(证书)文件,用于验证它们的完整性。
要验证工件,例如 kubectl
,你可以下载签名和证书以及二进制文件。我使用 v1.26 的候选版本 rc.1
进行演示,因为最终版本尚未发布
curl -sSfL https://dl.k8s.io/release/v1.26.0-rc.1/bin/linux/amd64/kubectl -o kubectl
curl -sSfL https://dl.k8s.io/release/v1.26.0-rc.1/bin/linux/amd64/kubectl.sig -o kubectl.sig
curl -sSfL https://dl.k8s.io/release/v1.26.0-rc.1/bin/linux/amd64/kubectl.cert -o kubectl.cert
然后你可以使用 cosign
验证 kubectl
COSIGN_EXPERIMENTAL=1 cosign verify-blob kubectl --signature kubectl.sig --certificate kubectl.cert
tlog entry verified with uuid: 5d54b39222e3fa9a21bcb0badd8aac939b4b0d1d9085b37f1f10b18a8cd24657 index: 8173886
Verified OK
可以使用 UUID 查询 rekor 透明日志
rekor-cli get --uuid 5d54b39222e3fa9a21bcb0badd8aac939b4b0d1d9085b37f1f10b18a8cd24657
LogID: c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d
Index: 8173886
IntegratedTime: 2022-11-30T18:59:07Z
UUID: 24296fb24b8ad77a5d54b39222e3fa9a21bcb0badd8aac939b4b0d1d9085b37f1f10b18a8cd24657
Body: {
"HashedRekordObj": {
"data": {
"hash": {
"algorithm": "sha256",
"value": "982dfe7eb5c27120de6262d30fa3e8029bc1da9e632ce70570e9c921d2851fc2"
}
},
"signature": {
"content": "MEQCIH0e1/0svxMoLzjeyhAaLFSHy5ZaYy0/2iQl2t3E0Pj4AiBsWmwjfLzrVyp9/v1sy70Q+FHE8miauOOVkAW2lTYVug==",
"publicKey": {
"content": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN2akNDQWthZ0F3SUJBZ0lVRldab0pLSUlFWkp3LzdsRkFrSVE2SHBQdi93d0NnWUlLb1pJemowRUF3TXcKTnpFVk1CTUdBMVVFQ2hNTWMybG5jM1J2Y21VdVpHVjJNUjR3SEFZRFZRUURFeFZ6YVdkemRHOXlaUzFwYm5SbApjbTFsWkdsaGRHVXdIaGNOTWpJeE1UTXdNVGcxT1RBMldoY05Nakl4TVRNd01Ua3dPVEEyV2pBQU1Ga3dFd1lICktvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVDT3h5OXBwTFZzcVFPdHJ6RFgveTRtTHZSeU1scW9sTzBrS0EKTlJDM3U3bjMreHorYkhvWVkvMUNNRHpJQjBhRTA3NkR4ZWVaSkhVaWFjUXU4a0dDNktPQ0FXVXdnZ0ZoTUE0RwpBMVVkRHdFQi93UUVBd0lIZ0RBVEJnTlZIU1VFRERBS0JnZ3JCZ0VGQlFjREF6QWRCZ05WSFE0RUZnUVV5SmwxCkNlLzIzNGJmREJZQ2NzbXkreG5qdnpjd0h3WURWUjBqQkJnd0ZvQVUzOVBwejFZa0VaYjVxTmpwS0ZXaXhpNFkKWkQ4d1FnWURWUjBSQVFIL0JEZ3dOb0UwYTNKbGJDMXpkR0ZuYVc1blFHczRjeTF5Wld4bGJtY3RjSEp2WkM1cApZVzB1WjNObGNuWnBZMlZoWTJOdmRXNTBMbU52YlRBcEJnb3JCZ0VFQVlPL01BRUJCQnRvZEhSd2N6b3ZMMkZqClkyOTFiblJ6TG1kdmIyZHNaUzVqYjIwd2dZb0dDaXNHQVFRQjFua0NCQUlFZkFSNkFIZ0FkZ0RkUFRCcXhzY1IKTW1NWkhoeVpaemNDb2twZXVONDhyZitIaW5LQUx5bnVqZ0FBQVlUSjZDdlJBQUFFQXdCSE1FVUNJRXI4T1NIUQp5a25jRFZpNEJySklXMFJHS0pqNkQyTXFGdkFMb0I5SmNycXlBaUVBNW4xZ283cmQ2U3ZVeXNxeldhMUdudGZKCllTQnVTZHF1akVySFlMQTUrZTR3Q2dZSUtvWkl6ajBFQXdNRFpnQXdZd0l2Tlhub3pyS0pWVWFESTFiNUlqa1oKUWJJbDhvcmlMQ1M4MFJhcUlBSlJhRHNCNTFUeU9iYTdWcGVYdThuTHNjVUNNREU4ZmpPZzBBc3ZzSXp2azNRUQo0c3RCTkQrdTRVV1UrcjhYY0VxS0YwNGJjTFQwWEcyOHZGQjRCT2x6R204K093PT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo="
}
}
}
}
HashedRekordObj.signature.content
应与文件 kubectl.sig
的内容匹配,HashedRekordObj.signature.publicKey.content
应与 kubectl.cert
的内容相同。也可以在不下载证书和签名的情况下指定远程位置
COSIGN_EXPERIMENTAL=1 cosign verify-blob kubectl \
--signature https://dl.k8s.io/release/v1.26.0-rc.1/bin/linux/amd64/kubectl.sig \
--certificate https://dl.k8s.io/release/v1.26.0-rc.1/bin/linux/amd64/kubectl.cert
tlog entry verified with uuid: 5d54b39222e3fa9a21bcb0badd8aac939b4b0d1d9085b37f1f10b18a8cd24657 index: 8173886
Verified OK
上述所有步骤以及如何验证容器镜像都详述在关于如何验证已签名的 Kubernetes 工件的官方文档中。在接下来即将发布的某个 Kubernetes 版本中,我们将努力使总体情况更加成熟,确保所有 Kubernetes 工件都已签名。除此之外,我们正在考虑使用 Kubernetes 自有的基础设施进行签名(根信任)和验证(透明日志)过程。
参与其中
如果你有兴趣为 SIG Release 做出贡献,可以考虑申请即将到来的 v1.27 影子计划(关注 k-dev 上的公告)或加入我们的每周会议打个招呼。
我们期待在未来的 Kubernetes 版本中做出更多出色的改变。例如,我们正在努力实现 Kubernetes 发布流程中的 SLSA Level 3 合规性或 将 kubernetes/kubernetes 默认分支名称重命名为 main
。
感谢您阅读这篇博文!我想借此机会特别感谢所有参与的 SIG Release 人员及时交付此功能!
欢迎通过 SIG Release 邮件列表或 #sig-release Slack 频道与我们联系。