关键点
DevOps提高了速度并扩张了规模,让安全团队面临着新的挑战。
安全从业人员必须将DevOps原则引入他们的工具和工作流,以便跟上现代应用交付的步伐。
安全解决方案应该使用DevOps所热衷的模块化、自动化和可扩展的技术进行构建和部署。
DevOps的概念,比如标准化配置、不变的基础设施以及镜像系统等都有助于减轻安全问题的复杂性。
DevOps风格的透明性和问责制是确保在安全团队内进行有效合作的关键。
因为DevOps对于现代企业的重要性与日俱增,安全从业人员必须问问自己,他们可以从这种文化转变中学习到什么。DevOps是组织想法、过程和软件工具的交融,它已经帮助一些世界上最大的公司提高了劳动生产率,实现了更快的产品交付,并以极快的速度提供了更高质量的产品。一些企业,比如Netflix、谷歌、亚马逊等都是高绩效、敏捷组织的例子,它们认定DevOps是它们数字业务成功的基础。
具有有效的DevOps实践的公司明白:在今天的技术驱动、赢家通吃的竞争格局下,一个企业的成功往往取决于其不断学习、创新并更快地提供前沿的、客户满意的产品的能力。同时,这也为其他的公司内部门提出了挑战,比如安全。更快速和方便地发布分布式应用程序会大大地增加企业的风险,如果相应的安全问题不能以与它们部署和扩展相同的速度得到解决。安全工作流、工具和运维必须不断改变以便跟上变化。
最近,权衡DevOps速度与现有安全要求的需求已经催生了一个名为DevSecOps的模型。DevSecOps基于“安全问题,人人有责”的原则。它强调应用程序开发人员可以怎样把安全检查与他们的集成和部署流水线构建到一起。但DevSecOps对运行时的安全性关注得比较少,而这却是企业应用程序和数据最容易受到攻击的时候。运行时的安全性包括应用程序正在运行时可能遇到的所有类型的威胁,并且它包括一些功能,比如攻击检测、事件响应和政策执行。现在这些功能很大程度上仍然依赖于孤立的工具和手动的工作流程。此外,运行时的安全性不能,也不应该是整个企业中的每个人的责任——相反,这些事情最好是由安全从业人员进行处理。
除了将安全功能构建到DevOps的工作流程中,安全团队应该评估他们如何可以将DevOps的原则整合入他们的工具和流程之中。这里有五个DevOps的做法,供安全从业人员参考。
构建模块化系统
DevOps理念的关键是构建小团队可以很容易管理的系统。许多由DevOps团队使用的工具和方法都非常喜欢用模块化方式组装的应用程序。这样的应用程序例子包括微服务架构、Docker等容器技术、以及12要素应用程序方法论等。微服务使开发人员能够专注于优化自己的应用程序部分,这些应用程序通过API与其他系统对接。这简化了开发、集成以及部署。
安全课堂:今天的安全团队要应对的是混杂拼凑起来的几十种安全工具,而且彼此之间还难以整合到一起。用模块化的方法构建安全系统将大大降低运维的复杂度、时间以及整合和管理这些解决方案的成本。安全从业人员应该寻找新的工具,这些新工具使用与实现模块化应用的程序开发相同的框架。使用Docker容器中运行的微服务进行交付的安全可以很容易地分布在整个应用程序的集群,并且由Kubernetes、Mesosphere
DCOS或者Docker Swarm等系统管理。这意味着安全工具可以作为另一组应用程序融入进来,而且可以和受它们保护的应用程序一起进行自动化和管理。
依赖于自动化和可扩展性
DevOps的首要目标是实现更快的速度和敏捷性,以便更好地服务客户。团队实现这一目标的方法是通过对高水平的自动化和可扩展性的设计,来使基础设施完全可编程。例如,Netflix公司一直专注于将公司的整个软件发布平台自动化,以便它可以按需要在几分钟内扩展到成千上万的服务器上,确保客户总是可以访问到他们想要的内容。自动化还有额外的好处,那就是减少人工操作错误的可能性,而这正是导致巨大花费的服务中断或频繁停机的原因。
安全课堂:安全的任务是减轻对业务的攻击的风险和影响。实现自动化能够更快地进行检测,这给了安全团队更多的时间来优化响应和恢复。随着新的应用程序不断地在云上快速部署和扩展,攻击面也可以很快地扩展,并且不断变化。数以千计的微服务应用程序可以在几秒钟内被启动或破坏,留下可视性和数据收集的差距。为了减少潜在的攻击,同时保留现有的开发工具,安全工具必须基于自动化和可扩展性来构建,以适应这样的新应用交付模式。将运行时安全生命周期自动化也减少了攻击者可能利用的配置错误的可能性,有助于减少安全事故。依靠传统的、分散的、手动的安全流程已经不够了。
使用标准化的配置
在DevOps中,团队利用一致的基线配置操作可以更容易地帮助识别操作问题。团队以运行服务需要的基础图像、应用程序和依赖性等形式来打包“基础设施即代码”。这确保了系统是相同的并且可复制,以趋向更好的运维条件。监测到的内容与标准化配置之间的差异让运维人员能够迅速定位和解决问题。将基础设施视作“不可变的”,使得运行中的系统永远不会被重新配置,这种做法正日益成为一项最佳实践,采用Docker等应用程序容器技术为这项实践提供了便利条件。新系统已经整合了任何需要的变化,它简单地取代了运行中的系统。这种方法可以让团队很容易就停止有问题的系统,并且在同一时间重新发布,进入可预知的、良好的状态。
安全课堂:安全团队差不多都能实施被认可的安全配置、分析鉴定和进行潜在问题分析等。这些标准化的配置都将对应于正常的系统活动。偏离正常设置的运行时活动可用于识别异常或恶意攻击模式,这些模式反映了实时的攻击或折衷的指标。当检测到这样的活动时,安全团队可以将基础设施视为不可变的,快速停止受影响的系统,并运行起新的、未受影响的系统,而不必处理修补生产系统带来的复杂性。
保持可审计的“真实数据来源”
DevOps文化通过变更跟踪和版本控制技术来促进跨团队的协作,以便保持充分的透明度,改进变更管理,并简化系统恢复过程。对配置的修改都被记录下来,以获得一些详细信息,比如变更是什么时候发生的、谁请求进行变更以及变更的影响等。通过使用这种方法,开发和运维都可以对应用程序和基础设施的完整生命周期获得更深入的了解,这有助于促进更好的跨职能团队之间的沟通,以及更高的可靠性。
安全课堂:安全团队应该确保他们使用工具去收集来自所有系统的全面的数据,以保证可操作的“真实数据来源”是随时都可以得到的。现在大部分数据要么是孤立的,要么聚集在一个集中的SIEM(Security
Information and Event Management,安全信息和事件管理)系统中,没有进行必要的建模来让它们具备可操作性。即使是在治理和合规性等需要审计线索的情况之外,捕捉对所有规则和配置、还有安全策略的变化,这有助于简化安全团队内的协作和问责制。安全从业人员平时可以每个人都专注于运行时安全生命周期的具体部分,从配置仪器到取证等等,但当出现安全事件的时候,他们仍然可以更容易地采取协调行动。
利用有镜像的、有主备的部署
蓝绿部署方法是经常被团队用来尽量减少停机时间的方法。这种技术使用两套相同的生产环境,即在任何给定的时间里,一套生产环境是在线服务的,另一套处于备用状态。新版本只在备用系统中进行测试。一旦变更得到了验证,就将启用备用系统,并将在线服务系统切换到备用状态。如果在验证过程中遇到任何未预料到的错误或运维问题,团队都能够安全地将最新版本回滚,无需对在线系统作出任何更改。
安全课堂:安全团队也可以应用相同的技术来为管理和安全更新打补丁。他们可以在把补丁发布到在线生产环境中之前,先在镜像系统对它们进行测试。比如,一些操作系统供应商现在使用了双重主备根分区来简化补丁管理,以在必要情况下,使系统具备安全回滚版本的能力。这还有额外的好处,那就是保证了更高的系统可用性,这从属于保密性、完整性和可用性(Confidentiality,
Integrity, and Availability,CIA)的安全管理框架。安全团队可以利用这种方法来观察补丁的稳定性和有效性,这对生产环境很重要。他们可以在实施大规模发布之前就已经确保完全修复了安全问题。
结论
当今时代,各种规模的企业都在寻求更高的敏捷性和更快的速度,以加速数字化改造。通过采用DevOps,应用程序开发人员能够专注于自己最擅长的事情:创建和发布新软件。安全从业人员也应该继续专注于他们做得最好的事情:把攻击者阻挡在外。正如DevOps的出现满足了新的业务需求一样,我们也需要安全领域内的新方法来应对由DevOps推动的世界的挑战。这些新的安全方法自己必须与依赖于模块化、自动化、标准化、可审计性和镜像系统的DevOps实践整合起来。通过将这五项DevOps原则应用于新工具和新的工作流程,安全能够成为企业重要优势,有助于企业在今天快速变化的市场中获得成功。
|