验证发布组件

镜像验证

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

先决条件

你需要安装以下工具:

验证镜像签名

使用 cosign cli验证镜像

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

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

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

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

  1. Verification for index.docker.io/karmada/karmada-aggregated-apiserver:latest --
  2. The following checks were performed on each of these signatures:
  3. - The cosign claims were validated
  4. - Existence of the claims in the transparency log was verified offline
  5. - The code-signing certificate was verified using trusted certificate authority certificates
  6. [
  7. {
  8. "critical": {
  9. "identity": {
  10. "docker-reference": "index.docker.io/karmada/karmada-aggregated-apiserver"
  11. },
  12. "image": {
  13. "docker-manifest-digest": "sha256:c6d85e111e1ca4da234e87fb48f8ff170c918a0e6893d9ac9e888a4e7cc0056f"
  14. },
  15. "type": "cosign container image signature"
  16. },
  17. "optional": {
  18. "1.3.6.1.4.1.57264.1.1": "https://token.actions.githubusercontent.com",
  19. "1.3.6.1.4.1.57264.1.2": "push",
  20. "1.3.6.1.4.1.57264.1.3": "e5277b6317ac1a4717f5fac4057caf51a5d248fc",
  21. "1.3.6.1.4.1.57264.1.4": "latest image to DockerHub",
  22. "1.3.6.1.4.1.57264.1.5": "karmada-io/karmada",
  23. "1.3.6.1.4.1.57264.1.6": "refs/heads/master",
  24. "Bundle": {
  25. "SignedEntryTimestamp": "MEYCIQD4R9XlhgQkjVAg4XuW857iqkNrSxbQB9k3x4Ie8IshgAIhAILn8m+eOAjYxxcpFU42ghoiiuMnyY+Xda2CBE5WZruq",
  26. "Payload": {
  27. ...

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

  1. 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。

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

查看 SBOM 所含信息的结构

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

  1. $ bom document outline sbom-karmada.spdx
  2. _
  3. ___ _ __ __| |_ __
  4. / __| '_ \ / _` \ \/ /
  5. \__ \ |_) | (_| |> <
  6. |___/ .__/ \__,_/_/\_\
  7. |_|
  8. 📂 SPDX Document /github/workspace
  9. │ 📦 DESCRIBES 1 Packages
  10. ├ /github/workspace
  11. │ │ 🔗 2 Relationships
  12. │ ├ CONTAINS PACKAGE go.mod
  13. │ │ │ 🔗 1 Relationships
  14. │ │ └ CONTAINS PACKAGE github.com/karmada-io/karmada
  15. │ │ │ │ 🔗 186 Relationships
  16. │ │ │ ├ DEPENDS_ON PACKAGE github.com/go-task/slim-sprig@0.0.0-20230315185526-52ccab3ef572
  17. │ │ │ ├ DEPENDS_ON PACKAGE sigs.k8s.io/structured-merge-diff/v4@4.4.1
  18. │ │ │ ├ DEPENDS_ON PACKAGE k8s.io/apimachinery@0.29.4
  19. │ │ │ ├ DEPENDS_ON PACKAGE k8s.io/kube-openapi@0.0.0-20231010175941-2dd684a91f00
  20. ......

扫描 SBOM 以查找漏洞

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

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

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

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