自动化质量检查工具是否适用于Ops代码

55次阅读
没有评论

问题描述

在开发领域,我们有许多工具可以进行自动化质量检查。我们有在每次构建时运行的单元测试,用于检查代码质量的Sonar,将指标发送到Grafana和Okta并自动触发警报等等。但是,我对运维领域并不太熟悉,想知道是否有类似的自动化工具适用于我们的Ops代码。对于Terraform脚本、Dockerfiles、Helm/K8脚本、Cloudbees配置和其他Ops代码,我希望能够自动化以下方面的检查:
– 语法检查
– 代码异味/反模式
– 路由/连接准确性检查
– 安全最佳实践检查(不要暴露这些端口或包含这些凭据,或者授予这些权限)
– 适当的资源配置(为任务的规模分配的资源是否过多或过少)
– 高成本警告
– 类似单元测试的工具,以确保我们没有以比“是否成功部署”更微妙的方式破坏构建
鉴于我的经验有限,可能还有很多我不知道的方面。是否有分析我们的Ops代码并以这种方式提供自动化支持的支持工具?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在运维领域,有一些工具可以帮助你实现Ops代码的自动化质量检查。以下是一些具体的示例:

Open Policy Agent

Open Policy Agent(OPA)提供了一种通用的策略语言,可以将任意策略表达为代码。你可以详细研究一下这个工具,看看它是否符合你的需求。

Compliance as Code

通常情况下,你需要一个被称为“合规框架”的东西,而在DevOps领域更常被称为“策略即代码”。这允许你将策略定义为代码,也就是“可机器读取和可执行”。你在框架的DSL中指定策略,它会在你的流水线的某个阶段执行,并在违反策略时失败更改。
以下是两种实现方式:

Hashicorp Sentinel

在Hashicorp的世界中,有一个名为Sentinel Framework的工具。这是一个企业级产品,可能与你的情况无关,但它是我见过的最好的实现之一。重要的是,它有一个内置的测试框架,有助于编写良好的策略代码,而且非常灵活。我在编写Chef Inspec策略时就借鉴了这个工具。

Chef Inspec

Chef Inspec是一个使用rspec风格断言编写策略即代码的框架。它使用基于Ruby的DSL,并支持主要云平台(AWS、GCP、Azure)以及操作系统级资源。它是开源的,所以你可以在任何地方使用它。你可以使用它对已经配置好的状态执行断言,这使它非常类似于单元测试。然而,Inspec本身没有像Sentinel那样的内置测试框架,但你可以使用Ruby生态系统来进行测试。
一些注意事项:
– 这两个工具都允许你将策略定义为代码,并扩展到现有基础设施的测试覆盖范围。
– Sentinel会在应用之前捕获违规行为,而Inspec需要针对已经配置好的状态执行。
– 这两个工具都可以满足你的需求,但具体是否适用取决于你的技术栈。
– 并没有万能的解决方案,你需要将策略作为代码编写。通常情况下,这意味着将某种形式的人类可读文档转化为框架的DSL。
– 另一方面,这为与安全团队合作提供了绝佳机会,实现所谓的DevSecOps。

方案2

我们在Terraform流水线中使用的一些工具来检查代码质量和最佳实践包括:
Tflint
TFSec
Checkov
这些工具可以在MR阶段及早发现问题。

正文完