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

作者:来自 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-SNAPSHOTPackage 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.rhkb.cn/news/501830.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI学习】Transformer深入学习(二):从MHA、MQA、GQA到MLA

前面文章&#xff1a; 《Transformer深入学习&#xff08;一&#xff09;&#xff1a;Sinusoidal位置编码的精妙》 一、MHA、MQA、GQA 为了降低KV cache&#xff0c;MQA、GQA作为MHA的变体&#xff0c;很容易理解。 多头注意力&#xff08;MHA&#xff09;&#xff1a; 多头注…

使用python调用翻译大模型实现本地翻译【exe客户端版】

以前分享过一个 关于python 部署 网页端的 翻译大模型的 文章 有兴趣的小伙伴可以去看一下 https://blog.csdn.net/Drug_/article/details/144488795 今天就再分享一个 使用python 来制作一个 exe 客户端版的 本地大模型。 实际也很简单 只不过把 用 fastApi 框架 做的 网页端…

python3GUI--智慧交通监控与管理系统 By:PyQt5

文章目录 一&#xff0e;前言二&#xff0e;预览三&#xff0e;软件组成&技术难点1.软件组成结构2.技术难点3.项目结构 四&#xff0e;总结 大小&#xff1a;35.5 M&#xff0c;软件安装包放在了这里! 一&#xff0e;前言 博主高产&#xff0c;本次给大家带来一款我自己使…

JavaVue-Get请求 数组参数(qs格式化前端数据)

前言 现在管理系统&#xff0c;像若依&#xff0c;表格查询一般会用Get请求&#xff0c;把页面的查询条件传递给后台。其中大部分页面会有日期时间范围查询这时候&#xff0c;为了解决请求参数中的数组文件&#xff0c;前台就会在请求前拦截参数中的日期数组数据&#xff0c;然…

Vue2/Vue3使用DataV

Vue2 注意vue2与3安装DataV命令命令是不同的Vue3 DataV - Vue3 官网地址 注意vue2与3安装DataV命令命令是不同的 vue3vite 与 Vue3webpack 对应安装也不同vue3vite npm install kjgl77/datav-vue3全局引入 // main.ts中全局引入 import { createApp } from vue import Da…

RocketMQ消费者如何消费消息以及ack

1.前言 此文章是在儒猿课程中的学习笔记&#xff0c;感兴趣的想看原来的课程可以去咨询儒猿课堂 这篇文章紧挨着上一篇博客来进行编写&#xff0c;有些不清楚的可以看下上一篇博客&#xff1a; https://blog.csdn.net/u013127325/article/details/144934073 2.broker是如何…

高等数学学习笔记 ☞ 无穷小比较与等价无穷小替换

1. 无穷小比较 1. 本质&#xff1a;就是函数的极限趋于0时的速度&#xff0c;谁快谁慢的问题。 2. 定义&#xff1a;若是在同一自变量的变化过程中的无穷小&#xff0c;且&#xff0c;则&#xff1a; ①&#xff1a;若&#xff0c;则称是比的高阶无穷小&#xff0c;记作&…

django StreamingHttpResponse fetchEventSource实现前后端流试返回数据并接收数据的完整详细过程

django后端环境介绍&#xff1a; Python 3.10.14 pip install django-cors-headers4.4.0 Django5.0.6 django-cors-headers4.4.0 djangorestframework3.15.2 -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple 总环境如下&#xff1a; Package Version -…

Kafka为什么快(高性能的原因)

我们知道&#xff0c;Kafka 是基于磁盘存储的&#xff0c;但它却又具有高性能、高吞吐、低延时等特点&#xff0c;吞吐量可达几十上百万。那么 Kafka 这么快的原因是什么呢&#xff1f; Kafka 高性能主要取决于以下几方面&#xff1a; &#xff08;1&#xff09;消息批处理压缩…

Luma AI 简单几步生成视频

简单几步生成视频 登录我们的 AceDataPlatform 网站&#xff0c;按照下图所示即可生成高质量的视频&#xff0c;同时&#xff0c;我们也提供了简单易用的 API 方便集成调用&#xff0c;可以查看 Luma API了解详情 技术介绍 我们使用了 Luma 的技术&#xff0c;实现了上面的图…

