导读 | 基于容器和无服务器平台的云原生应用在正在快速地被全球的组织所部署。虽然说云原生应用会带来易延展性、无与伦比的韧性、以及快捷的开发速度,云原生应用同样会带来挑战。有多种保护云原生应用的方式,包括:安全左移、在函数和容器级别应用边界安全、贯彻最小角色和最低权限、保护应用依赖,以及安全共责。 |
云原生应用会有大量的可移动成分,并且基于那些短暂的架构组件。这就会给运营和维护产生难度;除此以外,自然还有安全隐患。云原生安全需要新的解决思路、策略和工具。这里,有五个可以帮助改善企业云原生安全的小建议。
云原生应用为云而创建,而且整个软件开发生命周期——开发、部署、测试和升级,都会在云环境完成。“云”的概念不局限于公有云,也可以意味着远程和本地资源都有的混合云或者超过一个云供应商的多云环境。
云原生计算基金会(CNCF)认为三种工具应该用于云原生计算中:容器化、微服务结构和动态编排。容器化意味着软件和其关联依赖绑定,从而实现软件可移动、可扩展;动态编排包括了使用Kubernetes等工具管理云端容器;而微服务结构能够优化资源。容器能够被另一项云原生计算能力——无服务器功能所替代。
云原生应用给基础设施和应用安全带来了额外挑战。以下是一些关键挑战:
-
多个需要保护的实体:DevOps团队和基础设施团队会使用微服务来运行云原生应用。在过去,多个进程或者软件功能会在一个虚拟机上运行。现在,每个进程或者能力都会被包装成分离的容器或者无服务器功能。每个实体都易于被攻破,因此需要全开发周期的防护。
-
多样的结构:云原生系统会涉及很多公有云和私有云、云服务、以及应用结构。每个结构都有不同的隐患和安全需求。安全团队必须理解这一复杂的攻击面,并且为每个不同的结构找到解决方案。
-
不断变化的环境:公有云和私有云环境在持续变化。快速的软件发布周期意味着微服务应用的每个组件都必须每日进行升级。另外,使用不可变性和基础设施即代码意味着应用会被持续分解并重构。安全团队会发现很难在不减缓发布周期的情况下,保护这些技术应用。
有多种保护云原生应用的方式,包括:安全左移、在函数和容器级别应用边界安全、贯彻最小角色和最低权限、保护应用依赖,以及安全共责。
许多企业依然在使用已有的工具,却无法处理云原生应用环境的速度、规模和动态网络。如果再加上无服务器功能,会让整个基础设施变得更抽象,让问题更严重。
网络攻击者会寻找容器和无服务器代码中的隐患,以及云基础设施中的错误配置,以接入包含敏感信息的实体,再用它们提升权限,攻击其他实体。
另一个问题是企业在用CI/CD工具持续开发、测试和发布应用。当使用容器部署云原生应用的时候,开发者会从本地或者公共库当中获取镜像,但一般不会检查这些镜像是否包含安全隐患。
一种解决方案是给安全团队提供一些工具,阻止不受信任的镜像进入CI/CD管道,以及启用一些机制让不受信任的镜像在进入生产前就避免产生安全问题。通过在开发流程早期扫描镜像的漏洞、恶意软件成分等,开发者可以贯彻安全标准。
在无服务器应用中,系统会被分解成几个能从不同资源接受项目触发的可调用组件。这就给了攻击者更大的攻击选择,以及更多实施恶意行为的途径。
一个很重要的方式是使用为云原生环境而制作的API和应用安全工具。除此以外,一个很普遍的操作是在功能级别使用边界安全——识别功能是否被一个和平时不同的来源所触发,然后监控事件触发中存在的异常情况。
在容器化环境里,一个重要点是在不同级别都要实现安全——编排控制面板、物理主机、pod和容器。编排的一些最佳安全实践包括节点隔离、限制和监测容器之间的流量、以及对API服务器使用第三方认证机制。
云原生资源之间会有大量频繁的交互。如果能够对每个无服务器功能或者容易都能配置一些独特的许可,就能有极大概率提升安全性。可以通过基于每个函数使用IAM,或者对容器进行颗粒度的许可,加强接入控制。花一点时间创建最小角色,或者为每个函数或容器创建一系列的许可。这就确保了即使云原生结构中有一个点失陷,其造成的危害也是最小的,并且会防止其他元件产生提权问题。
无服务器函数和应用的代码经常从npm或者PyPI的库中获取有依赖关系的包。
为了保护应用的依赖,就需要包括完整开源组件以及其漏洞数据库的自动化工具。同样,还需要能够在开发流程中触发安全行为的云原生编排工具。通过持续运作这些工具,就可以防范产线上运行的有隐患的代码包或者容器。
在开发者、DevOps和安全团队之间建立亲密的关系。开发者并不是安全专家,但他们可以被教导安全操作知识,从而确保他们可以安全地编写代码。安全团队应该知道应用是如何开发、测试和部署的,还有哪些工具在流程中被使用,从而安全团队能够在这些流程中有效地加入安全元素。
云原生要求各种企业管理安全和开发的方式,因此尽快让不同团队减少隔阂至关重要。云原生的启用对企业来说是一个形成合作和共享文化的罕见契机。
这篇文章提及了云原生面临的挑战,包括大量需要保护的实体,以及持续变化的环境和结构。同样,也给出了五个能够改善云原生环境的最佳实践:
- 安全左移,在问题进入产线前进行规避。
- 在函数和容器级别应用边界安全。
- 对云原生应用中的实体实行最小角色和最低权限。
- 保护好应用依赖。
- 鼓励开发、运营和安全团队之间的安全共责。
业务节奏加快使得无服务器应用等云原生应用会越来越多被企业所启用,云原生的安全也会更多被注意。不难发现,本文提到的五个安全建议中,软件安全相关的建议占了大部分:无论是安全左移、应用依赖的防护、还是实现DevSecOps整个安全协同,最终都离不开开发安全相关。这一点来看,DevSecOps和API安全的重要性都会随着云原生的使用进一步地提升。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/166822.html