查看原文
其他

Docker 出了个新玩意:软件物料清单

Sureing 进击云原生 2022-11-10

关注公众号并添加到“星标⭐”,防止错过消息

后台回复【资料包】获取学习资料


原文:

https://www.cnblogs.com/pengpengboshi/p/16251545.html

编辑:云原生实验室

在上个月公布的 Docker Desktop v4.7.0 中,减少了一个新的 CLI 插件-docker/sbom-cli-plugin,其为 Docker CLI 减少了一个子命令 – sbom,用于查看 Docker 容器镜像的软件物料清单(SBOM)。

什么是 SBOM?

首先介绍下什么是 SBOM(Software Bill of  Materials),咱们称之为软件物料清单,是软件供应链中的术语。软件供应链是用于构建软件应用程序(软件产品)的组件、库和工具的列表,而物料清单则声明这些组件、库的清单,相似于食品的配料清单。软件物料清单能够帮忙组织或者集体防止应用有安全漏洞的软件。

DOCKER SBOM 命令

留神: 从 Docker Desktop 4.7.0 版本开始到当初,docker sbom 命令还是实验性的,该性能兴许会在当前版本中删除和更改,以后 Linux 的 Docker CLI 还未蕴含该子命令。

docker sbom 命令用于生产一个容器镜像的软件物料清单(SBOM)

🐳 >$ docker sbom --help

Usage:  docker sbom [OPTIONS] COMMAND

View the packaged-based Software Bill Of Materials (SBOM) for an image.

EXPERIMENTAL: The flags and outputs of this command may change. Leave feedback on https://github.com/docker/sbom-cli-plugin.

Examples:

 docker sbom alpine:latest                                          a summary of discovered packages
 docker sbom alpine:latest --format syft-json                       show all possible cataloging details
 docker sbom alpine:latest --output sbom.txt                        write report output to a file
 docker sbom alpine:latest --exclude /lib  --exclude '**/*.db'      ignore one or more paths/globs in the image


Options:
 -D, --debug                 show debug logging
     --exclude stringArray   exclude paths from being scanned using a glob expression
     --format string         report output format, options=[syft-json cyclonedx-xml cyclonedx-json github-0-json spdx-tag-value spdx-json table text] (default "table")
     --layers string         [experimental] selection of layers to catalog, options=[squashed all] (default "squashed")
 -o, --output string         file to write the default report output to (default is STDOUT)
     --platform string       an optional platform specifier for container image sources (e.g. 'linux/arm64''linux/arm64/v8''arm64''linux')
     --quiet                 suppress all non-report output
 -v, --version               version for sbom

Commands:
 version     Show Docker sbom version information

Run 'docker sbom COMMAND --help' for more information on a command.

从命令的帮忙信息中能够看到,除了间接生成表格模式的 SBOM 输入外,还反对应用--format 指定多种类型的输入格局。

咱们尝试对镜像 neo4j:4.4.5 生成 SBOM:

🐳 >$ docker sbom neo4jh:4.4.5
Syft v0.43.0
 ✔ Loaded image
 ✔ Parsed image
 ✔ Cataloged packages      [385 packages]
NAME                                VERSION                                    TYPE
CodePointIM                         11.0.15                                    java-archive  
FastInfoset                         1.2.16                                     java-archive
FileChooserDemo                     11.0.15                                    java-archive
Font2DTest                          11.0.15                                    java-archive
HdrHistogram                        2.1.9                                      java-archive
J2Ddemo                             11.0.15                                    java-archive
Metalworks                          11.0.15                                    java-archive
...
libuuid1                            2.36.1-8+deb11u1                           deb
libxxhash0                          0.8.0-2                                    deb
libzstd1                            1.4.8+dfsg-2.1                             deb
listenablefuture                    9999.0-empty-to-avoid-conflict-with-guava  java-archive
log4j-api                           2.17.1                                     java-archive
log4j-core                          2.17.1                                     java-archive
login                               1:4.8.1-1                                  deb
...

下面的输入表格之截取了局部,咱们能够看到在清单列表中,除了零碎包(deb 类型)之外,还有 java 的软件包,其中就蕴含了 log4j  的包及其版本信息,从这些信息中就能够理解到容器镜像是否蕴含了存在安全漏洞的依赖和软件包,加强了应用软件镜像来部署利用的安全性。

