写点什么

Harbor v2.5 远程复制:制品的签名如影随形

作者:亨利笔记
  • 2022 年 5 月 04 日
  • 本文字数:3316 字

    阅读完需:约 11 分钟


题图摄于美国加州蒙特雷港


​(本文根据 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)作为认证身份。


  1. 安装两个启用了 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:


  1. 创建新用户“cosign-demo ”,并将其分配给项目“cosign”

  2. 在第二个实例上创建项目“cosign”

  3. 在第二个实例上创建机器人帐户[7]“robot$cosign”


保存机器人账号的认证凭证,将在配置远程复制的时候使用:


  1. 在第一个 Harbor 实例上设置复制[8]


设置新的目标 Harbor 实例:


设置从 Harbor1->Harbor2 的复制规则:


  1. 创建 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 ),以免错过更新。

发布于: 刚刚阅读数: 5
用户头像

亨利笔记

关注

自由自在 网际穿行 2020.04.25 加入

公众号:亨利笔记。作者是执着计算机技术爱好者。中国首个CNCF开源项目Harbor镜像仓库创始人。联邦学习FATE开源项目TSC成员。《Harbor权威指南》《区块链技术指南》作者之一。关注云原生、人工智能和区块链等领域。

评论

发布
暂无评论
Harbor v2.5远程复制:制品的签名如影随形_亨利笔记_InfoQ写作社区