Serverless简介
Serverless(又称为无服务器)架构是一种全新的云计算模式,它是在容器技术和当前服务模式基础之上发展起来的,它更多的是强调后端服务与函数服务相结合,使开发者无需关注后端服务具体实现,而更侧重关注自己业务逻辑代码的实现。
随着云原生技术的不断发展,应用部署模式已逐渐趋向于“业务逻辑实现与基础设施分离”的设计原则。Serverless架构完美诠释了这种新型的应用部署模式和设计原则。从云原生整体发展路线来看,Serverless模式更趋近于云原生最终的发展方向。
云计算发展历程从IaaS(Infrastructure as a Service,基础设施即服务)到PaaS(Platform as a Service,平台即服务),再到SaaS(Software-as-a-Service,软件即服务),逐渐的将去服务器化的趋势表现的愈发明显,而SaaS的下一个阶段可能就是
BaaS+FaaS+Others,即Serverless。
提到Serverless,我们首先得解下什么是BaaS和FaaS。
BaaS(Backend as a Service,后端即服务)和FaaS(Functions as a Service,函数即服务)是Serverless两种主要的实现方式。BaaS可以理解为是一个整合和开放各种在应用开发中需要的服务能力的平台,它通过创建大量重复的代码功能,方便应用基于服务的快速开发和构建。FaaS是Serverless主要的实现方式,开发者通过编写一段逻辑代码来定义函数调用方式,当事件触发时函数被调用执行。
FaaS本质上是一种事件驱动并由消息触发的服务,事件类型可以是一个HTTP请求,也可以是一次用户操作,函数可以看作是完成某个功能或任务的代码片段。相比传统应用运行模式,Serverless业务代码被拆分成了函数粒度,不同函数表示不同的功能,函数之间调用关系也更加复杂。
云计算发展历程与FaaS所处的地位
通常Serverless应用都是基于无服务器应用框架Serverless Framework构建完成的。开发者无需关心底层资源,即可快速部署完整可用的Serverless应用架构,同时Serverless平台具有资源编排、自动伸缩、事件驱动等能力,覆盖编码、调试、测试、部署等全生命周期,帮助开发者联动各类云组件资源,迅速构建完整的 Serverless 应用。
目前常见的云厂商Serverless应用服务支持各类 Web 框架快速创建、迁移上云,可以实现Express、Next.js、Python Flask、PHP Laravel、Koa、Egg.js、Nuxt.js等框架应用的快速部署。开发者无需进行复杂的配置,通过Web Fuction即可快速搭建各类场景下的Serverless应用,轻松实现云函数、API网关、COS、DB 等资源的创建、配置和部署。Serverless提供从初始化、编码、调试、资源配置和部署发布,到业务监控告警、实时日志、故障排查的一站式解决方案。
从架构层面来看,Serverless由BaaS和FaaS共同构成了完整的应用架构。Serverless计算平台可以帮助开发者完成构建服务运行环境,开发者无需购买服务器,云厂商负责提供并维护基础设施资源和后端服务组件。Serverless架构具有自动扩缩容的特性,当应用部署后云计算平台会为Serverless应用提供足够的资源来支持应用稳定运行。
Serverless组件架构图
无服务器云函数(Serverless Cloud Function,SCF)是一种为企业和开发者们提供的无服务器执行环境。开发者通过Web IDE或者本地IDE编写代码,然后将代码和所需依赖一起打包部署到云函数平台。开发者会在业务代码中会提前定义好函数具体调用方式,如访问数据库、对象存储、第三方服务等接口,用户通过提前定义好的请求方式去访问对应的服务,平台会根据用户请求去拉起相应的计算资源运行业务代码。
Serverless运行原理图
安全风险共担模型
Serverless安全防护
1.使用安全漏洞缓解措施
Serverless的安全性依靠用户和云厂商共同来保障,对于开发人员来说,最基础的要求开发人员编写代码时遵循安全开发原则,保证业务代码本身不存在安全漏洞;其次需要保证Serverless应用配置安全,避免因为配置不当导致不安全风险的发生。对于云厂商来说,需要保证Serverless应用与其他云服务组件的接口调用安全,对于重要的功能需要在功能模块之间放置防火墙做好隔离,当基础应用存在注入等问题时,防火墙会起到一定缓解作用。其次由于Serverless通常接入应用组件和数据较多,因此需要使用https/tls来保障数据在传输过程中的安全性,同时使用KMS(Key Management Service,密钥管理系统)来保障服务运行时的密钥使用安全,避免将密钥等敏感数据硬编码或写入环境变量中。
2.Dos攻击缓解与防护
开发者通过编写高效的Serverless函数来执行离散的目标任务,为Serverless功能执行设置适当的超时时间和磁盘使用限制,通过对API调用设置请求限制,对Serverless功能实施适当的访问控制等来缓解Dos攻击风险。同时使用不易受到ReDos等应用层Dos攻击的API、模块和库来避免Dos问题的产生。
3.Serverless滥用防护
针对Serverless滥用问题,需要从Serverless应用本身做限制,如限制某些库和方法的使用,通过有效监控和阻断来提高Serverless服务滥用的门槛,完善异常事件发现和监测机制,当发现滥用行为时及时触发告警和阻断滥用行为。
4.第三方依赖库防护
由于Serverless依赖于第三方组件和库构建应用程序和运行环境,因此第三方依赖库的安全性直接影响到Serverless应用和平台的安全。构建完善的第三方依赖库防护和监测机制对保障Serverless应用安全起到极大的意义。
5.IAM访问控制防护
在Serverless中,运行的最小单元通常为一个个函数,Serverless中最小特权原则通过事先定义一组具有访问权限的角色,并赋予函数不同的角色,从而可以实现函数层面的访问控制,避免统一的权限分配导致的各类安全风险。
6.Serverless平台防护
对于云厂商而言,要避免使用过时的函数和云资源,重复利用资源虽然有助于节约成本,但是会导致Serverless攻击面增加,因此必须定期清理服务器环境,删除未使用的角色,身份和依赖项等。其次要避免重用执行环境,对于云厂商而言,在两次调用之间保留执行环境,可以提高调用效率,但是当执行环境被保留下来时,部分敏感数据可能会被保留下来,这将导致一定的安全风险。
7.完善安全监控和日志记录
由于函数的生命周期极短,并且随着扩展部署越来越多的函数,函数调用数量不断增加,各函数功能之间存在复杂的关联性,攻击可能从任何一个点发起。因此需要建立完善监控机制,例如使用函数级别的日志分析工具来提高监控能力,及时发现攻击行为。
腾讯云Serverless应用服务目前已经具备完善的安全防护体系。以腾讯云云函数(SCF)为例,在密钥安全管理上,腾讯云使用了密钥管理系统(Key Management Service,KMS)。KMS使用经过第三方认证的硬件安全模块 HSM(Hardware Security Module)来生成和保护密钥,实现密钥全生命周期管理和保障数据安全能力。同时云函数也完善了配套的监控和告警机制,提供如调用次数、内存使用、并发使用、超时、代码错误等多维度的监控和告警能力,帮助运维人员轻松实现应用后期维护。对于基础设施、资源管理、安全管控、容灾等能力是云函数平台必备的基础能力,也是云平台的核心能力。
密钥管理系统(KMS)产品架构图
云安全攻防矩阵V3.0发布
腾讯安全云鼎实验室根据自身安全实践,结合国内外相关案例,对云上主流应用安全风险进行抽象,绘制出了云安全攻防矩阵。企业和开发者可参照该矩阵了解云服务攻击手法,帮助开发以及运维人员识别各类风险。我们的云安全攻防矩阵V3.0已经发布了,此次新增了Serverless安全矩阵模块,目前3.0版本已经涵盖云服务器、容器、cos存储桶、Serverless等主流云服务。也欢迎大家积极踊跃与我们沟通交流,一起为维护云安全贡献力量。矩阵详情可查看云鼎实验室官网:
https://cloudsec.tencent.com/home/
写在后面
Serverless作为一种新的技术和架构模式,虽然起步较晚但发展迅猛,短短几年时间已经推出多款备受开发者追捧的应用,吸引了大批开发者的关注。作为一个相对比较新鲜的事物,Serverless还有很多领域和价值值得我们去探索。随着容器技术、IoT、5G、区块链等新兴技术的发展,技术上也逐渐趋向于中心化、轻量虚拟化、细粒度计算等,而Serverless也将借势发展,相信不久的将来Serverless必将在云计算的舞台上大放异彩。
参考链接
http://www.ccopsa.cn/QiantaiZiyuanXiazaiWendang/WenjianXiazai?key=1166d80a-da24-4a59-8fdc-9d15c01ca9af
https://www.youtube.com/watch?v=ILJozDEQ-aw
https://mp.weixin.QQ.com/s/kNawzZowQt8hwiE5Z8wIQQ
https://mp.weixin.qq.com/s/rbS0_42RBiFu8UFFQW4kew
https://mp.weixin.qq.com/s/dzvQQNFGBTfF7TvowaowFA
https://mp.weixin.qq.com/s/0Lq7hX2WdC96rVQgkBXunA
https://mp.weixin.qq.com/s/duF1Z0EDC3n_G378Aq_XYA
https://owasp.org/www-project-serverless-top-10/
https://github.com/neargle/my-re0-k8s-security
https://snyk.io/blog/10-serverless-security-best-practices/
https://project-awesome.org/pmuens/awesome-serverless
https://toutiao.io/posts/jx6yyi3/preview
https://github.com/puresec/sas-top-10
https://www.youtube.com/watch?v=ILJozDEQ-aw
https://www.youtube.com/watch?v=tlZ2PIXTHxc
https://mp.weixin.qq.com/s/XuAlWNhrGvRrge4JdEZ62A
https://www.sciencedirect.com/science/article/pii/S221421262100079X
https://unit42.paloaltonetworks.com/gaining-persistency-vulnerable-lambdas/
云上攻防往期推荐:
浅谈云上攻防——云IAM原理&风险以及最佳实践浅谈云上攻防——Etcd风险剖析浅谈云上攻防——元数据服务带来的安全挑战浅谈云上攻防——Web应用托管服务中的元数据安全隐患浅谈云上攻防——对象存储服务访问策略评估机制研究浅谈云上攻防——Kubelet访问控制机制与提权方法研究浅谈云上攻防——国内首个对象存储攻防矩阵浅谈云上攻防——SSRF漏洞带来的新威胁浅谈云上攻防——CVE-2020-8562漏洞为k8s带来的安全挑战浅谈云上攻防——云服务器攻防矩阵END
更多精彩内容点击下方扫码关注哦~
云鼎实验室视频号
一分钟走进趣味科技
-扫码关注我们-
关注云鼎实验室,获取更多安全情报