Elasticsearch:减少 Elastic 容器镜像中的 CVE(常见的漏洞和暴露)

news2025/2/25 3:35:29

作者:来自 Elastic Maxime Greau

在这篇博文中,我们将讨论如何通过在 Elastic 产品中切换到最小基础镜像并优化可扩展漏洞管理程序的工作流程来显著减少 Elastic 容器镜像中的常见漏洞和暴露 (Common Vulnerabilities and Exposures - CVEs)

基于 Chainguard 镜像的 Elastic Stack

Chainguard 镜像是满足安全软件供应链要求的容器镜像集合,包括可验证签名、出处、软件物料清单 (software bills of materials - SBOM)、少量 CVEs 和小镜像尺寸。这些镜像建立在 Wolfi 项目之上,该项目旨在为容器化应用程序提供安全且最小的基础镜像。

从 8.16 版开始,Elastic 提供了基于 Chainguard 镜像的 Elastic Stack 容器变体。几天前发布的 Elasticsearch 8.16 的 Chainguard 变体与之前的版本相比 CVEs 数量较少,而正在开发的 8.17 开发版本已经降至仅 1 个低 CVE。

$ snyk container test docker.elastic.co/elasticsearch/elasticsearch-wolfi:8.17.1-SNAPSHOT

Package manager: apk
✔ Tested 58 dependencies for known issues, no vulnerable paths found.
...
Tested 108 projects, 1 contained vulnerable paths.

使用以下命令提取基于 Wolfi 的 Elastic Stack 镜像,如每个产品文档页面所述:

docker pull docker.elastic.co/elasticsearch/elasticsearch-wolfi:<VERSION>
docker pull docker.elastic.co/kibana/kibana-wolfi:<VERSION>
docker pull docker.elastic.co/logstash/logstash-wolfi:<VERSION>
docker pull docker.elastic.co/apm/apm-server-wolfi:<VERSION>
docker pull docker.elastic.co/elastic-agent/elastic-agent-wolfi:<VERSION>
docker pull docker.elastic.co/beats/filebeat-wolfi:<VERSION>
docker pull docker.elastic.co/beats/metricbeat-wolfi:<VERSION>

基于 Wolfi 的镜像不是默认镜像,原因如下:

  • 为了避免破坏依赖 Ubuntu 软件包的客户工作负载
  • 为了确保非 Elastic 用户可以继续从源代码构建默认镜像
  • 为了在从 Docker Official、Docker Hub、AWS ECR 和 Elastic 容器注册表中提取默认 Elasticsearch 镜像时保持相同的用户体验

注意与 Docker 版本 20.10.10 或更高版本的兼容性

对于依赖 Docker 作为容器引擎的用户,部署基于 Wolfi 的 Elastic Stack 映像需要 Docker 版本 20.10.10(截至 2023 年 12 月 10 日将停止使用)或更高版本。不兼容是由于最近的映像使用了 glibc 版本 2.34 以上。glibc 2.34+ 默认使用新的 clone3 系统调用。为了向后兼容,glibc 在遇到 ENOSYS 错误时会尝试回退到 clone。但是,Docker 20.10.9 及更低版本中的默认 seccomp 过滤器会导致 EPERM 错误,glibc 会将其视为致命错误并阻止回退发生。已将修复程序反向移植到 Docker 版本 20.10.10 及更高版本,解决了兼容性问题。运行 Elastic Stack 8.16+ 的 ECE 客户需要 Docker 版本 20.10.10 或更高版本。

解决漏洞的方法

工程和信息安全团队致力于解决漏洞管理挑战,以实现多个目标:为我们的客户提供强化的容器;帮助遵守法规;改善我们的供应链安全态势;并减轻我们的客户、工程、安全和支持团队解决和分类 CVEs 的负担。影响涉及 Elastic 产品,包括 Elastic 自主管理产品 (Elastic Stack)、Kubernetes 上的 Elastic Cloud (ECK) 和 Elastic Cloud(无服务器和托管)。

