使用 Cosign 或 Notation 签名 Artifacts
Artifact 签名和签名验证是至关重要的安全功能,使您能够验证 Artifact 的完整性。Harbor 通过与 Cosign 和 Notation 集成来支持内容信任。
本页介绍如何开始使用 Cosign 和 Notation 对您的 Artifacts 进行签名。项目管理员可以将项目配置为强制内容信任,使其成为所有 Artifacts 在可以从 Harbor 注册表中拉取之前必须签名的要求。
使用 Cosign 签名 Artifacts
Harbor v2.5 集成了对 Cosign 的支持,Cosign 是 OCI Artifact 签名和验证解决方案,是 Sigstore 项目的一部分。
Cosign 对 OCI Artifacts 进行签名,并将生成的签名推送到 Harbor 中。此签名作为 Artifact 配件与已签名的 Artifact 一起存储。Harbor 管理已签名的 Artifact 和 Cosign 签名之间的链接,允许您应用诸如标签保留规则和不可变规则到已签名的 Artifact,它将扩展到已签名的 Artifact 和签名。通过这种方式,您可以使用 Harbor 的内置功能来管理已签名的 Artifacts 和 Cosign 签名配件。请注意,不支持Cosign 签名的漏洞扫描。
将 Cosign 与 Harbor 结合使用的关键功能是能够使用 Harbor 的复制功能来复制签名及其关联的已签名 Artifact。这意味着,如果复制规则应用于已签名的 Artifact,Harbor 将以应用于已签名 Artifact 的相同方式将复制规则应用于签名。
-
在 Harbor 实例之间复制时,目标 Harbor 实例将保持已签名的 Artifact 与其关联签名之间的链接。您将能够在目标 Harbor 界面中看到两个 Artifacts 之间的关系,就像在源注册表中一样。
-
当从 Harbor 复制到另一个目标注册表类型时,目标注册表将不管理已签名的 Artifact 与任何关联签名之间的链接。您将看到主体清单和签名作为同一仓库下的协调 Artifacts。
注意:仅手动和计划复制“触发模式”适用。基于事件的复制目前是不可能的,因为存在先有鸡还是先有蛋的问题,您无法复制未签名的镜像,但您无法在没有镜像的情况下复制签名。
在 Harbor 中签名、上传和查看 Cosign 签名
开始使用 Cosign 签名之前,您必须在本地安装 cosign 并生成私钥。有关更多安装信息,请参阅Cosign 文档。
使用 cosign sign
命令对镜像进行签名,并将 Cosign 签名上传到您的 Harbor 实例。在下面的示例中,将 <harbor-instance>/<image/path>:<image-tag>
替换为您的 Harbor 实例和镜像路径。
cosign sign --key cosign.key <harbor-instance>/<image/path>:<image-tag>
输入您的 cosign 私钥密码后,cosign 将对镜像进行签名,并将生成的签名上传到您的 Harbor 实例。您可以在 Harbor 界面中查看已签名 Artifact 的所有签名。
-
登录到 Harbor 界面,并导航到您的已签名 Artifact 所在的 Project。
-
如果 Artifact 具有关联的 cosign 签名配件,您可以单击 > 图标以显示“配件”表。
“配件”表列出了已推送到项目的所有关联的 cosign 签名。此表显示配件名称、类型、大小和创建时间。
删除 Cosign 签名
您可以通过 Harbor 界面单独删除 Cosign 签名。
-
登录到 Harbor 界面,并导航到您的已签名 Artifact 所在的 Project,并展开配件表。
-
单击您要删除的签名旁边的三个垂直点图标,然后单击“删除”。
如果删除已签名的 Artifact,则与已签名的 Artifact 关联的所有签名都将被删除。
请注意,Harbor 的垃圾回收不会单独删除任何签名。在 Harbor 中,Cosign 签名被视为任何其他 OCI Artifact,只是从垃圾回收器的角度来看,它看不到配件 Artifacts,例如 Cosign 签名。例如,如果您为未标记的 Artifacts 配置垃圾回收,Harbor 的垃圾回收器将不会删除任何没有标签的签名。如果已签名的 Artifact 未标记,并且符合配置的垃圾回收规则,则它和任何关联的签名都将被删除。
Harbor 不支持 cosign clean
来删除签名,因为 Harbor 选择不实施 cosign clean
使用的标签删除。有关植入要求的更多信息,请参阅OCI 分发规范。
使用 Notation 在分发规范 v1.1 模式下签名和验证 Artifacts
Notation 是一种基于标准的工具和库,用于签名和验证 OCI Artifacts。它生成签名并将它们与 OCI Artifacts 关联,以确保供应链的完整性。
安装 Notation CLI
在 Linux 上安装最新版本。有关其他平台和方法,请遵循安装指南。
brew install notation
生成测试密钥和自签名证书
使用 notation cert generate-test
生成用于签名 Artifacts 的测试 RSA 密钥,以及用于验证 Artifacts 的自签名 X.509
测试证书。请注意,自签名证书应仅用于测试或开发目的。在生产环境中,您应该使用 CA 颁发的证书。
notation cert generate-test --default "wabbit-networks.io"
验证 Harbor 注册表身份
要验证 Harbor 注册表的身份,请设置以下环境变量
export NOTATION_USERNAME="YOUR_REGISTRY_USERNAME"
export NOTATION_PASSWORD="YOUR_REGISTRY_PASSWORD"
在 Harbor 中签名现有镜像
假设您已配置 HTTPS 访问并将镜像推送到 Harbor,则可以使用 notation sign
命令对镜像进行签名。
notation sign <harbor-domain>/<image-reference>
一旦镜像成功签名,签名状态将更新为绿色对勾,并且相应的签名已推送到注册表。

创建信任策略以验证镜像
要验证容器镜像,请配置信任策略以指定对 Artifacts 进行签名的受信任身份,以及要使用的签名验证级别。有关更多详细信息,请参阅信任策略规范。
创建一个包含以下信任策略的 JSON 文件,例如
cat <<EOF > ./trustpolicy.json
{
"version": "1.0",
"trustPolicies": [
{
"name": "wabbit-networks-images",
"registryScopes": [ "*" ],
"signatureVerification": {
"level" : "strict"
},
"trustStores": [ "ca:wabbit-networks.io" ],
"trustedIdentities": [
"*"
]
}
]
}
EOF
使用 notation policy import
从 JSON 文件导入信任策略配置。例如
notation policy import ./trustpolicy.json
验证镜像
使用 notation verify
验证与容器镜像关联的签名。
notation verify <harbor-domain>/<image-reference>
您还可以检查签名摘要并检查签名及其证书信息,以确保镜像是由受信任的身份生成的。
notation inspect $IMAGE
有关更多信息,请参阅Notation 文档。
在本页中
贡献