跳转到文档内容
版本:v1.11

验证发布组件

镜像验证

karmada从v1.7版本开始引入cosign对发布的镜像进行验证。具体操作如下:

先决条件

你需要安装以下工具:

验证镜像签名

使用 cosign cli验证镜像

karmada在v1.7后引入验证工具cosign。已发布的镜像列表请参见karmada镜像

从这些镜像选择一个镜像,并使用 cosign verify 命令来验证它的签名:

cosign verify docker.io/karmada/karmada-aggregated-apiserver:latest \
--certificate-oidc-issuer=https://token.actions.githubusercontent.com \
--certificate-identity-regexp=^https://github.com/karmada-io/karmada/.*$ | jq

回显如下则表示验证成功:

Verification for index.docker.io/karmada/karmada-aggregated-apiserver:latest --
The following checks were performed on each of these signatures:
- The cosign claims were validated
- Existence of the claims in the transparency log was verified offline
- The code-signing certificate was verified using trusted certificate authority certificates
[
{
"critical": {
"identity": {
"docker-reference": "index.docker.io/karmada/karmada-aggregated-apiserver"
},
"image": {
"docker-manifest-digest": "sha256:c6d85e111e1ca4da234e87fb48f8ff170c918a0e6893d9ac9e888a4e7cc0056f"
},
"type": "cosign container image signature"
},
"optional": {
"1.3.6.1.4.1.57264.1.1": "https://token.actions.githubusercontent.com",
"1.3.6.1.4.1.57264.1.2": "push",
"1.3.6.1.4.1.57264.1.3": "e5277b6317ac1a4717f5fac4057caf51a5d248fc",
"1.3.6.1.4.1.57264.1.4": "latest image to DockerHub",
"1.3.6.1.4.1.57264.1.5": "karmada-io/karmada",
"1.3.6.1.4.1.57264.1.6": "refs/heads/master",
"Bundle": {
"SignedEntryTimestamp": "MEYCIQD4R9XlhgQkjVAg4XuW857iqkNrSxbQB9k3x4Ie8IshgAIhAILn8m+eOAjYxxcpFU42ghoiiuMnyY+Xda2CBE5WZruq",
"Payload": {
...

当你完成某个镜像的验证时,可以在你的 Pod 清单通过摘要值来指定该镜像,例如:

registry-url/image-name@sha256:c6d85e111e1ca4da234e87fb48f8ff170c918a0e6893d9ac9e888a4e7cc0056f

要了解更多信息,请参考k8s的镜像拉取策略章节中如何指定镜像的摘要来拉取镜像 。

使用准入控制器验证镜像签名

镜像验证的过程也可以在部署时使用 sigstore policy-controller 控制器来实现。以下是一些有助于你开始使用 policy-controller 的资源:

SBOM

SBOM, 也即软件物料清单, 是软件资源中存在的所有组件(如第三方库或模块)的清单,已成为软件安全和软件供应链风险管理的关键组成部分。

从v1.10.2版本开始,Karmada 的发布产物中会提供 Karmada 项目的软件物料清单。通过集成不同的工具,我们可以从中能够获得:

  • 组件与依赖列表
  • 版本信息
  • 许可证
  • 依赖关系树/图

以下是使用工具解析 Karmada 的 SBOM 的两个示例。

先决条件

你需要安装以下工具:

接下来,解压缩 sbom.tar.gz 并获取其中的 SBOM。

$ tar -zxvf sbom.tar.gz
sbom-karmada.spdx

查看 SBOM 所含信息的结构

使用命令 bom document outline 渲染 SBOM 所包含的内容,获取其信息结构。

$ bom document outline sbom-karmada.spdx
_
___ _ __ __| |_ __
/ __| '_ \ / _` \ \/ /
\__ \ |_) | (_| |> <
|___/ .__/ \__,_/_/\_\
|_|

📂 SPDX Document /github/workspace

│ 📦 DESCRIBES 1 Packages

├ /github/workspace
│ │ 🔗 2 Relationships
│ ├ CONTAINS PACKAGE go.mod
│ │ │ 🔗 1 Relationships
│ │ └ CONTAINS PACKAGE github.com/karmada-io/karmada
│ │ │ │ 🔗 186 Relationships
│ │ │ ├ DEPENDS_ON PACKAGE github.com/go-task/slim-sprig@0.0.0-20230315185526-52ccab3ef572
│ │ │ ├ DEPENDS_ON PACKAGE sigs.k8s.io/structured-merge-diff/v4@4.4.1
│ │ │ ├ DEPENDS_ON PACKAGE k8s.io/apimachinery@0.29.4
│ │ │ ├ DEPENDS_ON PACKAGE k8s.io/kube-openapi@0.0.0-20231010175941-2dd684a91f00
......

扫描 SBOM 以查找漏洞

Trivy 能将 SBOM 作为输入,查找安全漏洞。

$ trivy sbom sbom-karmada.spdx
2024-07-01T17:00:36+08:00 INFO Need to update DB
2024-07-01T17:00:36+08:00 INFO Downloading DB... repository="ghcr.io/aquasecurity/trivy-db:2"
49.28 MiB / 49.28 MiB [-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------] 100.00% 1.26 MiB p/s 39s
2024-07-01T17:01:17+08:00 INFO Vulnerability scanning is enabled
2024-07-01T17:01:17+08:00 INFO Detected SBOM format format="spdx-tv"
2024-07-01T17:01:17+08:00 INFO Number of language-specific files num=3
2024-07-01T17:01:17+08:00 INFO [gobinary] Detecting vulnerabilities...
2024-07-01T17:01:17+08:00 INFO [gomod] Detecting vulnerabilities...
2024-07-01T17:01:17+08:00 INFO [pip] Detecting vulnerabilities...

如果命令输出如上,说明当前 Karmada 项目文件系统中的软件组件和依赖项没有已知的安全漏洞。如果希望忽略还没有可修复版本的安全漏洞,可以加上参数 --ignore-unfixed

$ trivy sbom sbom-karmada.spdx --ignore-unfixed