前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Harbor v2.5远程复制:制品的签名如影随形

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

作者头像
Henry Zhang
发布2023-04-04 08:40:50
3900
发布2023-04-04 08:40:50
举报
文章被收录于专栏:亨利笔记

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

(本文根据 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]

代码语言:javascript
复制
# ./install.sh --with-notary --with-trivy

[Step 0]: checking if docker is installed ...
...
...
...
[Step 5]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating network "harbor_harbor-notary" with the default driver
Creating network "harbor_notary-sig" with the default driver
Creating harbor-log ... done
Creating harbor-portal ... done
Creating redis         ... done
Creating registryctl   ... done
Creating registry      ... done
Creating harbor-db     ... done
Creating trivy-adapter ... done
Creating notary-signer     ... done
Creating harbor-core   ... done
Creating harbor-jobservice ... done
Creating nginx             ... done
Creating notary-server     ... done
✔ ----Harbor has been installed and started successfully.----

2. 创建新项目“cosign”

在项目中启用 cosign:

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

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

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

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

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

设置新的目标 Harbor 实例:

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

7. 创建 cosign 密钥对

为了能够执行以下步骤,需要安装“cosign”。见安装说明[9]

$ cosign generate-key-pair Enter password for private key: Enter again: Private key written to cosign.key Public key written to cosign.pub

你可以导出密钥的密码( 也称为 pass-phrase ),以便在自动化中使用:

代码语言:javascript
复制
export COSIGN_PASSWORD=Your_Super_P1$$w0rD

8. 镜像推送和签名

使用你的 cosign-demo 用户登录第一个 Harbor 实例。

代码语言:javascript
复制
$ docker login harbor1.orlix.org
Authenticating with existing credentials...
Login Succeeded

然后将镜像推送到你已经设置好的 cosign 项目,下面的例子使用了镜像 pause:1。

代码语言:javascript
复制
$ docker push harbor1.orlix.org/cosign/pause:1
The push refers to repository [harbor1.orlix.org/cosign/pause]
5f70bf18a086: Layer already exists
e16a89738269: Layer already exists
1: digest: sha256:b31bfb4d0213f254d361e0079deaaebefa4f82ba7aa76ef82e90b4935ad5b105 size: 938

一旦我们在Harbor中有了可用的镜像,我们就可以用 cosign 来做镜像签名。

代码语言:javascript
复制
$ cosign sign --key cosign.key harbor1.orlix.org/cosign/pause:1
Enter password for private key:
Pushing signature to: harbor1.orlix.org/cosign/pause

9. 触发复制并验证结果

验证复制结果:

在 Harbor1 实例上触发复制规则 harbor1->harbor2 之后,我们可以看到该镜像在两个 Harbor 实例中都有 Cosign 签名,可通过运行命令 cosign verify 验证签名。

代码语言:javascript
复制
$ 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 ),以免错过更新。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 亨利笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 功能设置示例
    • 1. 安装两个启用了 cosign(和 notary)Harbor的实例
      • 2. 创建新项目“cosign”
        • 3. 创建新用户“cosign-demo ”,并将其分配给项目“cosign”
          • 4. 在第二个实例上创建项目“cosign”
            • 5. 在第二个实例上创建机器人帐户[7]“robot$cosign”
              • 6. 在第一个 Harbor 实例上设置复制[8]
                • 7. 创建 cosign 密钥对
                  • 8. 镜像推送和签名
                    • 9. 触发复制并验证结果
                    • 欢迎与 Harbor 社区合作!
                    相关产品与服务
                    容器服务
                    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档