【云原生安全篇】一文掌握Harbor集成Trivy应用实践

news/2024/9/18 15:13:40/ 标签: 云原生, 安全, kubernetes, 容器, 云计算

云原生安全篇】一文掌握Harbor集成Trivy应用实践

目录

  • 1 概念
    • 1.1 什么是 Harbor 和 Trivy?
      • 1.1.1 Harbor
      • 1.1.2 Trivy
    • 1.2 Harbor 与 Trivy 的关系
      • Trivy 在 Harbor 中的作用:
    • 1.3 镜像扫描工作流程
  • 2 实战案例:在Harbor 配置 Trivy
    • 2.1 环境准备
    • 2.2 步骤 1:启用 Trivy 作为漏洞扫描工具
    • 2.3 步骤 2:配置扫描策略
    • 2.4 步骤 3:推送镜像到 Harbor
    • 2.5 步骤 4:查看漏洞扫描结果
    • 2.6 步骤5: 其他操作
  • 3 总结
  • 4 参考资料

❤️ 摘要:随着容器技术的广泛应用,确保容器镜像的安全性变得至关重要。Harbor 是一个强大的企业级容器镜像仓库,而 Trivy 是一款高效的开源安全扫描工具。通过将 Trivy 与 Harbor 集成,企业可以在镜像上传过程中自动进行漏洞扫描,从而增强容器镜像的安全性。本文将简述 Harbor 和 Trivy 的应用,并给出详细的工作流程、配置步骤和验证方法。


1 概念

1.1 什么是 Harbor 和 Trivy?

❤️ 文档参考: 想详细了解Harbor,可以提前读《一文读懂Harbor以及部署实践攻略》; 想详细了解Trivy,可以提前读《【云原生安全篇】一文读懂Trivy 》

1.1.1 Harbor

Harbor 是一个开源的企业级容器镜像仓库管理平台,旨在帮助组织安全高效地存储、管理和分发 Docker 容器镜像。Harbor 还支持多种集成工具,如漏洞扫描工具 Trivy,用于增强镜像安全

1.1.2 Trivy

Trivy 是由 Aqua Security 开发的开源安全扫描工具,能够扫描容器镜像、文件系统、基础设施即代码(IaC)等对象中的已知漏洞。Trivy 提供了快速、准确的扫描结果,帮助开发人员在开发早期识别潜在的安全风险。

1.2 Harbor 与 Trivy 的关系

Harbor 自 2.0 版本开始,默认支持与 Trivy 集成,作为其漏洞扫描工具。通过应用集成,当用户上传镜像到 Harbor 仓库时,Trivy 会自动扫描镜像中操作系统包和应用程序依赖中的已知漏洞,并生成详细的漏洞报告。

Trivy 在 Harbor 中的作用

  • 在镜像推送到 Harbor 仓库后,Trivy 自动触发扫描。
  • Harbor 将扫描结果存储,并可以通过 Web 界面查看扫描的详细信息。
  • Harbor 支持为不同的项目设置不同的漏洞扫描策略(如阻止带有高危漏洞的镜像拉取)。

1.3 镜像扫描工作流程

下图展示了 Harbor 结合 Trivy 进行镜像安全扫描的工作流程:

用户推送容器镜像到 Harbor
Harbor 存储镜像
Trivy 自动扫描镜像漏洞
Harbor 存储扫描结果
用户查看漏洞扫描报告
扫描发现高危漏洞?
Harbor 阻止镜像拉取
镜像可正常拉取

❔ 流程说明:

  1. 用户通过 Docker CLI 或 CI/CD 工具将容器镜像推送到 Harbor 容器镜像仓;
  2. Harbor 在接收到镜像后,启动镜像存储过程,同时触发 Trivy 进行漏洞扫描;
  3. Trivy 解析镜像中的操作系统包和应用依赖,与漏洞数据库检索比对,然后查找已知漏洞;
  4. 漏洞扫描完成后,Harbor 将扫描结果存储到本地数据库,通过Web页面方式供管理员或开发者查看;
  5. 如果扫描结果中包含高危漏洞,根据 Harbor 的安全策略,可能阻止该镜像的拉取,直到漏洞得到修复。

