从混沌到体系化——DevSecOps在腾讯云的落地实践

随着云计算被普遍运用,微服务等基础架构的成熟,同时企业对开发运维提出更高效的要求,敏捷开发运维(DevOps)这种提高研发效能,节省成本,最终更快捷实现产品交付并提示产品质量的模式被得到推广和应用。敏捷开发运维的应用,其天生的敏捷性与传统较为缓慢的安全体系的冲突给安全也带来了挑战,如何有效解决这个问题,Gartner在2012年也提出了“DevSecOps”的概念,人人为安全负责,让业务、技术和安全协同工作以生产更安全的产品。

“高速交付”结合“安全编码”

DevSecOps引领新时代    

DevOps主张在软件开发生命周期(SDLC)的所有步骤实现自动化和监控,缩短开发周期,增加部署频率。但由于传统的安全流程无法跟上DevOps环境的步伐,安全考量与高速开发互相掣肘,安全性成为了DevOps的瓶颈。对于大部分开发团队而言,安全是比较孤立的,大部分开发和运维人员没有接受过安全编码和安全实践的培训,使得安全与开发是分割的,甚至通常会绕过它。因此SDLC中的安全缺陷可能导致严重漏洞,这个时候就需要DevSecOps。

区别于没有强调安全地迁移到云端的DevOps,DevSecOps是在SDLC的早期引入安全性,目标是让参与SDLC的每个人都对安全负责,从而来开发更安全的应用程序。而腾讯云作为一个复杂的安全场景,快速的产品迭代牺牲的可能是产品安全,如何在腾讯云快速发展的情况下保障腾讯云的产品安全,又如何灵活的去落实DevSecOps就是我们今天所面临的问题。 

腾讯安全云鼎实验室产品安全负责人张祖优参与了《研发运营一体化(DevOps)能力成熟度模型》中安全及风险管理、安全工具的制定,并出席由标准核心发起者之一的DevOps时代社区和高效运维社区联合主办的“2020 DevOps 线上峰会”最佳实践专场做交流分享。本次分享张祖优从目前Devops环境下复杂的产品体系及人员组织、多维度的安全挑战两个层面,针对腾讯云的庞大产品体系以及它对应带来的安全挑战,从腾讯云安全建设的几个阶段介绍腾讯云产品安全体系以及DevSecOps是如何在腾讯云落地实践

DevOps转型与落地

致力平衡安全问题   

在分享中,张祖优提出在DevOps转型与落地过程中,前期应如何基于腾讯的安全积累快速建立起安全防线,保障腾讯云的产品安全;下一步又如何基于SDL等安全流程从风险引入控制、风险发现与防护、响应处置、闭环改进等几个维度完善腾讯云的产品安全体系,有效收敛相关安全风险;最终在DevOps高速发展的时候,如何在腾讯云尝试落地DevSecOps,如何解决DevOps高效要求和传统安全中安全缓慢的冲突。

要实现这个转型落地的过程,平衡安全问题便是我们的第一要务。DevOps敏捷高效的要求看起来好像跟缓慢滞后的安全存在天然的冲突,但实际上DevSecOps对安全的要求有个很关键的点就是自动化,并且柔和地融入流程。所以只要构建好相关DevSecOps的工具链,低侵入自动化的融入DevOps的流程中,我们不难发现,“交付速度”“安全编码”这两个看似相反的目标,是没有明显冲突的,同时还可以有效的减少安全的人力投入,提高安全效率。 

而安全团队在整个转型落地的过程中就扮演了参与者、建设者和引导者的角色,需要在DevSecOps中负责提供好用自动化的安全工具,向开发者提供工具支持、提供培训支持、提供安全咨询等。并根据安全DevSecOps的理论,把握安全介入时机,将安全嵌入到DevOps的各个环节,从需求和设计阶段就开始介入,使安全问题的修复成本达到最低。 

