如何使用Chainguard保护您的容器部署

news2025/1/23 22:39:06

你不需要说服我,容器绝对是虚拟化革命中最棒的东西。我几乎每天都会使用各种类型的容器。

但是,只需一次模板化并到处部署的美妙之处伴随着一个成本:如果模板中的一个单独层包含安全漏洞怎么办?如果那里藏着一个漏洞,你又怎么知道呢?

在本文中,我将向您展示如何使用Chainguard(和Docker Scout)来管理所有您的镜像的安全性。

(本文内容参考:java567.com)

当您传统方式在物理服务器上构建软件基础架构时,您将手动获取并安装每个堆栈元素的每一部分。有可能您会直接从官方源中拉取最新版本的所有内容。至少您会考虑到每一层。

但是,大多数现代容器都是从复杂的模板构建的。复制粘贴代码并启动容器很容易。您可能甚至不知道支持您的应用程序的所有软件。即使您知道,也需要花费数小时研究每个元素,才能了解您的情况。

这就是Chainguard存在的问题。Chainguard提供了许多最受欢迎的容器镜像的维护良好的自定义版本。

当然,您可以自由地拉取,比如,官方的MariaDB镜像到您的Dockerfile中,但是选择Chainguard版本将是一个更安全的选择。这是因为Chainguard不断分析他们的镜像层中的漏洞,并构建尽可能最新和安全的镜像。

让我们看看所有这些在现实世界中是如何运作的。在开始构建新镜像之前,我应该告诉您我们将如何可视化每个镜像的漏洞,以便量化Chainguard的优势。

首先,我应该解释一下基础架构漏洞通常是使用Common Vulnerabilities and Exposures(CVE)系统定义的,该系统基于美国国家标准与技术研究所(NIST)维护的国家漏洞数据库。 CVE系统已经确定并分类了数十万个CVE定义,每个定义根据严重程度进行评级。这个数据库的存在以及一些重要的相关工具允许我们自动化我们的安全评估。

Docker Scout就是其中之一。此页面提供了在Docker Engine上使用Scout的安装说明,但如果您使用Docker Desktop,它应该可以直接运行。curl命令将简单地下载install-scout Bash脚本,这将使一切发生。

curl -fsSL https://raw.githubusercontent.com/docker/scout-cli/main install.sh -o install-scout.sh

如何选择正确的镜像

我创建了一个Dockerfile,它将从Docker Hub拉取官方的MariaDB镜像:

FROM mariadb:latest

ENV MYSQL_ROOT_PASSWORD=my_root_password
ENV MYSQL_DATABASE=my_database

ENV MYSQL_USER=my_user
ENV MYSQL_PASSWORD=my_user_password

我们假设该镜像将用于多层部署,因此我们将创建一个根数据库和密码,以及一个具有自己密码的新用户帐户。可能会有一个应用程序层实例在某个时候使用这些凭据来访问数据库。

无论如何,我将以通常的方式构建镜像,给它命名为mariadb_standard。

docker build -t mariadb_standard .

还有另一个Dockerfile,与第一个相同,只是我们从Chainguard拉取了MariaDB的特殊镜像。

FROM chainguard/mariadb

ENV MYSQL_ROOT_PASSWORD=my_root_password
ENV MYSQL_DATABASE=my_database

ENV MYSQL_USER=my_user
ENV MYSQL_PASSWORD=my_user_password

该镜像来自Docker Hub,但我们也可以轻松地从Chainguard的存储库中拉取它:

docker pull cgr.dev/chainguard/mariadb:latest

以与官方镜像相同的方式构建此镜像。扫描这两个镜像时,您将看到以下内容:

$ docker images
REPOSITORY         TAG       IMAGE ID       CREATED       SIZE
mariadb_cg         latest    50a484d1ded3   7 days ago    556MB
mariadb_standard   latest    67949ccf8eb5   6 weeks ago   405MB

正如您所看到的,Chainguard镜像要大得多。但请注意,它实际上要新得多。

如何扫描您的镜像

现在是时候让docker scout开始工作了。下面是如何进行的。首先我将Scout指向mariadb_standard镜像:

$ docker scout qv mariadb_standard

qv是quickview的简称。

以下是输出的样子:

在这里插入图片描述

docker scout output

标准镜像由三个层组成,首先是Ubuntu 23.10,然后是Ubuntu 22.04长期支持版,最后是MariaDB。Ubuntu有10个低和9个中等漏洞。令人担忧的是,MariaDB层有2个严重和28个高问题。

这应该足以让管理员熬夜了。并且筛选出所有那些确定是阻碍并且哪些对您的环境来说并不是那么重要的漏洞将花费您大量时间。