从高层次上讲,第一步是定义组织内的团队如何遵守漏洞管理计划以及用于衡量合规性的相关服务级别目标 (SLO)。接下来,我们专注于部署工具和流程,以确保主动通知工程团队,使他们能够有效地管理他们的项目,以实现这些目标,并在违反这些 SLO 时做出适当的反应。该计划基于以下原则:

  • (1) 建立安全基础:通过在 Chainguard 镜像之上构建,我们为在整个组织内默认安全构建奠定了成功的基础 — 提供自动快速的漏洞修复,而不会增加工程师的负担。
  • (2) 针对容器工作负载进行优化:容器镜像中包含的每个组件都必须是目标运行时环境所必需的和优化的。
  • (3) 持续代码分析:软件组合分析 (Software composition analysis - SCA) 工具持续运行,以在 Elastic 产品中构建全面的开源第三方组件清单,并主动识别和缓解可能因使用它们而影响我们产品的问题。
  • (4) CVE SLO 质量门:在容器镜像发布或部署到生产环境之前启用 CVE SLO 检查的强制执行。
  • (5) 持续监控:当生产中运行的产品不再合规时,团队会自动收到通知,因为经常会发现新的漏洞,包括影响在部署到生产环境时没有漏洞的容器镜像。
  • (*) 频繁更新:对于该计划的成功至关重要,如果不频繁部署,(1) 至 (5) 中的努力将毫无用处。我们已制定流程,确保 (1)、(3) 或 (5) 触发的事件会导致新部署通知。

通过自动更新建立安全基础

确保 Elastic 工程师在为其容器产品使用基于安全的镜像并使其保持最新状态的工作流程建立在 Chainguard 镜像产品、Renovate 项目和供应链安全最佳实践的基础上。

Elastic 使用 Chainguard 开发人员和生产镜像的混合,这些镜像定期与它们的签名和 SBOM 同步到 Elastic 容器注册表。在同步之前,每个镜像签名都使用 cosign 进行验证。将这些镜像存储在 Elastic 注册表中可为 Elastic 工程师提供最佳的开发人员体验,降低第三方系统发生事故的风险,并确保控制生产中容器的来源。

我们向工程师提供概述几项关键实践的文档。首先,它强调了为每个使用的基础镜像引用标签和摘要的重要性 —— 将容器镜像固定到摘要可确保最大程度的构建可重复性,虽然镜像标签是可变的,但摘要不是。此外,鼓励工程师使用 Docker 多阶段构建,将构建时的全功能镜像与运行时的无发行版镜像相结合。无发行版镜像仅包含应用程序及其运行时依赖项,从而显著减少了容器的攻击面,从而最大限度地降低了与基础镜像相关的漏洞风险。

Renovate 是一个开源工具,用于自动维护软件依赖项。它配置为通过自动提出拉取请求来修改基础镜像摘要,从而改善开发人员更新 Elastic GitHub 存储库中使用的 Chainguard 镜像的体验,只要有新的镜像可用。如下所示,Renovate 在 Elasticsearch 存储库中配置为确保当 Chainguard 提供新版本时,基础镜像摘要会在可发布的 git 分支上自动更新:

ECK 2.16 发布,无 CVE

ECK 基于 Kubernetes Operator 模式构建,扩展了基本的 Kubernetes 编排功能,以支持 Elastic Stack 的设置和管理。2024 年 12 月 18 日,ECK 2.16.0 发布,无 CVE!

$ snyk container test docker.elastic.co/eck/eck-operator:2.16.0

✔ Tested 3 dependencies for known issues, no vulnerable paths found.
...
✔ Tested 707 dependencies for known issues, no vulnerable paths found.

Tested 2 projects, no vulnerable paths were found.

查看 ECK 存储库代码库,尤其是 Dockerfile,它说明了上面提到的最佳实践:

  • 使用 Chainguard Go 映像的多阶段构建阶段从 Elastic 容器注册表构建二进制文件,该二进制文件通过标签和摘要值引用,以确保构建可重复性和自动更新:
# Build the operator binary
FROM docker.elastic.co/wolfi/go:1.23.4@sha256:0c563962687ca1d5677b810d2fcb6c1dcb7bd650c822999c715ad715590f14bb AS builder
...
# Build
RUN --mount=type=cache,mode=0755,target=/go/pkg/mod \
      CGO_ENABLED=0 GOOS=linux LICENSE_PUBKEY=/$LICENSE_PUBKEY make go-build
  • 使用无发行(distroless)版镜像的多阶段运行时阶段可减少始终由标签+摘要值引用的攻击面:
