共计 3199 个字符,预计需要花费 8 分钟才能阅读完成。
🌟 容器技术的衰亡,让应用程序更加轻量化和可移植,大大提高了利用交付效率。但容器中的利用也面临各种平安威逼,容器及其镜像平安不可小觑。
近日,在「DevSecOps 软件平安开发实际」课程上,极狐(GitLab) 高级业余服务交付工程师唐恩、极狐(GitLab) 研发经理张頫,分享了容器镜像扫描的原理及代码实现,并演示了极狐 GitLab 容器镜像扫描性能,帮忙大家进一步把握容器平安。
以下内容整顿自本次直播,你也能够点击👉观看视频回放或下载 PPT。Enjoy~
什么是容器镜像扫描?
首先,回顾 2 个基本概念:
- 容器:一种打包形式,用于封装应用程序的代码和依赖项,使应用程序与底层基础架构拆散,使其能够在不同环境中运行。容器技术大大提高了利用交付与迁徙效率,尤其在云原生场景下,其价值更加凸显。Docker 是目前最为风行的容器计划。
- 容器镜像:用于创立容器的文件模板,存储了运行环境和利用所需的文件系统及软件。通过应用不同的容器镜像,能够创立出运行不同利用或操作系统环境的容器实例。
容器镜像扫描 则是指 对容器镜像进行平安检测 的过程,属于 DevSecOps 中 Sec 的一环。通过检测和评估已知威逼与破绽,最大限度升高危险,确保镜像安全性与衰弱性。
为什么要进行容器镜像扫描?
容器技术给软件交付带来前所未有的灵活性与效率,但也不可避免地减少了平安面临的不确定性。
近年来,各种报告和统计数据显示,容器平安正受到越来越多的关注,这也推动容器镜像扫描等平安防护措施的广泛应用。
例如,Datadog 公布的报告显示,目前已有 25% 的公司采纳了 Docker 技术,相较前一年晋升 6%,表明 Docker 使用率快速增长,渗透到了越来越多企业中。
同时,Sysdig 公布的容器破绽报告显示,目前有 75% 的容器存在重大或危急级别的破绽。这表明容器平安成为严厉问题,须要企业高度重视。
容器技术带来的便当,与容器平安,两者如何兼得?容器镜像扫描等平安工具和机制成为解题要害。
极狐 GitLab 容器镜像扫描 4 大劣势
➤ 一站式平台,无需额定工具
极狐 GitLab 自身是一站式 DevSecOps 平台,内置集容器镜像扫描,无需装置和保护额定工具。
➤ 简略易用,一行配置高度自动化
容器镜像扫描属于极狐 GitLab 流水线模板之一。用户在流水线配置文件中,通过 include
字段即可援用,容器镜像扫描整个流程就会主动实现,包含拉取镜像、启动扫描器、生成报告等步骤。
➤ 灵便管制,高效和平安完备
容器镜像扫描能够利用于开发、构建、测试、生产等各环境,实现容器镜像全生命周期的平安治理。
得益于极狐 GitLab 弱小的流水线性能,用户能够通过配置将把容器镜像扫描管制到某一阶段中。例如在开发环节,不进行容器镜像扫描;在公布环节主动触发容器镜像扫描,灵便管制,达到既高效又平安的目标。
➤ 报告可视化,清晰详尽便于解决
容器镜像扫描实现后,通过 CI/CD 流水线中的 artifacts
关键词指定将报告输入为 JSON 文本,并主动解析为可视化报告(如下图),报告中蕴含镜像概述、检测到的破绽清单、危险等级等信息,清晰详尽,不便用户剖析与解决。
除了在极狐 GitLab 流水线界面能够查看破绽报告,在「平安与合规 → 破绽报告」也可查看最新破绽状况(如下图)。
由 Merge Request 所触发的容器镜像平安扫描,可间接 在 Merge Request 页面中查看报告(如下图),不便用户更好地审查代码。
如何启用极狐 GitLab 容器镜像扫描?
总体流程
极狐 GitLab 容器镜像扫描的总体流程如图所示:
- 用户应用 container-scanning.yml 定义作业;
- 极狐 GitLab 计算变量值,生成如下 Key-value;
- 极狐 GitLab 抉择 Runner 来执行此作业,拉取镜像并启动容器;
- 依据不同的 Linux 发行版和 CPU 架构生成对应的容器镜像。
前提条件
启用极狐 GitLab 容器镜像扫描,须要满足以下前提条件:
- 流水线中需蕴含 Test Stage(模板中定义的 Stage 名为 Test);
- 具备 Docker 或 Kubernetes 执行器的 Runner,用于拉取和扫描镜像;
- Docker Engine 版本高于 18.09.03;
- 有一个镜像仓库,用于寄存打包好的镜像,让扫描器可能到指定指标拉取镜像进行扫描。
在流水线中援用容器镜像扫描
include:
- template: Jobs/Build.gitlab-ci.yml
- template: Security/Container-Scanning.gitlab-ci.yml
此处倡议应用极狐 GitLab 的 Container Registry 做镜像仓库,十分便于应用容器镜像扫描,简直不须要额定配置,就能够主动推送到镜像仓库,拉取扫描。
留神:如果是应用内部镜像仓库,须要自定义 CS_REGISTRY_USER 和 CS_REGISTRY_PASSWORD。
Include YAML
Container-scanning 基于 Ruby,第 1 个作用就是编译 container-scanning 所需的所有镜像。
极狐 GitLab 将预编译打包好的镜像,汇总稀释为 container-scanning :5,其中蕴含了十分丰盛的内容。其背地的技术是 Docker manifest——manifest 作为元数据的具体表达形式,蕴含了形容一个镜像所需的全副信息,这使得 Docker 可能解决各种镜像,包含单架构、多架构以及带有多个 Tag 的简单镜像。
变量解析
在所有极狐 GitLab CI 模板中,最重要的就是变量。
那么极狐 GitLab 中变量的工作形式是什么?答案如下:
- 当用户在 .gitlab-ci.yml 文件中定义变量时,极狐 GitLab 会将所有变量解析为键值对;
- 将这些键值对作为环境变量,传递给 Runner;
- Runner 可在执行 Job 时,查找和应用这些环境变量。
这种变量机制使得 .gitlab-ci.yml 文件具备很大灵活性。用户能够在文件中定义任意变量,这些变量值会在运行 Job 时被 Runner 辨认和应用,简化了 Job 之间以及 Job 与运行环境之间的交互,用户无需硬编码值,即可应用变量达到解耦成果。
同时,这也使得 .gitlab-ci.yml 文件可作为模板,其中变量值能够依据执行 Job 环境进行动静替换。一个模板文件即可在不同环境中重复使用,进步文件复用性。
最终报告
Container-scanning 通过调用 trivy 和 grype 等扫描工具,检测容器镜像中的破绽与危险。而这些工具各自具备本人的报告格局,container-scanning 的第 2 个作用就是将 trivy 和 grype 的检测后果转换为对立的 极狐 GitLab 自定义平安报告模式。
这实现了检测的灵活性与后果的标准化,为用户都带来更佳体验;也体现了极狐 GitLab 在平安检测与治理方面的重要价值,使得极狐 GitLab 可能成为 DevOps 过程中平安保障的关键环节。
总结
容器镜像扫描使得研发团队能够在晚期发现容器镜像中的潜在破绽与危险,及时进行修复与更新,确保最初交付到生产环境的镜像达到符合标准的安全等级,进步软件交付的整体安全性与可靠性。
事实上,容器镜像的破绽与危险并非 Docker 或 Kubernetes 等技术自身的问题,而是咱们在应用这些技术构建镜像与微服务时带入的缺点与谬误。唯有对整个交付流程的每个环节进行安全检查与审核,继续检测存在的破绽与谬误,及时予以修复,软件交付的安全性能力得以系统性的进步。这也响应了 DevSecOps 理念——把平安个性和控制措施深度嵌入到 DevOps 的每一个过程与实际中,使得研发团队能够在放弃高效的同时,兼顾软件产品的平安与品质,真正实现精英研发效力。
想理解更多极狐 GitLab DevSecOps 7 大实用功能?点击参加流动👉DevSecOps 7 大直播课程正在进行中,立刻上车,启程软件平安开发实际之旅!