跳转到主要内容
Chinese, Simplified

借助DevOps实践,企业IT更快,更灵活。自动构建,测试和发布形式的自动化在实现这些优势方面发挥着重要作用,并为持续集成/持续部署(CI / CD)管道奠定了基础。但是,是否可以在不降低流程速度的情况下将安全性集成到混合中? IT团队可以将安全性集成到DevOps管道中的一种方法是确保发布的代码从一开始就是安全的。将安全性作为一流公民集成到DevOps流程中的概念称为DevSecOps,是安全敏感型企业的最佳实践。

Cloud Academy最近发布了一套新的DevOps实验室,重点介绍了CI / CD管道自动化的一些最佳实践。在这篇文章中,我将向您展示如何在CI / CD管道中使用静态分析来提高代码质量,从而减少现在和将来的问题。

什么是静态分析?


静态分析是一种在推送到生产之前分析缺陷,错误或安全问题的代码的方法。静态分析工具通常被称为“linters”,可以从代码中删除不必要的毛茸茸,并执行一些自动检查以提高代码质量。静态分析工具可以检查:

  • 代码风格约定和标准不一致。它可以像执行一致的缩进和变量名一样简单,也可以像强制执行MISRA或CERT安全编码标准那样复杂
  • 资源泄漏,例如无法释放已分配的内存,最终可能导致程序崩溃或无法关闭文件
  • 应用程序编程接口(API)的使用不正确
  • 常见的安全漏洞,例如Open Web Application Security Project(OWASP)或Common Weakness Enumeration(CWE)所识别的漏洞

有哪些静态分析工具?


可用的静态分析工具可以根据它们支持的功能进行分类,包括:

  1. 编程语言:工具可能支持单语言或多语言。如果你的代码库涵盖多种语言,像Coverity这样支持14种语言(包括JavaScript,.NET,Java和Python)的单一工具可能是发现跨语言错误的最全面的选择。
  2. 实时工具:瞬时分析工具非常适合在编写开发环境时检查代码。在这里,权衡是对更彻底,耗时的检查的速度。其中许多是开源的,可以更容易地采用和定制。
  3. 深度分析工具:另一方面,深度分析工具可能需要更长的时间,并且可能会识别实时工具可能遗漏的问题。该领域的企业级工具通常需要很高的许可费用,并且它们可能会带来更多的问题,而不是您要解决的带宽问题。其中许多工具可能配置为仅报告最重要的问题。
  4. 编译器:虽然不是专用的静态分析工具,但编译器也可用于提高代码质量。您可以使用配置标志来调整它们执行的检查数。

在CI / CD中集成静态分析


在使用静态分析工具的众多好处中,对组织最有益的是能够在错误发布之前发现错误(以及修复成本较低的时候)。在CI / CD的DevOps实践中,静态分析工具提供了额外的好处。

在开发过程中,需要花费很长时间才能运行的工具会被忽略。即使静态分析并不总是一个漫长的过程,它仍然不是开发人员时间的最佳用途。在CI / CD中集成分析工具可确保一致且自动地使用它们,同时提供额外级别的分析,以确保无法通过任何内容。

如何在您的环境中集成静态分析工具有不同的选项。一种方法是在管道的早期运行它以及其他自动化测试。此时,您将能够在同行代码审查之前解决任何问题,并加快整个过程。反过来,开发人员花在审查上的时间更少,并且有更多时间来开发新代码。

如果您拥有大量代码库,则在每次提交时运行深入分析可能会花费太多时间。相反,您可以在开发分支上使用不太全面的分析配置,并按计划执行更昂贵的扫描,或者在集成到上游分支时执行。我们的目标是尽可能早地发现错误,您可以选择最适合您团队的系统。像Klocwork这样的工具完全采用了CI / CD工作流程,并且可以逐步分析每次提交时的代码更改。

高端静态分析工具还可以随时跟踪错误。这可以帮助您选择在当前发布周期中处理哪些问题,因为源代码不断被集成。在长期遗留的代码中报告的问题没有引起问题,可能不值得花时间投资来解决它们。相反,使用宝贵的开发人员时间来关注更近期的问题。