DevOps团队目前面临极大安全问题,随着市场需求的快速变化,高频率部署和软件交付将造成安全威胁的上升。如果能够比较好的实现DevSecOps可以带来三个好处:首先是更快更高效,通过自动化手段,同时将安全左移,使得安全更早嵌入开发流程,从而解决由于安全性考虑耽误的产品上线问题,实现产品快速上线;再者是风险控制,提供基本安全标准,自动化的保障,将安全风险有效识别并处置;最后一点是能节省成本,安全左移降低漏洞修复的成本,也减少对安全团队的依赖,使得安全更加高效。如此一来就能解决以上提的问题。

企业内部执行落地

寻找关键率先出击     

三个维度分析如何落地

DevSecOps的落地有三个比较关键的维度,分别是人文、流程和技术。首先是人文的改变,持续进行安全意识培训,鼓励团队自治,每个人为参与到安全,为安全负责,达成共识和认知;其次在流程方面进行优化,整合流程,定期做代码检查、红蓝对抗,建立安全情报机制,有可度量衡的安全指标,加强与业务部门的协作等;最后技术方面要构建对应的安全工具,实现更自动化的安全检测,相关工具可以嵌入到CI/CD流程。 

另外还有一些关键点,在RSAC2019大会上就有专家提出实践DevSecOps的九大关键因素。例如,文化意识维度的安全意识、安全编码;架构和设计维度的威胁建模;工具方面的第三方导入代码分析、代码编写分析;全漏洞管理要建立漏洞管理共识和处理流程,对安全问题优先进行高危漏洞清理;最后就是其他监督方式,如安全同行的审阅以及一些安全评估手段。 

针对DevOps的一些特色我们需要快速建立安全自动化覆盖能力。现有软件架构逐步趋向于微服务,而相关Web交互也更趋向于API方式,那么对应的安全动作也可以重点关注容器安全、API安全等,如容器镜像扫描,API自动化安全检查与防护等。再者,安全的左移需要关注软件供应链安全问题,对于软件第三方依赖的安全检查,使用开源组件的检查就显得尤为重要,需要我们在开发流程中建立相对应的自动化检查能力,针对性、优先的推动自动化的安全检查和相关建设。

三个步骤优先落地实践

首先是工具链的建设。在工具链建设中有一些可能是传统安全就具备常用的能力,如动态黑盒测试、静态代码审计等,就是要考虑更加自动化更加优化;另外,因为安全左移或者软件开发架构变化带来的一些需求,如第三方依赖安全检查工具、容器安全相关工具等也是同步要去构建的。

其次是在CI/CD流程中嵌入安全检查,DevOps的实践其中比较关键和对安全直观的点就是CI/CD的流程,也是安全一个比较好的机会,在CI/CD的不同环节中嵌入友好的自动化安全检查,既实现安全在DevOps的嵌入,又不影响DevOps的敏捷和效率要求。

最后就是文化和组织流程的优化了,如果想让DevSecOps很好的践行,相关的安全培训,不只是对开发团队安全文化的传达,也是提升开发团队安全编码能力。同时在相关流程上也要针对性的进行优化,比如说产品上线安全检查流程,不应该是过去卡点审核的方式,而应该直接在CI/CD流程建立安全门限,不需要业务团队来回的整改再与安全团队沟通等,而应该安全团队建立安全度量指标,开发团队在开发过程中就在各个阶段进行处理,实现最终完成CI/CD流程即可满足上线安全要求。

DevSecOps这个概念的提出,再次定义了安全在软件工程中的重要性以及结合方式。在DevOps的进程中,安全的集成和演化成为这个时代的焦点这并非偶然,跨职能团队的协作和责任共担的理念需要团队不断成熟才能更好地理解和执行,安全的融入也是这样,需要同样的方式和原则来打破开发和运维之间的隔阂,虽然看似是反复的曲折过程,但是达到成熟阶段的整体方向和趋势是不会改变的。并且在敏捷思想和DevOps已经足够成熟的今天,相信未来会有更多思想被提炼出来、也会有更多的最佳实践来提高安全工作的效率。

关注云鼎实验室,获取更多安全情报