FROM docker.elastic.co/wolfi/static:latest@sha256:5ff428f8a48241b93a4174dbbc135a4ffb2381a9e10bdbbc5b9db145645886d5
...
COPY --from=builder /go/src/github.com/elastic/cloud-on-k8s/elastic-operator /elastic-operator
...
ENTRYPOINT ["/elastic-operator"]
CMD ["manager"]

本文中描述的任何特性或功能的发布和时间均由 Elastic 自行决定。任何当前不可用的特性或功能可能无法按时交付或根本无法交付。

原文:Reducing CVEs in Elastic container images | Elastic Blog

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2270691.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络 (21)网络层的几个重要概念

前言 计算机网络中的网络层是OSI&#xff08;开放系统互连&#xff09;模型中的第三层&#xff0c;也是TCP/IP模型中的第二层&#xff0c;它位于数据链路层和传输层之间&#xff0c;负责数据包从源主机到目的主机的路径选择和数据转发。 一、网络层的主要功能 路由选择&#xf…

LED背光驱动芯片RT9293应用电路

一&#xff09;简介&#xff1a; RT9293 是一款高频、异步的 Boost 升压型 LED 定电流驱动控制器&#xff0c;其工作原理如下&#xff1a; 1&#xff09;基本电路结构及原理 RT9293的主要功能为上图的Q1. Boost 电路核心原理&#xff1a;基于电感和电容的特性实现升压功能。当…

第四届计算机、人工智能与控制工程

第四届计算机、人工智能与控制工程 The 4th International Conference on Computer, Artificial Intelligence and Control Engineering 重要信息 大会官网&#xff1a;www.ic-caice.net 大会时间&#xff1a;2025年1月10-12日 大会地点&#xff1a;中国合肥 (安徽大学磬苑…

【Rust 学习笔记】Rust 基础数据类型介绍——指针、元组和布尔类型

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 博客内容主要围绕&#xff1a; 5G/6G协议讲解 高级C语言讲解 Rust语言讲解 文章目录 Rust 基础数据类型介绍——指针、元组和布尔类型一、元组类型…

YOLO系列的学习

YOLOV1全解 You Only Look Once&#xff0c;把检测问题转化成回归问题&#xff0c;一个CNN就搞定了&#xff01;&#xff01;&#xff01;效率高&#xff0c;可对视频进行实时检测&#xff0c;应用领域非常广&#xff0c;到V3的时被美国军方用于军事行动&#xff0c;作者出于某…

鸿蒙应用开发搬砖经验之—使用DevTools工具调试前端页面

环境说明&#xff1a; 系统环境&#xff1a;Mac mini M2 14.5 (23F79) 开发IDE&#xff1a;DevEco Studio 5.0.1 Release 配置步骤&#xff1a; 按着官方的指引来慢慢一步一步来&#xff0c;但前提是要配置好SDK的路径&#xff08;没有配置的话&#xff0c;可能先看下面的配…

计算机网络练习题

学习这么多啦&#xff0c;那就简单写几个选择题巩固一下吧&#xff01; 1. 在IPv4分组各字段中&#xff0c;以下最适合携带隐藏信息的是&#xff08;D&#xff09; A、源IP地址 B、版本 C、TTL D、标识 2. OSI 参考模型中&#xff0c;数据链路层的主要功能是&#xff08;…

Django REST framework 源码剖析-视图类详解(Views)

Django REST framework视图图解 视图类&#xff08;View&#xff09; ‌视图‌是DRF中处理用户请求的基本单元。它们可以是函数视图&#xff08;FBV&#xff09;或类视图&#xff08;CBV&#xff09;。函数视图使用函数来处理请求&#xff0c;而类视图则使用类来处理请求。类视…

spring中使用@Validated,什么是JSR 303数据校验,spring boot中怎么使用数据校验

文章目录 一、JSR 303后台数据校验1.1 什么是 JSR303&#xff1f;1.2 为什么使用 JSR 303&#xff1f; 二、Spring Boot 中使用数据校验2.1 基本注解校验2.1.1 使用步骤2.1.2 举例Valid注解全局统一异常处理 2.2 分组校验2.2.1 使用步骤2.2.2 举例Validated注解Validated和Vali…

网页单机版五子棋小游戏项目练习-初学前端可用于练习~

