DevOps 安全最佳实践

136 阅读8分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第22天,点击查看活动详情

快速交付软件的能力已成为在当今不断发展的数字世界中保持竞争力的必要条件。幸运的是,DevOps 通过与开发人员和运营团队无缝协作并在整个软件开发生命周期 (SDLC) 中自动化流程,使 IT 业务能够加快速度。但是,有一个陷阱。尽管 DevOps 确实促进了高节奏的软件交付,但安全因素常常被忽视,这导致应用程序安全性不佳。 

此外,安全团队通常将安全性视为基础结构组件,而不是应用程序设计元素。保护边界安全的防火墙等基本措施被认为是足够的。当应用程序托管在企业基础设施以外的环境中时,例如云、容器或无服务器计算平台,这种方法会完全失败。此外,在软件开发生命周期的最后阶段引入安全测试本质上会造成摩擦,减缓业务团队实现不受限制的 DevOps 的速度和规模。 

那么,企业如何应对 DevOps 生态系统中的安全挑战?答案是 DevSecOps!

什么是 DevOps 安全性?

DevOps Security 或 DevSecOps 是关于开发、安全和运营团队的无缝协作,它打破了以前存在于安全、IT 运营和软件开发团队之间的传统界限。它在整个 DevOps 管道中紧密集成了安全工具和流程,以实现向客户提供高质量产品的持续集成 (CI) 和持续交付 (CD)。 

因此,DevSecOps 不再像过去在 DevOps 方法中那样在开发生命周期结束时测试代码,而是将安全测试转移到生命周期的左侧(左移方法),从而减少了之前或之前的返工需求部署后。DevSecOps 不仅提高了代码的整体质量,而且还提高了开发人员的工作效率,因为他们现在可以专注于交付高质量的代码并充满信心地生成更频繁的版本。

如何构建 DevOps 安全文化?

尽管许多组织都在利用 DevOps 安全性,但只有少数组织充分发挥了 DevOps 的潜力。主要原因是低估了 DevSecOps 所需的文化和思维方式的潜在变化。这种误解使员工难以理解 DevSecOps 的总体目标。此外,复杂的运营模式、孤立的流程、不充分的交叉技能以及团队执行不协调的行动正在阻碍企业实现高速、高质量的交付。 

因此,要构建 DevOps 安全文化,你的组织不仅必须在技术堆栈方面做出重大改变,而且在人员架构方面更是如此。以下是在整个组织中吸收 DevSecOps 文化的步骤:

1. 心态改变

你的组织需要正确的心态来鼓励在整个 DevOps 生命周期中持续的安全测试文化。在 DevOps 文化中,安全性并没有集成到开发过程中。安全责任被赋予安全团队,DevSecOps 需要转变这种思维方式。通过将安全性转移到软件开发生命周期的左侧,安全性应该成为每个人的共同责任。此外,组织必须从加速开发速度的单一思维方式转变为通过改进和扩展当前的敏捷原则和流程来提高速度和质量的更广泛的思维方式。

2、机制变化

要构建新的 DevOps 安全文化,组织必须定义关键的支持机制,例如新的 DevSecOps 角色和职责、团队如何协同工作的运营模型,以及定义每个角色参与级别的交互模型。这对于加强思维方式和工作方式的转变至关重要。 

3. 技能组合的变化

技能差距仍然存在,这使得组织难以建立合格的 DevSecOps 团队。因此,为了解决这一人才缺口,组织必须进行投资以构建提升技能、交叉技能和新技能的能力。 

在当前的 DevOps 行业中,网络安全人才在组织内已经稀缺,比例为1 名安全工程师: 10 名 IT/DevOps 工程师:100 名开发人员。考虑到这种巨大的差异,组织必须以培训和采用应用程序安全测试工具的形式授权和教育处于前线的开发人员,使他们能够保持软件安全。

如何开始在组织中实施 DevSecOps?

实施 DevOps 安全性并非易事。企业必须在速度和安全性之间取得适当的平衡,同时将安全实践嵌入到 DevOps 管道中。以下是一些可帮助你开始在你的组织中实施 DevSecOps 的提示:

定义 DevSecOps 策略 

为了成功地将安全性集成到 DevOps 管道中,企业必须定义一个战略,明确阐明在整个软件开发生命周期中推动安全性的指导原则。在启动流程之前,工程和安全团队必须首先与 DevSecOps 战略的标准和目标保持一致。这有助于建立团队之间的相互信任。该战略还应定义共同目标、对相互问责的期望以及衡量成功的指标。此外,该策略还应包含一组清晰易懂的安全策略和治理,用于访问控制、代码审查、配置管理和漏洞测试等。所有团队都必须遵守这些政策,并确保它们在整个 SDLC 中得到实施。 

了解你的工作流程

你无法保护你看不到的东西。在大多数组织中,DevOps 和安全工程师最终会创建他们的运营孤岛以专注于他们的核心目标。开发人员专注于更快地创新和构建功能,而安全团队则专注于安全方面,最终在他们之间建立了一堵墙。这进一步导致整个工作流和工具链的可见性不完整。 

所有团队,包括开发、运营和安全人员,都必须了解 DevOps 管道中涉及的工作流程和工具链。主要目标是让安全团队了解开发人员使用的工具和环境。这有助于他们构建统一的安全测试策略,定义将安全性转移到左侧所需的测试、工具和数据。安全团队还可以挖掘改进现有 DevOps 管道工作流的机会,使它们与左移安全性更加兼容。另一方面,开发人员必须经过培训才能使用至少一种流行的 AppSec 技术,例如 SAST、DAST、SCA、IAST 和 RASP。这有助于他们在整个 SDLC 中测试他们的代码。

实施安全护栏

在整个 SDLC 中实施安全流程和程序时,主要目标是使安全成为日常工作的无缝部分。团队可以通过以下方式做到这一点:

  • 尽早并经常嵌入安全性(将安全性转移到左侧)。
  • 将重点从验收和系统级测试转移到单元测试和集成测试。
  • 利用预先批准的工具来降低工具链的复杂性。 
  • 引入渗透测试和自动化安全测试,以识别和修复开发过程中的关键安全漏洞。
  • 使用清单强化 CI/CD 系统,以确保团队遵循最佳实践。 
  • 实施硬安全护栏——采取行动,同时向工程师提供反馈循环以解决问题。

自动化

重要的是要使安全流程和工具自动化,以按照 DevOps 流程的步伐扩展和加速安全操作。这也有助于减少 CI/CD 管道中因人工干预而出现的安全缺陷。代码审查、配置管理、漏洞评估和访问管理等安全流程都可以实现自动化。否则,很难在不妨碍开发过程的情况下识别安全问题。自动化还使开发人员和安全团队免于处理手动、重复的流程,帮助他们专注于更关键的任务。  

安全自动化的一些示例包括:

  • 在容器内实施安全扫描器。
  • 对于已知的安全风险,在 DevOps 管道中自动执行更新和补丁。
  • 对于安全回归测试,尽可能自动化流程,同时自动协助需要手动执行的部分。 
  • 利用自动化工具来处理代码分析、漏洞管理、配置管理、机密管理、审计和其他流程,同时工具已经在使用中。

持续改进

网络空间在不断发展,新的和复杂的攻击向量呈指数级增长。因此,为了领先于这些不断变化的网络威胁,必须通过持续的安全验证和安全日志的实时监控来不断更新或改进你的安全防护措施。定期评估你的安全状况并将健康报告发送给相关团队,以及时解决任何关键的安全漏洞。在确保持续安全性的同时持续集成和部署代码是 DevSecOps 的最终目标。