2 实战案例:在Harbor 配置 Trivy

下面介绍如何配置 Harbor 与 Trivy 进行集成,确保每次镜像推送到 Harbor 后都能自动触发 Trivy 的漏洞扫描。

2.1 环境准备

  • 提前部署并运行的 Harbor 实例(要求2.0 及以上版本)。
  • Harbor 配置使用 Trivy 作为默认扫描器。

2.2 步骤 1:启用 Trivy 作为漏洞扫描工具

因为我是使用docker-compose官方方式部署,如果要安装trivy组件,需要先执行以下命令:

cd /harbor
sudo ./install.sh --with-trivy

检查harbor的状态

root@harbor:~/harbor/harbor# docker-compose psName                   Command                State                 Ports
------------------------------------------------------------------------------------------
harbor-core         /harbor/entrypoint.sh        Up (healthy)
harbor-db           /docker-entrypoint.sh 13     Up (healthy)14
harbor-jobservice   /harbor/entrypoint.sh        Up (healthy)
harbor-log          /bin/sh -c /usr/local/bin/   Up (healthy)   127.0.0.1:1514->10514/tcp...
harbor-portal       nginx -g daemon off;         Up (healthy)
nginx               nginx -g daemon off;         Up (healthy)   0.0.0.0:80->8080/tcp,:::80->8080/tcp,0.0.0.0:443->8443/tcp,:::443->8443/tcp
redis               redis-server                 Up (healthy)/etc/redis.conf
registry            /home/harbor/entrypoint.sh   Up (healthy)
registryctl         /home/harbor/start.sh        Up (healthy)
trivy-adapter       /home/scanner/entrypoint.s   Up (healthy)
  • 看到harbor的组件比之前多个trivy的容器

可以进入trivy容器,查看trivy的信息

root@harbor:~/harbor/harbor# docker exec -it trivy-adapter bash

查看版本和数据库

scanner [ / ]$ trivy version
Version: 0.52.2
Vulnerability DB:Version: 2UpdatedAt: 2024-09-13 12:12:21.448692961 +0000 UTCNextUpdate: 2024-09-13 18:12:21.4486927 +0000 UTCDownloadedAt: 2024-09-13 15:19:40.854214676 +0000 UTC
Java DB:Version: 1UpdatedAt: 2024-09-13 01:08:50.455768046 +0000 UTCNextUpdate: 2024-09-16 01:08:50.455767885 +0000 UTCDownloadedAt: 2024-09-13 15:20:47.499356951 +0000 UTC

登录Harbor页面检查trivy应用是否启用;

点击“审查服务”,在界面中,可以看到Trivy已经作为默认的漏洞扫描器并状态是 “启用”

2.3 步骤 2:配置扫描策略

为确保所有上传的镜像都能被自动扫描,你需要为项目设置自动扫描策略。

操作路径:项目→项目名称“hcie”→配置管理

找到 漏洞扫描,选择 自动扫描镜像,以确保每次推送镜像后,Trivy 会自动扫描该镜像。

2.4 步骤 3:推送镜像到 Harbor

在hcie项目中,先删除原镜像,重新上传一个nginx:1.26.1的镜像。

  1. 登录到 Docker 客户端:
    docker login harbor.zx
    
  2. 标记要推送的镜像:
    docker tag registry.cn-hangzhou.aliyuncs.com/hcie/nginx:1.26.1 harbor.zx/hcie/nginx:1.26.1
    
  3. 推送镜像到 Harbor:
    docker push harbor.zx/hcie/nginx:1.26.1
    

2.5 步骤 4:查看漏洞扫描结果

镜像推送完成后,Harbor 会自动触发 Trivy 进行漏洞扫描。您可以通过 Harbor 控制台查看扫描结果:

操作路径: 项目→项目名称“hcie”→名称hcie/nginx→Artifacts

点击该镜像的标签(tag),在详情页面中,点击 漏洞 标签,查看 Trivy 生成的漏洞扫描报告。报告中列出了所有检测到的漏洞,按严重性分类,并提供相应的修复建议。

2.6 步骤5: 其他操作

关于漏洞扫描,还有一些功能介绍说明:

