DevOps 安全是一个结合三个领域的理念:开发、运维和安全。其目标是消除软件开发和IT 运维之间可能存在的任何障碍。
随着代码的编写和应用程序的发展,团队之间持续沟通和协作的价值怎么强调都不为过。DevOps 通常由持续部署策略驱动。开发团队可以添加功能并修复错误,以便软件能在更短的周期内持续发布,且不会破坏用户体验,或对业务运营造成更广泛的影响。
由于开发人员通常依赖外部供应商开发的程序、框架、库和软件开发套件(SDK),因此安全性可能成为一大问题。第三方代码可能包含安全漏洞,且在开发人员使用前可能未得到解决。
当开发人员和IT 团队紧密协作时,软件发布时的错误会更少。此外,在规划新功能和推出产品时,每个团队都能考虑到对方的需求。事实上,DevOps 已经改变了软件开发和IT 领域的文化。
DevOps 有哪些安全挑战?
DevOps 可消除部门壁垒,为软件开发流程注入新的效率,但实施难度较大,且引入时可能产生摩擦。例如,由于传统上工程和IT 部门被视为两个相对独立运作的部门,两者突然整合可能会造成文化冲突。IT 管理员的实际处理时间,对开发人员而言可能过长。
通常,安全漏洞等事件的发生会暴露DevOps 的缺陷。例如Uber 2016 年的资料外泄事件:攻击者入侵Uber 在GitHub 上的私人代码仓库,寻找登录凭证,从而得以访问Uber 的Amazon Web Services (AWS) 环境。在AWS 中,攻击者获取到了他们想要的敏感附加保障和驱动程序数据。
传统上,开发人员没有安全相关的工作任务。然而,随着DevOps 安全架构的部署,Uber 的开发人员会被告知,将用户名和密码发布到GitHub 仓库(即使是私人仓库)也并非明智之举。
安全的DevOps 环境会利用各种工具、流程和政策来实现快速且安全的版本发布。以Uber 为例,应执行最终安全扫描,确保代码中没有内嵌任何认证信息。通过DevOps,在整个应用程序开发周期中引入了可能最有效的安全措施。
组织层面的阻力
当开发人员编写代码时必须考虑安全性时,可能会导致工作受挫和进度延迟。另一方面,IT 管理员可能不习惯与开发人员密切合作,因为通常情况下,应用程序已经为他们构建完成,只需进行少量修改。双方都需要时间来了解彼此的工作方式。
云端中的安全漏洞
随着软件在云端开发,漏洞数量可能会呈指数级增长。IT 部门可能习惯于使用传统的单点安全产品(如防火墙),而这些产品无法在云端提供全面保护。因此,用于保护DevOps 的工具以及依赖云端资源的应用程序,都可能成为漏洞来源。
传统基础设施
遗憾的是,许多公司仍然依赖传统基础设施,当这些基础设施与云端服务结合时,会形成混合环境。这些混合环境通常较为复杂,可能无法满足DevOps 流程标准。
人才招聘
建立DevOps 体系的另一个挑战是人才问题。DevOps 工程师的需求非常高。ZipRecruiter 数据显示,资深DevOps 工程师的年薪平均超过13.4 万美元。当组织无法招聘到合适人才时,可能需要培训现有员工,这种方式成本较低,但耗时较长,会影响软件发布时间表和日常运营。
什么是DevSecOps?
它是一种将安全性整合到软件开发流程中的方法。其核心概念是,安全是软件开发人员和IT 管理员必须共同承担的责任,通常会将自动化安全任务整合到DevOps 流程中。
传统上,应用程序安全并非开发人员的首要任务。安全考量通常在应用程序开发完成后才会出现。开发人员认为,由他人开发、客户安装的防毒程序和防火墙,足以保护IT 环境。
然而,网络犯罪的数量和复杂度不断增加,暴露了单个产品和应用程序的漏洞。公司的财务和声誉损失大幅上升。这促使工程和IT 团队在开发流程初期就携手合作,将安全措施整合到应用程序中,并在推出新功能和新版本时持续强化。
DevOps 与 DevSecOps
DevOps 与DevSecOps 之间存在诸多相似之处。
沟通与协作
两者都认识到,团队合作不仅对生产速度至关重要,对生产质量也同样关键。两者都利用灵活的框架实现动态、持续的工作流程,鼓励在所有发展阶段进行公开沟通和协作。
自动化
两者都采用自动化技术,通过软件完成耗时的手动工作。自动化帮助DevOps 和DevSecOps 在更短时间内达成目标。
持续流程
尽管开发周期包含多个阶段,但DevOps 和DevSecOps 都采用持续流程以确保目标达成。由于不存在部门壁垒,也就不会出现瓶颈。它们共同持续进行以下工作:
- 提供新功能、软件更新或全新应用程序
- 测试并重构代码库
- 监控并分析代码库的质量和安全边界的强度
- 将更新后的代码库与安全仓库合并
DevOps 安全最佳实践原则
拥抱DevSecOps 模型
该模型需要团队之间的沟通与协作,当团队不协调时,就会出现问题。当然,最严重的问题是代码存在漏洞,但即使是最轻微的配置错误也可能成为攻击途径。当代码库的安全性成为优先考量时,DevOps 和IT 团队中的每个人都有责任提供尽可能安全的代码。
政策与治理
DevOps 安全对工程和IT 团队而言可能是一项新任务,但它是组织整体企业安全、治理和法规遵循政策的延伸,仍需符合组织的整体企业安全、治理和法规遵循要求。这能确保开发和部署的代码符合组织的安全标准。
自动化DevOps 安全流程和工具
随着代码库的扩大,分析每一行代码以排查潜在漏洞变得越来越困难。自动化安全工具可帮助团队持续设定和管理任何潜在风险。这样一来,安全测试就能满足DevOps 环境通常所需的速度要求,同时不影响质量。自动化还能最大限度降低人为错误的风险。
全面可见性
对用于构建和交付软件的所有资源的可视性至关重要。DevOps 团队越来越依赖全新、免费可用的开源工具来管理数百个安全组和服务器实例。IT 安全团队必须及时了解这些存储在云端的工具,因为云端安全可能存在隐患。DevOps 安全方法必须对所有设备、工具、账户、实例、容器和凭证保持可视性,以确保所有设备都符合组织的政策要求。
漏洞管理
在部署代码之前,必须发现并解决所有漏洞。DevOps 安全部门可以对生产版本进行测试,以识别任何问题。如果发现问题,团队可以立即专注于补丁程序或安全修复工作。
配置管理
一个配置错误很容易被引入大型代码库。考虑到DevOps 环境的速度要求,团队必须快速识别并修复配置中的任何错误。事实上,在所有代码库中,持续配置应成为常态。
DevOps 机密管理
DevOps 团队使用一系列工具实现软件部署、配置管理和应用程序部署的自动化。然而,这些过程都需要机密管理,因为即使在生产环境中,开发人员也会存储特权账户凭证、安全壳层(SSH) 密钥、应用程序接口(API) 令牌等信息。显然,这是一条攻击途径,可能让网络攻击者有机会窃取组织数据并破坏整个IT 基础设施。因此,从代码中移除或妥善管理这些内嵌凭证至关重要。
特权存取管理(PAM)
进一步说明特权账户凭证的访问问题:即使凭证从软件部署和配置工具中移除,它们通常仍由DevOps 团队中的部分成员共享。特权访问管理可能对组织构成威胁,需要加以管控。为此,团队必须实施最小特权原则,即员工仅应获得完成工作所需的访问权限。这可降低攻击者从组织内部或外部访问代码的风险。
网络分段
另一种改善DevOps 系统安全的方法是网络分段,这是防止攻击者对整个网络造成损害的典型防御策略。当不同的服务器被划分为不同群组时,安全效果会得到提升。团队可以监控运行情况,以发现任何潜在问题。
原创文章,作者:余初云,如若转载,请注明出处:https://blog.jidcy.com/jsjc/2630.html
