DevSecOps 工具链的最佳实践

以下各节介绍了 DevSecOps 各工具链的最佳实践:持续集成(CI)、基础设施即代码的持续集成( IaC )、持续部署(CD)以及持续合规(CC)。

持续集成(CI)工具链的最佳实践

DevSecOps 的CI工具链遵循以下实践:

  • 在应用程序代码库上运行 detect-secrets,以防止应用程序源代码中的机密信息泄露。
  • 对应用程序代码运行单元测试和应用程序测试。
  • 在应用程序代码库上运行静态代码扫描器,以识别源代码中的安全漏洞。
  • 利用 Code Risk Analyzer 等合规性扫描工具,对所有应用程序代码库执行合规性检查,包括漏洞扫描以及对所有软件包依赖项的物料清单(BOM)检查。
  • 收集自上次构建以来所有已合并的拉取请求的同行评审合规性数据。
  • 在每次向 Git 提交代码时构建一个容器镜像,并根据构建编号、时间戳和提交 ID 设置标签,以确保可追溯性。
  • 对构建好的容器镜像进行签名。
  • 扫描容器镜像以查找安全漏洞。
  • 将构建好的工件部署到开发环境中,并对正在运行的应用程序执行动态扫描(ZAP API 和 UI 扫描),以检测运行时漏洞。
  • 在开发环境中对已部署的构建产物运行验收测试和集成测试。
  • 在每次管道运行结束时,将所有证据(扫描结果、测试结果、日志、同行评审数据和管道运行数据)汇总到证据库中。

基础设施即代码( IaC )工具链的持续集成(CI)最佳实践

DevSecOps 针对 IaC 工具链的持续集成(CI)遵循以下实践:

  • 在 IaC 存储库上运行 detect-secrets ,以防止 Terraform 配置中的密钥泄露。
  • 在每次提交 Git 时,都会在 IaC 配置下运行单元测试。
  • 对 IaC 仓库运行静态代码扫描,其中包括用于代码检查和最佳实践执行的Terraform专用工具(如 tflint ),以及用于确保格式一致性和配置有效性的工具(如 terraform fmt 和 terraform validate )。
  • 使用 IaC-specific 工具(如Code Risk Analyzer或 checkov )对 IaC 仓库进行合规性检查,以扫描合规性问题。
  • 在每次提交 Git 时,生成一个包含 Terraform 配置的 Tar 文件。
  • 对构建好的 Tar 工件进行签名。
  • 使用 IBM Cloud Schematics 或 Terraform CLI,将 IaC 配置部署到开发环境。
  • 在开发环境中对已部署的配置运行验收测试和集成测试。
  • 将构建生成的工件添加到库存仓库,以实现可追溯性并将其部署到下游环境。
  • 在每次管道运行结束时,将所有证据(扫描结果、测试结果、签名数据、日志和管道运行数据)汇总到证据存储库中。

用于部署安全应用程序的持续部署(CD)工具链的最佳实践

为了部署安全的应用程序,DevSecOps CD 工具链遵循以下做法:

  • 通过针对库存仓库提交一个推广拉取请求,来定义部署范围并计算部署增量,即自上次完成部署以来发生变更的工件集合。
  • 确保当前部署范围内的所有拉取请求在继续处理之前均已通过同行评审并获得批准。 如果任何拉取请求未获批准,则暂停部署。
  • 验证每个计划部署的构建产物是否已正确签名。 如果缺少有效的签名,则阻止部署。
  • 根据部署差异计算部署物料清单(BOM),并从相关的 CI 管道运行和当前的 CD 管道运行中收集证据摘要。
  • 在已配置的变更管理系统中创建变更请求,并附上部署物料清单、证据摘要以及同行评审合规性数据。
  • 如果满足所有合规标准,则自动批准变更请求。 支持在未完全满足条件时进行手动审批或紧急标记。
  • 一旦变更请求获得批准或被标记为紧急,系统将把库存中的构建产物部署到目标环境(例如预发布环境或生产环境)。
  • 在部署完成后运行验收测试和集成测试,以验证部署是否成功以及应用程序是否按预期运行。
  • 如果在部署或验收测试阶段发生故障,系统会自动在同一条管道运行中回滚部署,从而在库存中保留最后一个已知正常状态。
  • 使用 close_category (值为 Successful 或 Successful with issues )关闭变更请求,并将 <target-environment>_latest 库存标签移至已部署的提交。
  • 在每次管道运行结束时,将所有日志文件、构建产物和证据收集并上传至证据存储库。
  • 可选地,在部署成功后,为合并的拉取请求添加 deploy:{region}:{env} 标签,以便提供端到端的部署可追溯性,而无需访问管道详细信息。

持续合规(CC)工具链的最佳实践

DevSecOps 的CC工具链遵循以下做法:

  • 在所有库存源代码仓库上运行 detect-secrets,以识别应用程序源代码中的密钥泄露。
  • 对库存中找到的所有源代码仓库运行静态代码扫描( SonarQube 或自定义实现)。
  • 对已部署的应用程序运行动态应用程序安全测试扫描(OWASP ZAP),以查找运行时漏洞。
  • 利用相关工具(如 Code Risk Analyzer)对所有库存源代码仓库执行合规性检查,包括漏洞扫描、针对 Kubernetes 部署清单的 CIS 检查、针对所有包依赖项的 BOM 检查,以及分支保护验证。
  • 扫描所有已部署的容器镜像,以查找安全漏洞。
  • 针对在管道运行过程中发现的每个 CVE、漏洞或警报,创建或更新相应的事件问题,并为每个问题设置截止日期。
  • 将每个阶段的证据收集到证据保管室,将扫描和检查结果关联到相应的问题,并更新所有已扫描实物的合规状态。