云原生安全:风险挑战与安全架构设计策略
概述
数字化转型已经成为当今最流行的话题之一,大部分企业已经开启自身的数字化转型之旅,在未来企业只有数字化企业和非数字化企业之分。通过数字经济的加速发展,可以有效推动企业数字化转型的步伐。云计算作为数字化转型的底座和重要的载体,在企业中大规模的部署。
随着云计算市场规模的不断扩大,应用场景越发丰富,云计算技术也在逐年成熟和优化。从以资源为中心的云计算 1.0 时代,已跨越到了以应用为中心的云计算 2.0 时代,即云原生时代。云原生作为数字化转型的基石得到了广泛的应用,随之也带来了诸多新型安全的挑战,本文将重点介绍在云原生时代下,该注意哪些安全风险,如何进行安全体系的优化。
什么是云原生?
云原生是一种新型的云计算技术体系,也是云计算技术发展的成果和未来的趋势,不仅包括构建和运行应用程序的方法,还提供了一套技术体系和方法论。正如“原生”两字所描述的,应用程序从设计之初就考虑到了云的环境,原生为云而设计,在云上以最佳姿态运行,充分利用了云的优点,使我们的应用更灵活,更敏捷、更稳定。

图 1-IT 应用服务器发展进程
云原生带来的变化
并不是我们常说的将传统应用迁移上云,就是云原生了。而是应用都是专门针对云环境而设计开发的,能够充分利用和发挥云平台的各种优势,如敏捷、弹性扩展、高可用等。云原生包括的技术很多,如容器技术、 Devops 、微服务等技术,这也是云原生常说的三驾马车。并且支持私有云、公有云和混合云等各种环境,具备端到端、基于策略控制和工作负载可移植等能力。
云原生技术给企业数字化转型带来巨大的技术支撑契机,助推企业更好的构建数字化的底座,支撑数字化业务的发展。从最初的上云到用好云、管好云。目前云原生技术无处不在,从互联网企业到传统企业都在积极部署和实践。它的应用,直接改变了企业的开发方式、运营方式和管理模式,对企业的组织与协作方式产生了重大的影响。

