质量保证

利用静态分析测试基础设施作为代码

Istock 843015650

对于质量保证(QA)领域的人来说,当今最复杂的挑战之一是将基础设施作为代码进行测试(IaC-iac测试).因此,对IaC部署的测试并不总是正确的,或者有时根本没有,这给许多组织带来了多种问题。

虽然软件测试一直存在,但与基础设施相关的自动化测试才出现几年,因此公司需要确保其IaC的安全性和健壮性,而不需要部署。

什么是基础设施代码iac测试?

基础设施即代码(IaC),也称为可编程或软件定义的基础设施,是将IT基础设施作为软件而不是硬件进行编码和管理的实践。它使开发人员和运维团队能够通过自动化管理和监控资源,无需手动配置硬件设备和操作系统。

IaC类似于脚本编程,组织可以使用它来自动化it流程。但是,其更高级的语言允许在配置和部署过程中提供更大的通用性和灵活性。IaC构建在Terraform、Kubernetes和Helm等平台上,使软件工程师能够在可重复的环境中工作,从而简化协作并允许幂等性和收敛性。

有了这个基于代码的基础设施,开发团队可以很容易地自动化流程、测试迭代、应用版本控制实践,并批准生产代码,就像软件设计实践一样。再加上它与DevOps实践的紧密结合,这些优势使IaC成为一种快速、高效、一致的控制基础设施的方式。

测试IaC的重要性-iac测试

IaC模型的成功依赖于开发人员和QA测试人员理解它所需要的各种配置管理和自动化工具。根据影响基础设施的组件、环境和部署的数量,许多公司都要认真考虑测试IaC。当错误发生时,它们会迅速影响应用程序的性能,因此在发布到生产环境之前和之后执行全面的测试是必要的。

在IaC中有几种保持代码质量的测试方法。

  • 静态分析测试确保代码遵循行业标准,并检测源代码中可能导致漏洞的弱点。这些测试在部署之前进行。
  • 动态测试关注于发现已部署的基础设施资源和组件是否在生产环境中按预期协同工作。
  • 混乱的工程允许开发人员在故障发生之前识别故障——通过主动测试平台在压力下的响应方式,我们可以在为时已晚之前识别并修复错误。

出于本文的目的,我们将专门关注静态分析测试。

IaC -静态分析测试方法iac测试

静态测试允许在没有部署的情况下进行IaC测试,使其具有成本效益、时间效率和安全性,同时支持使用最佳实践。

让我们来探索执行这些类型测试的最佳方法和工具。

内置命令

在完全采用任何库或外部IaC测试工具之前,最好利用它们的内置命令作为验证语法的手段。例如,在Terraform中,命令“fmt”和“validate”有助于识别格式和语法问题。对于Helm,我们有“lint”命令,它允许我们检查Helm模板是否格式良好。

在验证语法之后,有几种测试路径可供选择。

剥绒机

有几种开源工具可以通过分析源代码和查找问题来改进IaC,但每种工具都有其优点和缺点。

  • TFLint允许QA测试人员通过主要的云提供商(如AWS、Azure和GCP)发现可能的错误(例如非法实例类型)。它还加强了最佳实践和命名约定,同时警告开发人员有关已弃用的语法和未使用的声明。
  • Yamllint检查语法有效性和奇怪的地方,如键重复,以及外观问题,如行长、尾随空格、缩进等等。它还使测试人员能够确保Kubernetes等技术的语法最佳实践。
  • KubeLinter获取图表的路径,并运行一系列测试以验证图表是否格式良好。这些检查人员分析Kubernetes清单或舵图,以确保代码遵循最佳实践,特别关注生产就绪性和安全性。

科协

QA测试人员利用静态应用程序安全测试(SAST)通过检查源代码和识别漏洞来源来保护IaC。就开源的SAST工具而言,有三个竞争者立即出现在脑海中。

Checkov是SAST的一个很好的选择,因为它包括131条用于Azure CIS基准测试的规则,172条用于AWS, 7条用于谷歌云平台。此外,它允许测试人员分析地形、地形计划、云形成、K8S、Docker文件和ARM模板。Trivy另一方面,使用tfsec安全扫描器分析Terraform、Kubernetes和Docker文件,支持Azure、AWS、Cloudstack和谷歌。最后,Anchore专注于寻找docker文件和容器注册表中的漏洞,尽管它主要是一个付费工具,并不是完全开源的。

政策即代码

就像基础设施即代码一样,策略即代码是编写代码来管理和自动化策略的概念。通过以这种方式表示策略,开发人员可以采用经过验证的软件开发最佳实践,如版本控制、自动测试和自动部署。

基于开放策略代理(OPA),云原生基金会的策略即代码标准,Conftest是一个实用工具,它让QA测试人员能够在分析一些技术(如Terraform、Kubernetes、Docker等)的同时,针对结构化配置数据编写测试。有了它,我们可以创建不包含在SAST扫描中的策略,或者为内部加密标准开发策略,因为它几乎支持任何IaC技术。

因此,使用linter、SAST和Policy as Code,我们能够解决部署前测试IaC的挑战,确保在生产环境中更加顺利。

请继续关注我们关于动态测试和混沌工程的后续博客。

检查我们的这里的空缺职位和# GrowWithUs

作者简介

Holmes Giovanny Salazar Osorio是一名测试软件开发工程师。他在设计和开发国际项目测试策略方面有超过7年的经验,使用敏捷方法和最佳实践。目前,Holmes作为质量工程团队的一员,致力于创建一个高度可扩展的SaaS平台,专注于销售业绩管理和财富管理功能。

更多来自作者

留下回复

这个网站使用Akismet来减少垃圾邮件。了解如何处理您的评论数据

订阅每周博客文摘:

报名