路径:审查服务→漏洞→定期扫描所有

  • 手动扫描:这里你可以点击开始扫描, 手动触发对现有所有镜像的漏洞扫描;
  • 定时扫描:也可以设置定时扫描策略,如按小时/天/周/自定义

自定义任务,按crontab的格式:

安全中心页面,可以看到全局镜像的扫描结果,以及数据可视化展示,包括漏洞总览、最危险的5个 Artifacts、漏洞详细列表。

3 总结

通过将 HarborTrivy 集成,可以在容器镜像推送到镜像仓库的过程中自动执行漏洞扫描,确保开发和运维团队在开发生命周期能尽早发现并修复潜在的安全问题。

通过本文的配置和工作流程,您可以轻松设置 Harbor 和 Trivy 的集成,确保容器镜像在上线前通过严格的安全检查。

4 参考资料

[1] harbor-scanner-trivy的github项目

[2] harbor脚本部署

[3]harbor漏洞扫描


http://www.ppmy.cn/news/1525712.html

相关文章

Android 签名、空包签名 、jarsigner、apksigner

jarsigner是JDK提供的针对jar包签名的通用工具, 位于JDK/bin/jarsigner.exe apksigner是Google官方提供的针对Android apk签名及验证的专用工具, 位于Android SDK/build-tools/SDK版本/apksigner.bat jarsigner: jarsigner签名空包执行的命令: jar…

【系统架构师】-论文-2024-2009年系统架构师历年论文题目

2024年5月 大数据Lambda架构的应用与分析 云原生云上DevOps运维应用与分析 模型驱动软件开发方法与应用 论单元测试在软件回归测试中的应用和分析 2023年 论面向对象设计的应用与实现 论多数据源集成的应用与实现 论软件可靠性模型的设计与实现 论边缘计算技术的设计与实现 …

openssh移植:精致的脚本版

前置文章: busybox移植:全能脚本版-CSDN博客 zlib交叉编译-CSDN博客 openssl移植:精致的脚本版-CSDN博客 源码下载 官网:http://www.openssh.com/ 下载了一个很新的版本 ftp://mirrors.sonic.net/pub/OpenBSD/OpenSSH/portable/openss…

android API、SDK与android版本

随着 Android 系统的不断更新,API Level 也会随之增加。每个新的 API Level 都引入了新的功能、改进旧的功能,或者弃用了旧的 API。开发者在开发应用时,需要指定目标 API Level,也就是应用最低支持的 Android 版本。 API Level 与…

C++速通LeetCode简单第9题-二叉树的最大深度

深度优先算法递归: /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right…

Java面试题·解释题·单例模式、工厂模式、代理模式部分

系列文章目录 Java面试题解释题JavaSE部分 Java面试题解释题框架部分 Java面试题解释题单例模式、工厂模式、代理模式部分 文章目录 系列文章目录前言一、设计模式1. 单例模式1.1 单例模式的定义1.2 单例模式的实现方法 2. 工厂模式2.1 工厂模式的定义2.2 工厂模式的实现方法2…

JAVA毕业设计175—基于Java+Springboot+vue3的医院预约挂号管理系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3的医院预约挂号管理系统(源代码数据库)175 一、系统介绍 本项目前后端分离(可以改为ssm版本),分为用户、医生、管理员三种角色 1、用户&#x…

使用Python自动抓取亚马逊网站商品信息

全量数据抓取不现实,但可以自动化、小批量采集亚马逊数据,现在可用的工具也非常多,包括Python以及一些专门的爬虫软件,我用过几个比较好入手的,像web scraper、八爪鱼、亮数据。 比如亮数据爬虫,它提供数据…

Qt C++ Udp相关知识学习(一)

文章目录 udp 单播消息,是什么意思特点:使用场景:例子:udp 广播消息,是什么意思特点:使用场景:示例:参考udp 单播消息,是什么意思 UDP 单播消息(UDP unicast)是指使用用户数据报协议(UDP)通过网络发送消息的过程,消息的接收者是单个特定的目标设备或IP地址。 特…

uniapp与webview进行数据通信

uniapp与webview进行数据通信&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width,initial-scale1,minimum-scale1,maximum-scale1,user-scalableno"…