图 2- 云生四要素及设计理念
云原生时代下的安全
随着云原生的快速发展与广泛应用,新的技术被引入到企业的技术架构中,如容器技术、微服务、 DevOps 、 Serverless 等。之前传统的安全防御体系已经无法适应,导致云原生应用程序面临着极大的安全风险。
云原生安全面临的挑战
首先我们要先搞清楚一个概念,传统环境下的安全问题在云原生环境下依然是存在的,比如 DDOS 攻击、数据泄露、越权、数据篡改、漏洞攻击等。但由于云原生架构可以使应用充分利用云计算的特性,传统的防御手段就显得有些捉襟见肘。因为传统安全更重视边界防护,而云原生安全更重视内在的持续安全,所以云原生环境面临的安全挑战也逐渐显现:
-
镜像安全风险:
容器作为云原生的三驾马车之一,是虚拟化的主力军,业务平台的基石。通过容器我们可以轻松实现“一次构建,随处运行”。容器是基于镜像创建的,即容器中的进程依赖于镜像中的文件。镜像本身就是一个只读的模版,包含独立的文件系统和预置的应用,可以方便的、批量的创建容器。
目前企业中应用的容器大部分是来自第三方的镜像库,比如 Docker hub 。因为他们很多是定制的、开源的,所以很大可能存在漏洞,或者被提前嵌入恶意代码。随着导入生产环境运行,就很可能成为攻击者的“跳板机”,对内部环境发起攻击。
-
运行时安全风险:
在云原生架构中,一个容器内只有一个应用,简单来说就是为每个业务创建单独的容器环境,这些应用可独立地进行开发、管理,互不影响。多个容器之间进行通过 API 进行通信,导致调用关系较为复杂,资源调整较为动态,给运行时安全检测和防护带来了挑战。逃逸漏洞就是最典型的一个漏洞,黑客利用某些漏洞或者管理员的配置问题,从容器环境中跳出而获得宿主机权限。因此,一旦单个容器环境存在逃逸漏洞,可能就会导致整个集群沦陷。针对容器运行时安全的防护,同样值得安全人员警惕。
-
配置错误风险:
如果与云相关的系统、工具或资产配置有误,就会出现配置错误,进而危及系统,使其面临攻击或数据泄漏隐患。根据《 2020 年云安全报告》,配置错误是云的头号威胁, 68% 的公司表示配置错误是他们最担心的问题(高于上一年的 62% )。其次是未经授权的访问 (58%) 。如使用默认密码或无密码访问管理控制台,这一比例高达 30% 。虽然“默认密码或无密码访问”这一现象仅凭常识就可以避免,但要确保整个云基础设施都能正确配置则较为复杂。
-
应用安全风险:
众所周知,云原生的应用也源自于传统的应用,所以传统的应用风险自然也被继承了下来,如失效的对象级授权、失效的用户身份认证、注入攻击、过度的数据暴露、使用含有已知漏洞的组件、不足的日志记录和监控等风险,只是云原生更加云化,使用了大量的开源组件。从某些应用中,黑客可以找到公布的或者未公布的多个漏洞进行利用,所以说开源组件代码漏洞正在成为云原生环境中常见的风险,由此为云原生应用的安全带来了更多不确定性。
典型的攻击场景
通过上文大家对云原生和云原生安全有了一个基本认识,本章将通过两个简单的攻击场景案例对云原生安全领域场景攻击技术进行分析,帮助读者理解和提高防御能力。
-
镜像攻击场景
由于容器都是由镜像创建,所以镜像的所有特征均会被容器继承,如恶意代码、恶意软件、错误的配置甚至应用漏洞等。所以通过此案例,读者可以了解到镜像安全的重要性。
2021 年 6 月某单位云平台运维人员编制一段代码,用于远程调用查询服务。上线在即,镜像被批量部署。由于没有做权限方面的限制,导致数据被恶意查询。关闭关键应用后,并没有完全杜绝,通过开发分析,查到镜像自身代码原因,修改并替换容器后,漏洞被修复。
-
容器逃逸攻击场景
像前文所述,容器逃逸造成的安全风险和后果是非常大的,甚至可以造成整个集群的瘫痪。相比之前的虚拟机而言,容器攻击主要在隔离性上,也就是容器逃逸,从容器环境逃逸到宿主机的攻击。
CVE-2019-5736 是 2019 年 2 月 11 日在 OSS-Security 邮件列表披露的 runc 容器逃逸漏洞。在 Docker18.09.2 之前的版本中使用的 runc 版本小于 1.0-rc6 ,因此,攻击者可以重写宿主机上的 runc 二进制文件,从而以 root 的身份执行命令,获得宿主机的 root 权限。(此案例来自于某知名杂志)
通过此漏洞,攻击者就可以绕过容器直接对宿主机进行相关指令的执行,对宿主机甚至集群造成极大影响。
云原生安全架构设计
云原生技术的发展趋势越发突出,面对云原生环境中存在的一系列安全挑战和风险,各企业急需构建一套适应自身企业发展的、基于云原生全生命周期的安全防护体系架构,从而提升安全防护能力,实现业务的连续性、可靠性和稳定性运行。
云原生安全不是某一个软件、某一个系统,而是一个体系。从开发、编译、构建、运行时到运营整个环节,在宿主机、编排平台、虚拟化、应用程序等多个角度提供了全面的安全保护能力。