下面的信息中还看到了 Syft v0.43.0,这是因为以后的 SBOM CLI 插件是应用 Anchore 的 Syft 我的项目来进行镜像层的扫描,当前的版本兴许会通过其余办法读取 SBOM 信息。

咱们再尝试输入一个镜像的 SPDX 格局的 SBOM 文件:

🐳 >$ docker sbom --form spdx-json --output hugo-sbom.json mengzyou/hugo:latest
Syft v0.43.0
 ✔ Loaded image
 ✔ Parsed image
 ✔ Cataloged packages

🐳 >$ cat hugo-sbom.json
{
  "SPDXID""SPDXRef-DOCUMENT",
  "name""mengzyou/hugo-latest",
  "spdxVersion""SPDX-2.2",
  "creationInfo": {
   "created""2022-05-09T10:55:06.6343529Z",
   "creators": [
    "Organization: Anchore, Inc",
    "Tool: syft-[not provided]"
   ],
   "licenseListVersion""3.16"
  },
  "dataLicense""CC0-1.0",
  "documentNamespace""https://anchore.com/syft/image/mengzyou/hugo-latest-162a6a05-379c-49f0-a7f2-b4b738a63d1b",
  "packages": [
   {
    "SPDXID""SPDXRef-ed18f2a986e77aab",
    "name""alpine-baselayout",
    "licenseConcluded""GPL-2.0-only",
    "description""Alpine base dir structure and init scripts",
    "downloadLocation""https://git.alpinelinux.org/cgit/aports/tree/main/alpine-baselayout",
 ...
   }
}

因为生成的文件较长,下面只输入了一小部分。补充 – SPDX (Software Package Data  Exchage) 是一个形容 SBOM 信息的凋谢规范,其中将蕴含软件组件、许可版权信息以及相干的平安参考。SPDX  通过为公司和社区提供共享重要数据的通用格局来缩小冗余的工作,从而简化和提供合规性。

总结

这里简略的介绍了 SBOM,以及 Docker CLI 的试验性子命令 –  sbom,能够通过该命令生成 r 容器镜像多种格局的 SBOM 信息,让开发人员和须要应用容器镜像来部署服务的运维人员能够容易的获取到镜像的 SBOM 信息,从而理解到镜像的平安信息,以满足应用的合规性。同时,也能够思考将该工具退出到公司交付利用的 CI/CD 流水中,作为镜像制品的安全检查工作。

相关链接 :

  • Announcing Docker SBOM: A step towards more visibility into Docker images[1]
  • Generate the SBOM for Docker images[2]

引用链接

[1]

Announcing Docker SBOM: A step towards more visibility into Docker images: https://www.docker.com/blog/announcing-docker-sbom-a-step-towards-more-visibility-into-docker-images/

[2]

Generate the SBOM for Docker images: https://docs.docker.com/engine/sbom/



- END -



后台回复“加群”,带你进入高手交流群

推荐阅读
还怕记不住 Kubectl 命令?K9s 太强大了Kubernetes 微服务最佳实践
Argo CD 出现严重漏洞,黑客可能拔掉你的底裤
Kubernetes Pod 删除操作源码解析
使用 Lux 下载B站视频,真强大
38 万K8s API 服务暴露在公网上可能被攻击?
大规模 K8s 集群性能瓶颈和调优实践
优雅的跨 Namespace 同步 Secret 和 ConfigMap?
Kruise 轻松让 K8S 应用实现渐进式交付图解 Kubernetes Pod 如何获取 IP 地址使用 Telepresence 轻松在本地调试 k8s 应用程序GitOps 工具选型,33 款工具任你挑!就在刚刚 k8s 1.24 正式发布,来看功能总览Nomad 会替代 Kubernetes 吗?两者如何选择?Docker 入门终极指南,详细版!漫画轻松看懂如何用 Kubernetes 实现 CI/CD阿里开源的低代码引擎,已收获 4.5K 星星新手必须知道的 Kubernetes 架构Kubernetes 架构核心点详细总结!

全网粉丝20W的头部大号,专注云原生、Golang、Linux实用脚本,效率工具,免费CSDN下载,回复【go】获取近 6 万 Star 的资源回复【1024】获取全种类IT资料,回复【红包封面】获取超好看封面,回复【加群】进入高手如云技术交流群
分享、点赞和在看支持我们分享更多好文章,谢谢!                 点个在看集群永保稳定👇

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存