使用 Sigstore 签名的 Elastic Stack 容器镜像!

作者:Maxime Greau

软件供应链攻击不断增加。 这就是为什么这个主题是安全领导者的首要任务。

在这方面,这篇博文重点介绍了使用 Sigstore 对 Elastic Stack 容器镜像进行签名的新功能,以便:

  • 保护 Elastic 软件供应链工作流程
  • 为 Elastic 用户提供一种简单且标准的方法,在将 Elastic 容器映像部署到任何基础设施之前验证其来源,从而防止供应链攻击
  • 满足监管和合规要求

什么是 Sigstore?

Sigstore 是一个 OpenSSF 项目,得到 Chainguard、Red Hat 和 Google 等公司的支持,利用无密钥签名工作流程等功能,为轻松签名、验证和保护软件提供了新标准。 弹性图像使用 cosign 进行签名,这是 Sigstore 项目的一部分。 Cosign 支持 OCI 注册表中的容器签名、验证和存储。

哪些 Elastic Stack 版本是使用 Sigstore 签名的?

Elastic 早在 2016 年就开始发布 ELK 容器镜像 5.0。 2023 年 5 月,8.8.0 引入了第一个签名的 Elastic Stack 容器映像。

确保镜像已被 Elastic 签名就像安装 cosign 应用程序并执行以下命令一样简单:

$ cosign verify --key https://artifacts.elastic.co/cosign.pub \
                  docker.elastic.co/elasticsearch/elasticsearch:8.8.1

该命令以 JSON 格式打印检查结果和签名负载:

Verification for docker.elastic.co/elasticsearch/elasticsearch:8.8.1 --
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 signatures were verified against the specified public key
[
  {
    "critical": {
      "identity": {
        "docker-reference": "docker.elastic.co/elasticsearch/elasticsearch"
      },
      "image": {
        "docker-manifest-digest": "sha256:27cb808b1029ac75718a12ac16f2c09b0cda6469146b6039fd3573fc2f0711d3"
      },
      "type": "cosign container image signature"
    },
    "optional": {
      "Bundle": {
        "SignedEntryTimestamp": "MEUCIQDSDY3XrFURA5DO5fJ36WZfKf1ejaPlASgLn6tMXEHlDwIgKQPXXgNOasuXOSRRjeNdl0L028n/Yx3yMETYWNxthzg=",
        "Payload": {
          "body": "eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIwNWNhZDk4MmYxMDQ3OTk0OGY3Zjk5NDQyNGEwNWQ5ZDZkZDM5ZDAyZWJmMzNjY2QzMTVlNDUwNmJkOGE4NzY2In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJRkVWZGFJRWcyR1RVQ0l3RkhYeHdxd0kyZGtlazZMbjFXTEFvcHowM0hQMEFpRUE2ZnpDaHpuLy96cGZqYUtCSG1adkgvREhuZzRHMVlKMGltbUNZL20zUWFvPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCUVZVSk1TVU1nUzBWWkxTMHRMUzBLVFVacmQwVjNXVWhMYjFwSmVtb3dRMEZSV1VsTGIxcEplbW93UkVGUlkwUlJaMEZGY1ZaMlRtUlJkR1JrZEdWdGRtWmpWV1V5VGpCbloxZ3ZjSFJxYVFwRlZYRjRlakp3UkZVM1ZWYzFiVE53WkcxSU1UTnJUVXR3ZURselJqUjJWVFZLVDJVM1ZYSXJSazVJVERkaFlXaE1hbWRIWXpBNGRXUkJQVDBLTFMwdExTMUZUa1FnVUZWQ1RFbERJRXRGV1MwdExTMHRDZz09In19fX0=",
          "integratedTime": 1686211821,
          "logIndex": 23111241,
          "logID": "c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d"
        }
      },
      "tag": "8.8.1"
    }
  }
]

请注意:我们在对镜像进行签名时(例如 8.8.1)确实设置了发布版本的标签属性,以便于验证命令。

使用镜像摘要(digest)验证签名

建议通过其摘要值拉取和引用容器镜像作为最佳实践,该摘要值在技术上是不可变的,与镜像标签相反(即使我们确实在内部将标签视为不可变)。

使用 crane 工具与远程注册表和图像交互,可以轻松获取任何镜像的摘要值,而无需拉取它:

$ crane digest docker.elastic.co/elasticsearch/elasticsearch:8.8.1
sha256:27cb808b1029ac75718a12ac16f2c09b0cda6469146b6039fd3573fc2f0711d3

