本文发表时间已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变为不正确。
Kubernetes 1.26:我们现在正在签署二进制发布工件!
Kubernetes 特别兴趣小组(SIG)发布很高兴地宣布,我们正在对所有发布工件进行数字签名,并且 Kubernetes 的这一方面现在已达到测试版。
签名工件为最终用户提供了验证下载资源完整性的机会。它允许直接在客户端缓解中间人攻击,从而确保远程服务工件的可信度。我们过去工作的总体目标是定义用于签署所有 Kubernetes 相关工件的工具,并为相关项目(例如kubernetes-sigs中的项目)提供标准的签名流程。
我们已经签署了所有官方发布的容器镜像(从 Kubernetes v1.24 开始)。镜像签名在 v1.24 和 v1.25 中为 alpha 版。对于 v1.26,我们还将所有二进制工件添加到签名过程中!这意味着现在所有的 客户端、服务器和源 tarball、二进制工件、软件物料清单 (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 频道与我们联系。