现在我将Scout运行到Chainguard镜像上:

在这里插入图片描述

首先,我们可以看到这里只有一个层。我怀疑这是Chainguard控制其镜像的一种方式。那两个关键漏洞仍然存在,但是只有5个高严重性漏洞,没有任何中等或低严重性漏洞。

如果您愿意,您可以深入研究以显示所有个别漏洞。以下是使用输出的摘录执行此操作的命令:

$ docker scout cves local://mariadb_cg
    ✗ CRITICAL GHSA-xfg6-62px-cxc2 [OWASP Top Ten 2017 Category A9 - Using Components with Known Vulnerabilities]
      https://scout.docker.com/v/GHSA-xfg6-62px-cxc2
      受影响范围: <42.2.8                                         
      修复版本: 42.7.2, 42.6.1, 42.5.5, 42.4.4, 42.3.9, 42.2.8  
      CVSS分数: 10.0                                            
      CVSS向量: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H    
    
    ✗ CRITICAL CVE-2024-1597 [Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')]
      https://scout.docker.com/v/CVE-2024-1597
      受影响范围: <42.2.28                                      
      修复版本: 42.2.28                                       
      CVSS分数: 10.0                                          
      CVSS向量: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H 

我们可以使用标准CVE工具和数据库研究每个漏洞,以更好地了解它们。但是相对于研究标准MariaDB镜像中的28个高严重性漏洞,这将会容易得多。

结论

因此,如果您担心容器镜像的安全性 - 而且您最好担心 - 那么Docker Scout是一个维护您的堆栈可见性的优秀工具。而Chainguard的清洁镜像可以让您获得显着的先机。

(本文内容参考:java567.com)

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

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

相关文章

golang web 开发 —— gin 框架 (gorm 链接 mysql)

目录 1. 介绍 2. 环境 3. gin 3.1 gin提供的常见路由 3.2 gin的分组 main.go router.go 代码结构 3.3 gin 提供的Json方法 main.go route.go common.go user.go order.go 3.4 gin框架下如何获取传递来的参数 第一种是GET请求后面直接 /拼上传递的参数 第二种是…

pandas去重、删除重复数据之duplicated()

pandas去重、删除重复数据之duplicated 1.pandas中重复索引问题2.pandas删除重复数据行3.drop_duplicates()函数的语法4.案例&#xff1a;pandas数据处理——取出重复数据 1.pandas中重复索引问题 df df[~df.index.duplicated()]2.pandas删除重复数据行 # 首先导入常用的两个…

AURORA64B66B IP核使用

文章目录 前言一、IP核配置二、设计框图三、上板效果总结 前言 前面我们基于GT 64B66B设计了自定义PHY层&#xff0c;并且也介绍过了基于AURORA8B18B IP核的使用&#xff0c;AURORA8B18B IP核的使用可以说是与AURORA8B18B IP核完全一致&#xff0c;可参考前文&#xff1a;http…

绝地求生:29.1版本爆料杜卡迪联名、新通行证、成长型AUG和异色、战队皮

这回的更新爆料是真的多&#xff0c;虽然不会同时上线&#xff0c;本期杜卡迪因为没有轮毂和轮胎&#xff0c;所以车漆的颜色可能会贵一点&#xff0c;但是似乎会有进阶优惠礼包可以购买 合作者战队 本期合作者战队皮肤感觉比较一般&#xff0c;武器不是热门武器&#xff0c;而…

项目:自主实现Boost搜索引擎

文章目录 写在前面开源仓库和项目上线其他文档说明 项目背景项目的宏观原理技术栈与环境搜索引擎原理正排索引倒排索引 去标签和数据清洗模块html文件名路径保存函数html数据解析函数文件写入函数 建立索引模块检索和读取信息建立索引建立正排索引建立倒排索引jieba工具的使用倒…

物联网可视化平台

随着数字化转型的深入&#xff0c;物联网技术正在成为企业实现智能化、高效化运营的重要工具。物联网可视化平台&#xff0c;作为连接物理世界与数字世界的桥梁&#xff0c;为企业提供了直观、实时的数据展示和监控能力&#xff0c;从而在数字化转型中扮演着关键角色。 一、物…

Android 11 上的文件读写无权限问题

Android 6以上需要动态申请读写权限&#xff0c;但是11以上动态申请了读写权限也是无效。并且手动给予权限没有该按钮。 如上图华为钱包有个所有文件权限、但是百度地图只有仅媒体权限&#xff0c;仅媒体权限&#xff08;动态申请读写权限&#xff09;给予后软件还是没法访问文…

js通过Object.defineProperty实现数据响应式

目录 数据响应式属性描述符propertyResponsive 依赖收集依赖队列寻找依赖 观察器 派发更新Observer完整代码关于数据响应式关于Object.defineProperty的限制 数据响应式 假设我们现在有这么一个页面 <!DOCTYPE html> <html lang"en"><head><m…

Android Studio学习15——多页面情况下再看Activity生命周期

按返回键退出APP时&#xff1a; 走正常页面的退出流程&#xff1a;onPause–>onStop–>onDestroy(会Destroy,因为它从任务栈中退出了) 再点击图标回来时&#xff1a; 走正常页面的创建流程&#xff1a;onCreate–>onStart–>onResume 按Home键退出App时&#xff1a…

Leetcode 581. 最短无序连续子数组

心路历程&#xff1a; 本以为这道题要用动态规划求解&#xff0c;因为题目中这几个关键字与动态规划太匹配了&#xff0c;结果想了半天也没发现dp(i)和dp(i-1)的递推关系。 这道题本意考察双指针的做法&#xff0c;也可以用排序后做比较的方式来做。 注意的点&#xff1a; 1…

Advanced RAG 02:揭开 PDF 文档解析的神秘面纱

编者按&#xff1a; 自 2023 年以来&#xff0c;RAG 已成为基于 LLM 的人工智能系统中应用最为广泛的架构之一。由于诸多产品的关键功能&#xff08;如&#xff1a;领域智能问答、知识库构建等&#xff09;严重依赖RAG&#xff0c;优化其性能、提高检索效率和准确性迫在眉睫&am…

为什么函数式编程应该成为软件开发的未来

它很难学&#xff0c;但是你的代码会产生更少的意外 你可能认为软件产品生命周期中最长最昂贵的阶段是系统的初始开发阶段&#xff0c;因为所有那些伟大的功能都是在最初的想象中创建的。事实上&#xff0c;最困难的部分是之后的维护阶段。这是程序员为他们在开发过程中走捷径付…

探索实践昏暗光线低光照场景下目标检测,基于YOLOv7【tiny/l/x】模型开发构建昏暗光线低光照场景下的目标检测识别系统

昏暗光线低光照条件下的目标检测问题&#xff0c;是机器视觉领域一个长期存在且持续受到关注的挑战。这个问题的背景主要源自现代社会对机器视觉技术的广泛需求&#xff0c;特别是在光线条件不佳的环境下&#xff0c;如夜间监控、自动驾驶、安防系统等场景。在昏暗光线或低光照…

C++:红黑树封装实现map、set

一、map、set的底层结构 前面对map、set等树形结构的关联式容器进行了简单的介绍&#xff0c;了解到map、set都是由红黑树封装实现的。红黑树是一种由二叉搜索树进行平衡处理后的平衡树&#xff0c;其查找、插入、删除等操作的时间复杂度为O(logn)&#xff0c;详情请参考数据结…

neo4j图数据库下载安装配置

neo4j下载地址Index of /doc/neo4j/3.5.8/ 1.说明&#xff1a;jdk 1.8 版本对应的 neo4j 数据库版本 推荐安装3.X版本 2.配置系统环境变量 3.启动 neo4j.bat console 4.访问

【Lavavel框架】——各目录作用的介绍

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

SQLite 4.9的虚拟表机制(十四)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite 4.9的 OS 接口或“VFS”&#xff08;十三&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 1. 引言 虚拟表是向打开的 SQLite 数据库连接注册的对象。从SQL语句的角度来看&#xff0c; 虚拟表对象与任何其他…

【c语言】strncpy函数模拟实现

strncpy函数模拟实现 strncpy函数在cplusplus网站中的定义 模拟实现源码 //模拟实现 #include <stdio.h> #include <string.h> #include <assert.h>char* my_strncpy(char* destination, const char* source, size_t num) {assert(destination && so…

C++ | Leetcode C++题解之第16题最接近的三数之和

题目&#xff1a; 题解&#xff1a; class Solution { public:int threeSumClosest(vector<int>& nums, int target) {sort(nums.begin(), nums.end());int n nums.size();int best 1e7;// 根据差值的绝对值来更新答案auto update [&](int cur) {if (abs(cur…

蓝桥杯-单片机组基础14——定时计数器与延时函数2方法实现长短按功能

蓝桥杯单片机组备赛指南请查看 &#xff1a;本专栏第1篇文章 本文章针对蓝桥杯-单片机组比赛开发板所写&#xff0c;代码可直接在比赛开发板上使用。 型号&#xff1a;国信天长4T开发板&#xff08;绿板&#xff09;&#xff0c;芯片&#xff1a;IAP15F2K61S2 &#xff08;使…