Harbor v2.5 远程复制:制品的签名如影随形
题图摄于美国加州蒙特雷港
(本文根据 Harbor 社区经理 Orlin Vasilev 的英文博客改编,感谢 CNCF 公众号的初始翻译和 Harbor 维护者团队提供的测试环境。)
相关信息:招聘 Harbor 开发工程师招聘云原生工程师(参见另一篇)
经过社区维护者们的通力合作,Harbor v2.5 于上周发布了,新版本为用户们带来了如下几个重要的新特性。
Cosign 签名的引入,使得制品(镜像等)复制时签名可以同步复制。提高了并发拉取请求的性能。改进了垃圾回收功能的容错性,当删除某个制品(Artifact)发生错误时,可继续删除其他制品。复制中可跳过在代理缓存项目中的制品。激活 Distribtion purging 功能,可以删除 upload 目录中的孤立文件。使用 Golang v1.17.7 构建的。使用 Distribution v2.8.0 和 Trivy v0.22.0。
本篇着重给大家介绍一下的是 Cosign, 它是 Harbor 2.5 重要功能。
在 Harbor 制品(Artifact)仓库中,制品的签名和签名验证是关键的安全功能之一,可帮助用户检查制品的完整性。Harbor 2.5 通过与另外两个开源项目 Notary[1] 和 Cosign[2] 的集成,支持了内容信任,其中 Cosign 是新增的功能。
Cosign 是一个 OCI 制品签名和验证解决方案,是 Sigstore 开源项目[3] 的一部分。
用 Cosign 对 OCI 制品签名后,可将生成的签名推入(push)到 Harbor 中。这个签名作为制品的附件(accessory)和该制品一起存储。Harbor 管理和维护已签名制品和 cosign 签名之间的联系,在 Tag 保留规则(tag retention rules)和不可变规则(immutable rules)等功能中,Harbor 的内置功能自动维护制品和签名之间的对应关系。
将 Cosign 与 Harbor 结合使用解决了之前一个悬而未决的问题:镜像等制品在远程复制中,其签名信息无法被复制到目标端。现在,当用户通过复制规则(replication rule)把已签名制品复制到远端时,Harbor 把签名信息也同步复制到了远端,使得远端的制品具有同样的签名。
你可以参阅完整文档[5]了解更多。
功能设置示例
两个 Harbor v2.5 实例缺省对每个仓库项目启用了 Cosign 的设置。通过配置两个 Harbor 实例的复制规则,我们在两个实例 harbor1 和 harbor2 中的项目“cosign”之间建立基于推送的复制规则(从 harbor1 到 harbor2),使用机器人帐户(robot-account)作为认证身份。
安装两个启用了 cosign(和 notary)Harbor 的实例
我们使用 Harbor 的离线安装程序[6]。
./install.sh --with-notary --with-trivy
[Step 0]: checking if docker is installed ............[Step 5]: starting Harbor ...Creating network "harbor_harbor" with the default driverCreating network "harbor_harbor-notary" with the default driverCreating network "harbor_notary-sig" with the default driverCreating harbor-log ... doneCreating harbor-portal ... doneCreating redis ... doneCreating registryctl ... doneCreating registry ... doneCreating harbor-db ... doneCreating trivy-adapter ... doneCreating notary-signer ... doneCreating harbor-core ... doneCreating harbor-jobservice ... doneCreating nginx ... doneCreating notary-server ... done✔ ----Harbor has been installed and started successfully.----2. 创建新项目“cosign”
在项目中启用 cosign:
创建新用户“cosign-demo ”,并将其分配给项目“cosign”
在第二个实例上创建项目“cosign”
在第二个实例上创建机器人帐户[7]“robot$cosign”
保存机器人账号的认证凭证,将在配置远程复制的时候使用:
在第一个 Harbor 实例上设置复制[8]
设置新的目标 Harbor 实例:
设置从 Harbor1->Harbor2 的复制规则:
创建 cosign 密钥对
为了能够执行以下步骤,需要安装“cosign”。见安装说明[9]。$w0rD8. 镜像推送和签名
使用你的 cosign-demo 用户登录第一个 Harbor 实例。 docker push harbor1.orlix.org/cosign/pause:1The push refers to repository [harbor1.orlix.org/cosign/pause]5f70bf18a086: Layer already existse16a89738269: Layer already exists1: digest: sha256:b31bfb4d0213f254d361e0079deaaebefa4f82ba7aa76ef82e90b4935ad5b105 size: 938 一旦我们在 Harbor 中有了可用的镜像,我们就可以用 cosign 来做镜像签名。$ cosign sign --key cosign.key harbor1.orlix.org/cosign/pause:1Enter password for private key:Pushing signature to: harbor1.orlix.org/cosign/pause9. 触发复制并验证结果
验证复制结果:
在 Harbor1 实例上触发复制规则 harbor1->harbor2 之后,我们可以看到该镜像在两个 Harbor 实例中都有 Cosign 签名,可通过运行命令 cosign verify 验证签名。$ cosign verify --key cosign.pub harbor1.orlix.org/cosign/pause:1 | jq .
Verification for harbor1.orlix.org/cosign/pause:1 --The following checks were performed on each of these signatures:
The cosign claims were validated
The signatures were verified against the specified public key[{"critical": {"identity": {"docker-reference": "harbor1.orlix.org/cosign/pause"},"image": {"docker-manifest-digest": "sha256:b31bfb4d0213f254d361e0079deaaebefa4f82ba7aa76ef82e90b4935ad5b105"},"type": "cosign container image signature"},"optional": null}]
$ cosign verify --key cosign.pub harbor2.orlix.org/cosign/pause:1 | jq .
Verification for harbor2.orlix.org/cosign/pause:1 --The following checks were performed on each of these signatures:
The cosign claims were validated
The signatures were verified against the specified public key[{"critical": {"identity": {"docker-reference": "harbor1.orlix.org/cosign/pause"},"image": {"docker-manifest-digest": "sha256:b31bfb4d0213f254d361e0079deaaebefa4f82ba7aa76ef82e90b4935ad5b105"},"type": "cosign container image signature"},"optional": null}验证返回结果和退出代码为零,表明签名有效!摘要(digest)值也相同!这样,Cosign 功能配置成功了!
欢迎大家使用 cosign 功能,并通过以下方式反馈给我们建议。欢迎与 Harbor 社区合作!
加入 Harbor 社区[10]会议和电邮列表通过 @project_harbor[11]在 Twitter 上获取更新在 CNCF Slack[12]的 #harbor 频道与我们聊天在 Github[13]上与我们合作关注 Harbor 社区[14]公众号,加入 Harbor 微信群参考资料
[1] Notary: https://github.com/notaryproject/notary[2] Cosign: https://github.com/sigstore/cosign[3] Sigstore 项目: https://github.com/sigstore[4] 复制功能: https://goharbor.io/docs/2.5.0/administration/configuring-replication/[5] 完整文档: https://goharbor.io/docs/2.5.0/working-with-projects/working-with-images/sign-images/[6] 离线安装程序: https://goharbor.io/docs/2.5.0/install-config/download-installer/[7] 创建机器人帐户: https://goharbor.io/docs/2.5.0/administration/robot-accounts/[8] 设置复制: https://goharbor.io/docs/2.5.0/administration/configuring-replication/[9] 安装说明: https://docs.sigstore.dev/cosign/installation/[10] Harbor 社区: https://goharbor.io/community/[11] @project_harbor: https://twitter.com/project_harbor[12] CNCF Slack: https://slack.cncf.io/[13] Github: https://github.com/goharbor/harbor[14] Harbor 社区公众号:名称:Harbor 社区 微信 ID:HarborChina
要想了解云原生、机器学习和区块链等技术原理,请立即长按以下二维码,关注本公众号亨利笔记 ( henglibiji ),以免错过更新。
版权声明: 本文为 InfoQ 作者【亨利笔记】的原创文章。
原文链接:【http://xie.infoq.cn/article/770b7e2c1ec6d41371678d0a7】。文章转载请联系作者。
评论