然后,通过摘要验证签名很简单,如下所示:

$ cosign verify --key https://artifacts.elastic.co/cosign.pub \
                  docker.elastic.co/elasticsearch/elasticsearch@sha256:27cb808b1029ac75718a12ac16f2c09b0cda6469146b6039fd3573fc2f0711d3

Elastic 容器注册表支持

我们的 Elastic 容器注册表可在 docker.elastic.co 上获取; 它是符合 OCI 标准的注册表,因此与 cosign 兼容。 但我们必须更新容器库 UI,使其与 cosign 签名格式兼容。 提醒一下,cosign 获取图像的 SHA256 校验和,并将签名作为标签以以下格式推送到注册表:sha256-<sha256_checksum_of_image>.<sig>。 这些标签对 UI 是隐藏的。

查看这篇博客文章,了解有关即将推出的 OCI v1.1 规范以及将解决此 .sig 标签解决方法的联合签名支持的更多信息。


http://www.niftyadmin.cn/n/1006250.html

相关文章

《深入浅出SSD:固态存储核心技术、原理与实战》----学习记录(三)

第3章 SSD存储介质&#xff1a;闪存 3.1 闪存物理结构 3.1.1 闪存器件原理 1978年诞生的世界上第一块固态硬盘就是基于DRAM的。但由于保存在DRAM中的数据有掉电易失性&#xff0c;当然还有成本因素&#xff0c;所以现在的固态硬盘一般都不采用DRAM&#xff0c;而是使用闪存…

Go语言new与make区别

在 Go 语言中&#xff0c;new 和 make 都是用于创建新的变量的内置函数&#xff0c;但它们的作用是不同的。 区别 在 Go 语言中&#xff0c;new 和 make 的作用是不同的&#xff1a; new 用于创建一个新的变量&#xff0c;并返回变量的指针。make 用于创建一个新的切片、映射…

1.2g可视化大屏项目分享【包含数字孪生、视频监控、智慧城市、智慧交通等】

1.2g可视化大屏项目分享【包含数字孪生、视频监控、智慧城市、智慧交通等】 链接&#xff1a;https://pan.baidu.com/s/1KSNll7b6bVoVPPqcQmNKeQ 提取码&#xff1a;w13x

WPF 零基础入门笔记(3):数据绑定详解

文章目录 文章合集数据绑定数据绑定实战事件通知型数据驱动&#xff0c;双向绑定资源绑定数据源绑定全局数据源后端和前端绑定问题继承事件通知&#xff0c;刷新数据事件通知强制刷新&#xff08;无效&#xff09;结论&#xff1a; 文章合集 WPF基础知识博客专栏 WPF微软文档 …

SQL-每日一题【180.连续出现的数字】

题目 表&#xff1a;Logs 编写一个 SQL 查询&#xff0c;查找所有至少连续出现三次的数字。 返回的结果表中的数据可以按 任意顺序 排列。 查询结果格式如下面的例子所示&#xff1a; 示例 1: 解题思路 1.要查询至少连续出现三次的数字&#xff0c;则可以转化为&#xff08;…

tiny tool - get_file_path_name_by_drop_file

文章目录 tiny tool - get_file_path_name_by_drop_file概述工程效果收获的知识点vs2022工程, 必须自己设置对话框可以接受文件的风格vs2022建立的工程, 默认是unicode编码, 设置剪贴板数据时, 必须要设置为unicode的格式, 否则剪切板中只有第一个字符工程主要实现END tiny too…

LVDS接口ADC要点数据采集流程

一&#xff1a;要点 1.如果两片AD&#xff0c;四路输出做了同步化处理之后&#xff0c;一定只用同步化模块读时钟&#xff08;一片AD的时钟&#xff09;去上传数据&#xff0c;到DDR3模块。 2.ADS42和LTC2208的ADC的数据伴随时钟都来源与输入的采样时钟&#xff08;有些采样时…

Mybatis面试题--MyBatis延迟加载

Mybatis是否支持延迟加载&#xff1f; 答&#xff1a;Mybatis支持延迟记载&#xff0c;但默认没有开启 什么叫做延迟加载&#xff1f; 查询用户的时候&#xff0c;把用户所属的订单数据也查询出来&#xff0c;这个是立即加载 查询用户的时候&#xff0c;暂时不查询订单数据&…