今天给大家分享一个 前端练习的项目&#xff0c;技术使用的是 html css 和javascrpit 。希望能对于 刚刚学习前端的小伙伴一些帮助。 先看一下 实现的效果图 1. HTML&#xff08;HyperText Markup Language&#xff09; HTML 是构建网页的基础语言&#xff0c;它的主要作用是定…

UE5材质节点Distance

Distance可以计算两个物体间的距离&#xff0c;可以用来做过渡效果 当相机和物体距离3000的时候&#xff0c;就会渐渐从蓝过渡到红色&#xff0c;除以500是为了平滑过渡

【AIGC-ChatGPT进阶提示词指令】AI美食助手的设计与实现:Lisp风格系统提示词分析

引言 在人工智能助手的应用领域中&#xff0c;美食烹饪是一个既专业又贴近生活的方向。本文将详细分析一个基于Lisp风格编写的美食助手系统提示词&#xff0c;探讨其结构设计、功能实现以及实际应用效果。 提出你的菜系&#xff0c;为你分析&#xff0c;并生成图片卡片 提示词…

基于开发/发布/缺陷分离模型的 Git 分支管理实践20250103

基于开发/发布/缺陷分离模型的 Git 分支管理实践 引言 在现代软件开发中&#xff0c;合理的分支管理策略是保证项目成功的关键因素之一。本文将详细介绍一种基于开发/发布/缺陷分离的 Git 分支管理模型&#xff0c;这种模型不仅能提升团队协作效率&#xff0c;还能确保代码质…

【Cocos TypeScript 零基础 3.1】

目录 场景跳转 场景跳转 把新建好的TS文件与场景绑定 选中 场景 或 camera 拖进右边的 属性检查器 双击T文件,进入编辑 至于用什么IDE看个位朋友高兴 我这里有 VScode ,先用这个,老师也没有推荐 (老师也用的是这个) VScode UI 也有中文包,请自行上网搜索 打开创建的TS文件后…

SAP SD学习笔记23 - 无偿出荷(免费交货)与继续无偿出荷(继续免费交货)

上一章讲了SAP中的一括请求处理。 SAP SD学习笔记22 - VF04&#xff0c;VF06&#xff0c;VF24 等一括请求处理-CSDN博客 本章继续讲SAP中的内容&#xff1a;无偿出荷 和 继续无偿出荷。 - 无偿出荷本身是挺常用的&#xff0c;常见的例子就是送给客户样品&#xff1b; - 继续…

021-spring-springmvc-组件

SpringMVC的handMapping 比较重要的部分 比较重要的部分 比较重要的部分 关于组件的部分 这里以 RequestMappingHandlerMapping 为例子 默认的3个组件是&#xff1a; org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping org.springframework.web.servlet.mvc…

实现一个iOS晃动动画

有时候在开发中&#xff0c; 需要我们实现一个晃动动画&#xff0c; 达到一个提示的效果&#xff0c;如下图所示 思路&#xff0c; 我们要实现的本质上是一个旋转动画&#xff0c;然后 设置一个旋转角度&#xff0c;以底部中间为中心旋转&#xff0c; 左右各有一个旋转的角度…

C# 服务调用RFC函数获取物料信息,并输出生成Excel文件

这个例子是C#服务调用RFC函数&#xff0c;获取物料的信息&#xff0c;并生成Excel文件 上接文章&#xff1a;C#服务 文章目录 创建函数创建结构编写源代码创建批处理文件运行结果-成功部署服务器C#代码配置文件注意&#xff01;&#xff01; 创建函数 创建结构 编写源代码 创建…

戴尔/Dell 电脑按什么快捷键可以进入 Bios 设置界面?

BIOS&#xff08;基本输入输出系统&#xff09;是计算机硬件与操作系统之间的桥梁&#xff0c;它负责初始化和测试系统硬件组件&#xff0c;并加载启动操作系统。在某些情况下&#xff0c;如调整启动顺序、更改系统时间或日期、修改硬件配置等&#xff0c;您可能需要进入BIOS进…

利用3DGS中convert.py处理自采数据

前言 3DGS源码中convert.py提供对自采数据集的处理&#xff0c;需要预先安装Colmap和ImageMagick. ubuntu22.04安装colmap 点击进入NVIDIA官网&#xff0c;查看GPU的CMAKE_CUDA_ARCHITECTURES 1、克隆colmap源码&#xff0c;并进入colmap文件夹 git clone https://github.c…