前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Harbor v2.5.0引入Cosign

Harbor v2.5.0引入Cosign

作者头像
CNCF
发布2022-04-19 09:48:52
1.5K0
发布2022-04-19 09:48:52
举报
文章被收录于专栏:CNCF

作者:Orlin Vasilev

长话短说(TL;DR;)

成品(Artifact)签名和签名验证是关键的安全功能,允许你验证成品的完整性。Harbor 通过与Notary[1]Cosign[2]的集成支持内容信任。

Harbor v2.5 集成了对 Cosign 的支持,这是一个 OCI 成品签名和验证解决方案,是Sigstore 项目[3]的一部分。

Cosign 对 OCI 成品签名,并将生成的签名推入 Harbor。这个签名作为一个成品附件跟已签名成品一起存储。Harbor 管理已签名成品和 cosign 签名之间的链接,允许你将诸如标记保留规则(tag retention rules)和不可变规则(immutable rules)之类的东西应用于已签名成品,并且它将扩展到已签名成品和签名。通过这种方式,你可以使用 Harbor 的内置功能来管理已签名成品和 cosign 签名附件。

将 Cosign 与 Harbor 结合使用的一个关键特性是能够使用 Harbor 的复制功能[4]来复制签名及其相关的已签名成品。这意味着,如果一个复制规则(replication rule)应用于一个已签名成品,Harbor 将把复制规则应用于签名,就像它应用于已签名成品一样。

  • 当在 Harbor 实例之间复制时,目标 Harbor 实例将维护已签名成品及其相关签名之间的链接。你将能够在目标 Harbor 界面中看到两个成品之间的关系,就像你在源注册中心中看到的一样。

你可以参阅完整文档[5]了解更多。

演示设置

配置两个启用了 Cosign 的 Harbor 实例,设置项目仓库(在 v2.5.0 中为默认值),并配置复制。我们将有两个实例 harbor1 和 harbor2,项目“cosign”和 harbor1 到 harbor2 之间的复制规则(基于推送),使用机器人帐户(robo-account)。

1. 安装两个启用了 cosign(和 notary)的实例

在我们的设置中,我们使用离线安装程序[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]“robo-cosign”

保存机器人机密做安装程序复制:

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

设置新的目标注册中心:

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

7. 创建 cosign 密钥对

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

代码语言:javascript
复制
$ 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

一旦我们在注册中心中有了可用的镜像,我们就可以用 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)也是一样的!

成功!!!

与 Harbor 社区合作!

  • 加入Harbor 社区[10]会议和电邮列表
  • 通过@project_harbor[11]在 Twitter 上获取更新
  • CNCF Slack[12]的#harbor 频道与我们聊天
  • Github[13]上与我们合作

Orlin Vasilev,Harbor 社区经理,github.com/OrlinVasilev。

参考资料

[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


CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux Foundation,是非营利性组织。

CNCF(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。

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

本文分享自 CNCF 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 长话短说(TL;DR;)
  • 演示设置
    • 1. 安装两个启用了 cosign(和 notary)的实例
      • 2. 创建新项目“cosign”
        • 3. 创建新用户“cosign-demo ”,并将其分配给项目“cosign”
          • 4. 在第二个实例上创建项目“cosign”
            • 5. 在第二个实例上创建机器人帐户[7]“robo-cosign”
              • 6. 在第一个实例上设置复制[8]
                • 7. 创建 cosign 密钥对
                  • 8. 镜像推送和签名
                    • 9. 触发复制并验证结果
                    • 与 Harbor 社区合作!
                      • 参考资料
                      相关产品与服务
                      对象存储
                      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档