Redis简介、常用命令及优化

文章目录 一、关系数据库​​与非关系型数据库概述1. 关系型数据库2. 非关系型数据库3.关系数据库与非关系型数据库区别 二、Redis简介1.Redis的单线程模式2.Redis 优点3.Redis 缺点 三、安装redis四、Redis 命令工具五、Redis 数据库常用命令六、Redis 多数据库常用命令七、Re…

【Linux取经之路】软件包管理器yum编辑器vim及其配置

目录 软件包管理器yum 1、什么是软件包 2、关于lrzsz 3、安装软件 4、查看软件 5、卸载软件 编辑器——vim 1、vim的基本概念 2、vim的基本操作 3、vim普通模式命令集 4、底行模式命令集 5、vim的配置 配置sodu权限 软件包管理器yum 1、什么是软件包 在Linux下…

大顶堆+动态规划+二分

前言&#xff1a;我们这一题需要分类讨论 对于我们左边和右边的我们需要预处理 有点类似反悔堆的做法&#xff0c;得出i之前取出 m 个元素代价最小&#xff0c;并且这个代价一定是递减的&#xff08;可以推导一下&#xff09; 题目地址 #include<bits/stdc.h> using name…

使用脚手架来创建 express 项目

使用脚手架&#xff08;scaffold&#xff09;可以快速搭建Express应用程序的基本结构。Express自身提供了一个官方脚手架工具叫做express-generator&#xff0c;它可以帮助你快速地生成一个包含基本文件结构的Express项目。 安装Express Generator 首先&#xff0c;你需要全局…

AI在医疗领域:MEDIC 全面评估大模型在医疗领域的应用

随着医疗领域中大型语言模型&#xff08;LLMs&#xff09;的迅猛发展&#xff0c;公众对于其评估的需求日益增长&#xff0c;要求超越传统的USMLE等基准测试&#xff0c;以更全面地反映模型在现实世界中的应用性能。尽管现实世界的评估对于衡量模型的实用性具有重要价值&#x…

【uni-app】小兔鲜项目--拉取小兔鲜儿项目模板代码

1. 拉取小兔鲜儿项目模板代码 模板地址 git clone -b template https://gitee.com/heima-fe/uniapp-shop-vue3-ts.git heima-shop步骤 在写代码的文件夹&#xff0c;输入CMD&#xff0c;打开终端&#xff0c;直接执行克隆命令 2.通过VS Code打开heima-shop文件夹&#xff0…

c语言 stdio.h 介绍

stdio.h 是 C 标准库中的一个头文件&#xff0c;提供了输入和输出功能的函数和宏。以下是它的主要内容和功能&#xff1a; 主要功能 输入输出函数&#xff1a; printf&#xff1a;格式化输出到标准输出&#xff08;通常是终端&#xff09;。scanf&#xff1a;从标准输入&#…

计算机毕业设计Python知识图谱美团美食推荐系统 美团餐厅推荐系统 美团推荐系统 美食价格预测 美团爬虫 美食数据分析 美食可视化大屏

《Python知识图谱美团美食推荐系统》开题报告 一、研究背景与意义 随着信息技术的飞速发展和互联网应用的普及&#xff0c;人们的消费习惯逐渐从线下转移到线上&#xff0c;外卖行业迎来了前所未有的发展机遇。美团作为国内领先的生活服务电子商务平台&#xff0c;拥有庞大的…

新能源汽车 BMS 学习笔记篇—BMS 基本定义及分类

一、BMS 定义 1、概念&#xff1a; BMS&#xff08;Battery Management System&#xff09;即电池管理系统&#xff0c;其管理 对象是二次电池&#xff08;充电电池或蓄电池&#xff09;&#xff0c;其主要目的是电池的利用率&#xff0c;防止电池出现过度充电和过度放电&…

Next.js 14 如何在服务端页面中使用客户端渲染组件

在Next.js中&#xff0c;默认就是使用服务端渲染的&#xff0c;那如何在服务端页面中包含客户端组件呢&#xff0c;以下是试例&#xff1a; 在ArticlePage.js中&#xff1a; import DeleteButton from /components/DeleteBtnexport default async function ArticlePage(){retu…