云原生安全 Serverless下的安全防护实践探索
Serverless架构简介
无服务器架构(也称为功能即服务FaaS)在企业中用于构建和部署软件及服务,不需要内部物理或虚拟服务器。无服务不是表示没有服务器,而表示当您在使用Serverless时,无需关心底层资源,也无需登录服务器和优化服务器,只需关注最核心的业务即可。在云时代,这个概念表示不需要关心服务器端的相关技术,如函数及服务FaaS(FaaS 全称Function-as-a-Service,可理解成给 Function 提供运行环境和调度的服务)。
云计算诞生的初衷以及要解决的问题,其中最大的一点是算力资源的合理化分配。云在第一阶段主要解决了硬件资源的分配问题,发展到当前阶段,出现了一些新的需求,而ServerLess恰好能解决以下两点重点的需求。
按需付费
目前开发者对服务运行的实例,即便是没有调用,也依然需要占用资源,并对资源付费,和服务的请求并发数并没有明确的关系,Serverless理念可以更优的发挥计算资源的效能。
面向应用
本质上用户对云的期望是应用的运行环境,并最好只关心业务逻辑,而不需要关心其他技术和底层资源,如监控,弹性,高可用,日志追踪等,Serverless理念可以使用户无需再分散精力。
开源的 FaaS 平台成熟度还不足,和公有云上提供的还有差距。但从开发和调试的友好性上来说,已经比公有云有优势,大多支持源码的直接交付,命令行工具也比较友好。以下罗列几个比较知名的开源的 FaaS平台项目。
架构 |
简介 |
Openwisk |
基于Akka的Actor 模型,中间以Kafka作为消息中间件。 |
Fnproject |
Function交付的是容器镜像,每次请求都运行一个Docker容器,然后从标准输出获取结果输出,再销毁容器。 |
Fission |
基于Kubernetes构建,它的Function是Kubernetes中的对象,每种语言环境维护一个 Pod池。 |
Kubeless |
基于Kubernetes,充分利用了CRD特性,将Function作为Kubernetes中的一种在Pod之上的对象,每个Function会创建出一个Deployment,同时暴露Service。 |
目前FaaS 以及它之上的生态链尚未成熟,带来的变革也尚未完全凸显出来。
对于公有云而言,最大的特点是提升了资源利用率。FaaS 的按需运行计费机制,可以帮用户省钱,用户已有的应用改造成 FaaS 模式,能激活更多的需求,由于成本的降低,许多低频的需求会被大量的考虑使用。对于私有云,最主要的价值是提升了开发交付效率。
总而言之,这是一次云原生应用浪潮带来的变革,波及的范围会不断增大,未来的应用平台可能会发生演化和改变,我们正在这个方向上摸索着前进。
Serverless架构安全风险
攻击面增大
软件环境的攻击面包括所有未经授权的用户可以进入或提取数据的点,而无服务的攻击面具有流动性,因为无服务系统是由几百个甚至几千个一起组成的,每一个被集成到生态系统中的服务或平台都会有新的未经授权的用户入口,每当服务扩展和修改时,未经授权的用户入口就会随之增多。而且,由于无服务器架构的多入口点和复杂的拓扑结构,无服务器的攻击面是多层次、多维度的,无服务器架构的高复杂性和波动性,使得攻击面变大。
事件数据植入
不安全的无服务器部署配置
错误的设置和云服务的误配置是一个常见的问题,这反过来又可能成为无服务器体系结构的攻击入口,泄露或未经授权篡改敏感、机密信息,以及为潜在的中间人攻击提供入口点。
第三方依赖关系
当无服务器功能依赖于第三方软件(如开源软件包)时,如果存在漏洞,也可能为被入侵开辟道路。
DDoS攻击
根据研究,分布式拒绝服务(DDoS)攻击对无服务器架构可能构成严重风险,因为可能存在内存分配、功能的持续时间的限制,默认的限制和配置可能导致DDoS攻击取得成功。
权限挑战
无服务器函数的另外一个基本挑战是它们的权限定义。函数的权限是在一个单独的过程中定义的,通常是在函数代码的早期开发阶段,并且是独立地为每个函数定义的。基于细粒度划分的函数应用服务增加了错误、不当配置的可能性,进而导致潜在攻击者获得机会,访问超出自身权限范围之外的更多服务。同时,“ 最小权限模型” 、“零信任”的需求正在被关注。
Serverless遇到零信任
根据无服务器理念,其背后实际是一些列函数的访问和调用,这和零信任的防护对象有诸多相似、互通之处,并且无服务器面临的重要威胁之一也是来自于权限定义,因此下面我们首先从权限的角度对无服务的安全性进行初步的探讨分析。
体系
零信任体系是在一种默认主体(用户、设备、应用)不可信、 环境不安全、操作不合规的假设情况下,通过实时、动态、全环节的多维身份认证、环境风险评估、动态功能访问控制、精细化标记数据等级、分级分类精确授权以及动态审计等手段,对主体行为及相关环境要素开展动态安全防护、动态信任管理,实现对功能、数据两大核心资产风险评估、预警响应,确保数据全程可知、可管、可控、可查,形成安全、可信、合规的大数据全生命周期纵深防御体系。
架构
目前业界对零信任架构的通用零信任架构如图1所示:
图1 零信任架构图
零信任安全控制中心核心是实现对访问请求的授权决策,以及为决策而开展的身份认证、安全监测、信任评估、策略管理、设备安全管理等功能。
零信任安全代理的核心是实现对访问控制决策的执行,以及对访问主体的安全信息采集,对访问请求的转发、拦截等功能。
零信任的最大的价值在于是即使攻击者通过其他各种手法破坏应用程序或基础架构,零信任网络也依然有效,让威胁或者可疑的踩点活动不容易入侵核心区域。
在零信任体系下容器层级的ServerLess实现方式,目前可以采用安全控制中心+零信任安全代理的方式,具体的实现为容器网络组件+流量管控平台的方案,流量管控平台针对 Pod 层流量的访问控制,容器网络组件针对节点层访问控制。
容器的网络组件用于构建三层可路由网络,然后通过自适应的访问控制来进行最小化的访问控制策略的执行,从而构建容器下的零信任体系。首先,流量管控平台可以通过流量管控平台实现服务和服务之间的访问鉴权,通过权限访问之后也可以进行统计和审计。其次,通过全链路双向 TLS 加密,对通信的过程进行较好的保障。零信任安全代理的实现,可通过自带代理的方式实现,在其中加入零信任的安全访问策略以控制访问函数资源的能否进行访问。零信任的安全控制中心的策略,可通过流量管控平台架构中的控制平面组件策略进行实施。
每个函数服务的载体上部署一个零信任安全代理,每个零信任安全代理都运行一个授权引擎,该引擎在运行时授权请求。当请求到达代理时,授权引擎根据当前授权策略评估请求上下文,并返回授权结果YES或NO。上述方案架构如图2所示。
图2零信任应用于Serverless安全防护实践方案架构图
-END-