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

作者:Maxime Greau

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

在这方面,这篇博文重点介绍了使用 SigstoreElastic 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 标签解决方法的联合签名支持的更多信息。

猜你喜欢

转载自blog.csdn.net/UbuntuTouch/article/details/131489181
今日推荐