图 3- 云原生安全架构
云原生环境的稳定运行离不开云原生安全所倡导的体系架构,利用此架构从整个应用的生命周期中持续整合安全性的实践,确保安全性是应用程序的核心部分,最大限度地减少安全漏洞并提高合规性。
设计的原则
在云原生安全防护体系的建设过程中,需要从多个方面进行安全提升,正如云原生安全架构所示,建议遵循零信任、安全左移、持续监控 & 响应、工作负载可观测四个安全原则进行建设。
-
零信任
零信任应该是当下安全圈最火热的代名词之一,很多安全公司都在零信任方面进行研究和探索。其核心思想是“永远信任、持续认证”,要求所有用户,无论是在组织内部还是外部,在被授予或保留对应用程序和数据的访问权限之前,都必须对安全配置和状态进行身份验证、授权和持续验证,杜绝了传统安全思想中,只要进入内网,再东西向访问都是安全、可信的行为,所以说它是一个保护基础设施和数据的框架。
零信任主要关注三个关键的原则:一是持续认证,始终验证所有资源的访问权限;二是限制访问的范围和影响,将影响范围降到可控范围内;三是自动收集上下文,整合安全用户访问行为,从多层面预防和简化颗粒度来确保云原生环境安全。鉴于此,企业在构建云原生安全架构的时候,一定要考虑和融入零信任体质,充分利用零信任的优势提高整体架构的安全性、降低安全复杂性和降低运行开销成本等。
-
安全左移
传统的安全防御体系更多的关注在交付运维后,当发现安全漏洞和问题,再修复的过程是很痛苦的,而且成本也较高。所以,在云原生的安全架构中更强调“早发现、早预防、早处理”。从应用的开发阶段,安全就要介入,也就是所谓的“安全左移”。在 DevSecOps 组织模式中,左移意味着在软件开发生命周期的传统线性流程中将安全流程向左移动。最常见的就是测试左移和安全左移。
通过左移,摒弃了传统上待应用开发完成后,安全团队才进行各种测试的场景。这样在应用程序开发周期中就可以更早的发现问题和修复漏洞,从而缩短开发周期,提高交付质量。安全左移,意味着在整个开发生命周期内实施安全措施,而不是在周期结束后才实施。其目标就是设计具有内生安全最佳实践的软件,并在开发过程中今早检测和修复潜在的安全问题和漏洞,从而更容易、更快速、更经济地解决安全问题。
-
持续监控 & 响应
众所周知, DevOps 是云原生的三驾马车之一,其重要性不言而喻。它是一个自动化流程,可以有效地融合开发、质量和运维三个团队的协作,加速应用程序的迭代。随着部署在云上的应用程序逐渐增多,安全问题也备受关注。
所以需要通过持续监控 & 响应的机制来跟踪和定位安全问题,给安全人员提供处理问题的必要数据,并提供有关问题的反馈,辅助安全人员分析并及时采取行动来发现安全问题。这对于实施和优化各种安全措施尤为重要,如安全事件的响应、威胁评估、数据库取证以及根本原因分析等。
-
工作负载可观测
在云原生的环境内,运行着多种软件应用、 web 服务数据库等,复杂程度不言而喻。所以梳理好云原生环境工作负载有助于安全人员了解运行的各种应用和数据库,将工作负载之间的访问关系可视化有助于进一步了解业务之间的调用关系。最终通过这样的安全观测,可以为开发和安全团队提供统一的上下文可见性,使其安全地构建、部署和运行现代动态环境中的可扩展应用程序。
云原生安全发展趋势
企业的数字化转型热度逐渐升温,是推动企业发展的重要手段,云计算技术作为数字化转型的基石和底座,得到了广泛的应用。随着技术的变更和升级,云计算已经进入 2.0 时代,即云原生时代。不得不说,云原生的发展加速了企业的数字化转型步伐,促进了企业 IT 架构及组织的变革。
云原生应用的发展和迅速普及,给云原生安全带来挑战的同时,也带来了机遇,其重要性也越来越突出。在未来,云原生的发展趋势包括以下几个方面:
-
云原生安全技术发展
云原生应用的普及已经成为趋势,越来越多的企业开始实践基于云原生的应用,在容器、微服务、 Serverless 、 DevOps 、服务网格等多种新技术的加持下,充分享受云原生带来的红利。自然云原生安全技术也就必须进行相应的升级或优化,符合新技术的发展要求。比如 5G 场景、边缘计算场景下如何确保容器的安全、镜像的安全、应用的安全等。
-
云原生安全人才培养
云原生技术对于很多公司的 IT 从业者而言还可能是个新的概念,尤其是传统企业,还需要更多的学习和认识。为了更好的运营云原生的技术平台,确保云原生应用的安全,在未来急需培养一批具有开源思想、安全运营理念的云原生安全专业人员。否则安全将成为企业推广云原生技术的一个绊脚石。
-
云原生安全标准建立
企业各自发展历史的不同,在安全方面的积淀也是有所差异。很多企业根据ISO27001 已经制定了自己的信息安全管理体系,根据等保构建了符合企业安全需要的安全风险防御体系。在云原生环境下,新的资源开始由资产变为服务,对现有的 IT 架构和安全标准提出了挑战。所以未来标准定制团队,必须根据业务的实际发展和安全的发展趋势,重新定制或升级现有的安全标准,以满足业务的连续性、稳定性运行的要求。
-
云原生安全运营
无论是云计算 1.0 还是 2.0 ,技术一直在更新,只有运营理念不变,就是 “三分建设、七分运营” 。建设仅仅是满足了有还是没有,只有运营才能解决是否有用的问题。随着各个企业在安全建设方面的投资增加,安全设备和防御能力逐渐完善,就需要安全团队将更多的能量和精力用于信息安全运营。
不得不说一下,云原生安全运营与传统的安全运营还是有一定区别的,云原生环境的不可变基础设施的属性,觉得了安全必须要具备敏捷性、灵活性的特点,不可能缝缝补补。所以在安全方面一定要参考上文所讲的架构设计原则进行合理的安全运营安排,确保安全运营工作可以更好的推动业务的落地和发展。
结束语
文章针对云原生的概念,给企业带来的变化及给云原生的安全带来的挑战和安全的架构设计进行了简单的介绍与普及。同时也阐述了云原生安全的未来发展趋势和方向。安全问题在任何时代都会有,企业需要在不同的阶段应用不同的安全方案对业务进行保护。采取有效的措施来管理和保护云环境中的应用和数据的安全。文章多次强调云原生安全是未来云安全的发展方向之一,企业 IT 必须重视并加强对其技术的研究和实践,从而确保企业应用在云环境下的安全。
相关文章:
云原生安全:风险挑战与安全架构设计策略
概述 数字化转型已经成为当今最流行的话题之一,大部分企业已经开启自身的数字化转型之旅,在未来企业只有数字化企业和非数字化企业之分。通过数字经济的加速发展,可以有效推动企业数字化转型的步伐。云计算作为数字化转型的底座和重要的载体…...
c语言-文件的读写操作
文章目录 前言一、文件基础1.1 文件的分类1.2 文件路径和文件名 二、文件的打开和关闭2.1 文件指针2.2 文件的打开和关闭 总结 前言 本篇文章介绍c语言的文件读写操作。 一、文件基础 1.1 文件的分类 在c语言中,从文件的功能角度来看,文件可分为以下两…...
Python处理日期和时间库之arrow使用详解
概要 日期和时间处理是许多应用程序中的常见任务,但在 Python 中,标准库中的 datetime 模块有时可能会让这些任务变得复杂和繁琐。幸运的是,有一个名为 Arrow 的第三方库,它提供了简化日期和时间处理的功能,使其更加直…...
架构师之路(十四)计算机网络(网络层)
前置知识(了解):计算机基础。 作为架构师,我们所设计的系统很少为单机系统,因此有必要了解计算机和计算机之间是怎么联系的。局域网的集群和混合云的网络有啥区别。系统交互的时候网络会存在什么瓶颈。 网络层提供主机…...
Spring Boot开发Spring Security
这里我对springboot不做过多描述,因为我觉得学这个的肯定掌握了springboot这些基础 导入核心依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐security</artifactId> </depen…...
gin介绍及helloworld
1. 介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单&…...
vue3 自动引入 ref reactive...
npm i unplugin-auto-import -D vite.config.js import { defineConfig } from vite; import vue from vitejs/plugin-vue; import AutoImport from unplugin-auto-import/vite;export default defineConfig({plugins: [vue(),AutoImport({// 自动导入 Vue 相关函数࿰…...
软考复习之软件工程篇
软件生命周期 问题定义:要示系统分析员与用户进行交流,弄清”用户需要计算机解决什么问题”然后提出关于“系统目标与范围的说明”,提交用户审查和确认 可行性研究:一方面在于把待开发的系统的目标以明确的语言描述出来…...
MySQL(七)MySQL和Oracle、PostgreSQL的区别
文章目录 一、MySQL和Oracle1.1 基本差别1.2 使用区别 二、MySQL和PostgreSQL2.1 基本差别2.2 使用差别 本系列文章: MySQL(一)SQL语法、数据类型、常用函数、事务 MySQL(二)MySQL SQL练习题 MySQL(三&…...
(2)(2.4) CRSF/ELRS Telemetry
文章目录 前言 1 ArduPilot 参数编辑器 前言 !Note ELRS(ExpressLRS)遥控系统使用穿越火线协议,连接方式类似。不过,它不像穿越火线那样提供双向遥测。 TBS CRSF 接收机与 ArduPilot 的接口中包含遥测和遥控信息。…...
服务器发送http请求
1、发送GET请求 curl localhost:9009/setCreateDataItem?a1&bnihao 2、发送POST请求 curl -X POST -d a1&bnihao localhost:9009/setCreateDataItem 3、发送json格式请求: curl -H "Content-Type: application/json" -X POST -d {"abc…...
Effective Objective-C 学习第二周
理解“属性”这一概念 “属性”(property)是 Objective-C 的一项特性,用于封装对象中的数据。Objective-C 对象通常会把其所需的数据保存为各种实例变量。实例变量一般通过“存取方法”来访问。其中,“获取方法”(get…...
JS进阶-深入对象(二)
拓展:深入对象主要介绍的是Js的构造函数,实例成员,静态成员,其中构造函数和Java种的构造函数用法相似,思想是一样的,但静态成员和实例成员和java种的有比较大的差别,需要认真理解 • 创建对象三…...
【Gene Expression Prediction】Part2 Enchancer discovery
文章目录 5. 第一个讲座:Enchancer discovery5.1 STARR-seq5.2 Enchancer detection with weakly supervised learning5.3 Model performance 来自Manolis Kellis教授(MIT计算生物学主任)的课 YouTube:(Gene Expression Predictio…...
【UEFI基础】EDK网络框架(UDP4)
UDP4 UDP4协议说明 UDP的全称是User Datagram Protocol,它不提供复杂的控制机制,仅利用IP提供面向无连接的通信服务。它将上层应用程序发来的数据在收到的那一刻,立即按照原样发送到网络。 UDP报文格式: 各个参数说明如下&…...
vivado使用注意事项
记得给constrs(.xdc)限制文件设置为目标文件(set as Target Consraint File)...
gin路由篇
1. 基本路由 gin 框架中采用的路由库是基于httprouter做的 import ("net/http""github.com/gin-gonic/gin" )func main() {// 1.创建路由r : gin.Default()// 2.绑定路由规则,执行的函数// gin.Context,封装了request和responser.…...
C++逆向分析--继承的本质
一.一些思考 继承是面向对象的三个特性之一。这篇文章我们从底层的角度去理解什么是继承。他的作用是什么。首先继承的出现是更好的避免代码的重复冗余。要理解一件事很重要,C其实是C的延申。那么C的出现是为了解决C语言上C祖师爷认为不友好的事情,也为…...
LeetCode解法汇总2865. 美丽塔 I
目录链接: 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 描述: 给你一个长…...
pinia 的使用方法
使用方式(选项式) 1、在 mian.js 导入 pinia 里的 createPinia 函数。 2、app.use 这个 createPinia 函数的返回值。 // main.jsimport { createPinia } from pinia;app.use(createPinia()); 3、创建一个 js 文件(该文件保存着共享的数据&…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