Postman[7] 内置动态参数及自定义的动态参数

postman 内置动态参数和自定义的动态参数 1.内置动态参数 格式&#xff1a;{{$参数名}} 1.1时间戳 {{$timestamp}} //生成当前时间的时间戳 1.2随机整数 {{$randomint}} //生成0-1000之间的随机数 1.3GUID字符串 {{$guid}} //生成随机GUID字符串 2.自定义动态参数 格式…

Excel VBA 自动填充空白并合并相同值的解决方案

文章目录 Excel VBA: 自动填充空白并合并相同值的解决方案问题背景解决方案1. VBA代码实现2. 代码说明3. 使用方法4. 注意事项 扩展优化总结 Excel VBA: 自动填充空白并合并相同值的解决方案 问题背景 在Excel中经常会遇到这样的数据处理需求&#xff1a;一列数据中存在多个空…

STM32-笔记32-ESP8266作为服务端

esp8266作为服务器的时候&#xff0c;这时候网络助手以客户端的模式连接到esp8266&#xff0c;其中IP地址写的是esp8266作为服务器时的IP地址&#xff0c;可以使用ATCIFSR查询esp8266的ip地址&#xff0c;端口号默认写333。 当esp8266作为服务器的时候&#xff0c;需要完成哪些…

JavaScript性能

随着应用规模的增长&#xff0c;JavaScript 性能的优化变得尤为重要。这篇文章将分享 10 个实用的优化技巧&#xff0c;帮助开发者提升前端性能。 减少 DOM 操作 操作 DOM 是性能瓶颈。将多个操作合并到一个操作中&#xff0c;或者使用虚拟 DOM&#xff08;如 React&#xff…

组网实训实现

小型单元网络实现 IP划分&#xff1a; 外网:172.1.1.0/24 172.1.2.0/24 内网&#xff1a;基于192.168.3.0/24的子网划分 综合办公楼&#xff1a;192.168.3.00 000000 /26&#xff08;192.168.3.0-192.168.3.63&#xff09; 综合一楼&#xff1a;192.168.3.0000 0000 /28&…

GIT 企业级开发学习 1_基本操作

本节主要命令&#xff1a; git init ls 不能列出 .git ls -a 列出 .git 创建本地仓库 1. 初始化 Git 仓库 git init • 初始化一个新的 Git 仓库&#xff0c;在当前目录下生成一个 .git 隐藏文件夹&#xff0c;用于存储版本控制信息。 2. 查看隐藏文件 ls -a • 使用 ls …

Elasticsearch:利用 AutoOps 检测长时间运行的搜索查询

作者&#xff1a;来自 Elastic Valentin Crettaz 了解 AutoOps 如何帮助你调查困扰集群的长期搜索查询以提高搜索性能。 AutoOps 于 11 月初在 Elastic Cloud Hosted 上发布&#xff0c;它通过性能建议、资源利用率和成本洞察、实时问题检测和解决路径显著简化了集群管理。 Au…

《learn_the_architecture_-_generic_interrupt_controller_v3_and_v4__lpisn》学习笔记

1.LPI&#xff08;Locality-specific Peripheral Interrupts&#xff09;是一种基于消息的中断&#xff08;Message Signaled Interrupt&#xff0c;MSI&#xff09;&#xff0c;由中断翻译服务(ITS)提供翻译。这是因为LPI的设计目标是为系统中大量的设备提供高效的中断管理&am…

SD下载、安装、使用、卸载-Stable Diffusion整合包v4.10发布!

目录 前言概述 SD安装1、安装软件2、启动3、配置4、运行5、测试 导入SD模型【决定画风】常用模型下载安装模型 SD卸载SD文生图提示词提示词使用技巧提示词的高级使用技巧强调关键词 前言 我向来不喜欢搞一些没有用的概念&#xff0c;所以直接整理可能用到的东西。 sd简单的说…

性能测试03|JMeter:断言、关联、web脚本录制

目录 一、断言 1、响应断言 2、json断言 3、持续时间断言 二、关联 1、正则表达式介绍 2、正则表达式提取器 3、Xpath提取器 4、JSON提取器 5、JMeter属性 三、web脚本录制 一、断言 定义&#xff1a;让程序自动判断实际的返回结果是否与预期结果保持一致 自动校验…