另一个实际约束是可用于静态分析的预算。不是为每个开发人员获取许可证,而是在一定数量的构建计算机(如果可能的话,单个计算机)上运行分析工具。

通过在Cloud Academy上的CI / CD管道实验室中完成静态代码分析,您可以体验静态分析在CI / CD中的工作原理。这个新的动手实验室使用以AWS为中心的连续部署管道来部署Node.js应用程序。该应用程序最初发布到生产中而不执行静态分析。您将学习如何对已部署的应用程序执行注入攻击,然后使用静态分析来识别安全问题。最后,将静态分析集成到管道中的AWS CodeBuild构建阶段,以防止在实施修复之前部署易受攻击的代码。这是最终的环境:

Cloud9 EC2 Environment

CI / CD中基础设施静态分析代码


作为代码的基础设施(IaC)为开发人员提供了许多好处,包括没有配置偏差,易于重现的环境以及简化的版本控制协作。您是否知道静态分析还可用于实施代码标准并识别基础架构的安全漏洞?通过对基础架构代码使用静态分析,与需要实际部署基础架构的基础架构测试相比,您可以自动化流程并接收早期反馈,这可能是一项耗时的操作。

对于您可能正在使用的大多数IaC框架,通常都会内置某种形式的静态分析。可能有命令检查语法,确保使用有效的参数值,并自动设置代码样式。您还可以执行干运行部署,以检查环境中发生的更改,或在实际部署任何基础结构更改之前检测错误。

您可以使用自己的自定义分析代码补充这些命令,以检查您需要验证的任何内容,例如确保某些端口不对公共互联网开放。幸运的是,通常有开源静态分析工具已经提供了常见的检查。例如,cfn_nag可用于检查AWS CloudFormation模板(AWS的本机IaC框架)中的安全问题。 cfn_nag检查的其他示例包括:

  • 确保IAM策略不会过于宽松
  • 确保在提供加密的服务上启用加密
  • 确保安全组不会过于宽松

如果开源IaC静态分析工具不提供您想要的检查,则可能更容易将其添加到现有代码库而不是从头开始。

您可以亲身体验如何在云学院动手实验室的CI / CD管道中进行IaC静态分析:静态分析和基础设施警报作为代码。该实验室使用Terraform作为IaC框架,使用Jenkins作为其持续集成管道。您将了解Terraform中内置的静态分析功能以及两个改进Terraform本机功能的开源静态分析工具。通过推送到Git存储库,可以持续集成新的基础架构代码。您还将学习如何根据静态分析的结果配置Amazon SNS通知。这是实验室的最终环境:

Cloud9 EC2 Environment - Final lab environment

补充静态分析


虽然静态分析工具在不断改进,但它们并不是满足您所有代码质量和安全需求的灵丹妙药。 相反,将它们视为更全面的解决方案的一部分,以提高应用程序和基础架构代码的质量和安全性。 有时,您仍然需要使用传统的应用程序单元和集成测试,甚至是基础架构测试。 您将能够在我们的动手实验室,使用Serverspec进行基础架构测试中自行测试Serverspec基础架构测试框架。

Infrastructure Testing with Serverspec

安全性是另一个重要的自动化测试框架类别。 在此动手实验中学习如何使用Gauntlt保护您的代码免受攻击。 使用Gauntlt,您可以为几种流行的安全分析工具编写自动化测试,并且可以轻松扩展到其他工具。

With Gauntlt you can write automated tests for several popular security analysis tools

确保安全的应用程序是安全性的一个重要方面。 传输层安全性(TLS)/安全套接字层(SSL)协议是保护Web上通信的标准。 了解部署SSL / TLS的最佳实践以及在此Cloud Academy实验室中测试SSL / TLS部署的工具。

Open SSL

原文:https://cloudacademy.com/blog/what-is-static-analysis-within-ci-cd-pipelines/

本文:http://pub.intelligentx.net/what-static-analysis-within-cicd-pipelines

讨论:请加入知识星球【首席架构师圈】

Tags
 
Article
知识星球
 
微信公众号
 
视频号