IaC安全和合规工具
IaC扫描工具对于安全地设计您的平台代码和遵循组织的遵从性和最佳实践至关重要,它通过代码创建和实施规则,允许您将这些规则自动化并集成到您的软件开发生命周期(SLDC)中。
一个优秀的工程团队接受人为错误,并引入检查,以自动化和系统化的方式消除、减轻或监控人为错误,下面我们将介绍的工具正是解决方案的一部分。
在本指南中,我们将研究一些可用的IaC扫描工具,并讨论它们是如何工作的以及如何使用它们。
选择一个最佳的扫描工具是很重要的。一些扫描工具是专门为一个IaC工具而做的,而一些是与多个IaC工具兼容的。我们将探索其中的四个工具及其最佳用例。
1. Open Policy Agent
Open Policy Agent(OPA)是一个开源策略引擎,它为IaC环境提供了一个可移植的框架。使用OPA,您可以扫描IaC代码,并强制遵守指定的规则或标准集。策略是使用OPA的本地查询语言rego以声明方式编写的。
作为一个多用途工具集,OPA提供了对各种工具的支持、Terraform、Helm或Dockerfile构建您的平台,但是您甚至可以将实现扩展到您的k8s集群本身,请参见此处的文档。
使用
OPA可以作为守护进程或库与IaC代码集成。要运行OPA,您有各种可用的选择。您可以:
- 在Mac或Linux上下载OPA二进制文件,或者在Docker上安装它们
- 使用命令行界面运行opa eval。
- 使用opa运行,它提供一个交互式REPL或配置一个服务器。
- 以Go库的形式运行OPA。
让我们来看一个示例,说明如何使用OPA检查IaC代码的安全性问题和最佳实践遵从性。
带Terraform和Kubernetes的OPA
OPA可以用来扫描Terraform,不管它是与哪个公共云提供商合作的。
它提供了conftest–一个测试实用程序,可以用来扫描Terraform的代码更改。
要安装conftest,请按照此处提供的说明进行操作。
conftest将通过查找拒绝、违反和警告规则来确保这些更改符合遵从性检查。
例如,我们可以使用conftest扫描Terraform代码,通过检查是否启用、使用的CMK类型以及是否在bucket策略级别强制执行这些配置来创建符合bucket加密策略的新S3 bucket。
注意:使用OPA的Rego语言编写的Terrascan允许您在提供资源之前扫描Terraform、和Kubernetes文件,以检测错误和安全问题。
OPA还可以通过在部署代码请求之前扫描它们中的漏洞来保护Kubernetes控制策略,
conftest可以通过运行以下命令来检查K8s配置YAML文件:
$ conftest test deployment.yaml
OPA接纳控制
在Kubernetes中,Admission Controllers在创建,更新和删除操作期间对对象进行语义验证,使用OPA代理,您可以在Kubernetes对象上执行自定义策略,而无需重新编译或重新配置Kubernetes API服务器,为什么这有用?它关闭了开发管道和部署之间的循环,例如,如果有K8S访问权限的人试图手动部署应用程序,您的策略仍然得到执行。
与其它IaC扫描工具的比较
与其他IaC扫描工具相比,OPA在单个工具上提供了最广泛的覆盖范围。
其他选择侧重于一两个具体的IaC工具,但OPA是最广泛的。OPA还有Rego,这是一种不同于我们所研究的其他工具的查询语言。
2. KubeLinter
KubeLinter是一个开源的静态分析工具,可以扫描Kubernetes、YAML清单文件和Helm图表模板。
可以使用默认值或通过指定覆盖文件的值扫描舵机图。
它确认代码配置是否符合最佳实践,是否没有安全问题。指定的规则确定要标记或忽略哪些错误和错误配置;默认情况下,它带有一个“DB”,可以根据组织的安全性和遵从性需求进行扩展和配置。
使用
使用KubeLinter涉及三个基本步骤。
首先,您必须使用Go命令行、Brew for Mac和Linux或从源代码构建来安装该工具。
指定要扫描的YAML文件的位置。
现在可以在清单或舵机图上运行以下命令:
kube-linter lint manifest.yaml
kubelinter lint ./my-helm-chart/
对于舵形图,如果您使用的是覆盖值YAML文件,只需在那里进行修复并重新扫描。
kubelinter lint ./my-helm-chart/ -f override_values.yaml
扫描完成后,KubeLinter会生成一个列表,列出它所做的检查、发现的错误和建议的修复方法,并附有文档链接。
您还可以通过运行:
kube-linter checks list
代码修复完成后,重新运行lint并验证您的更改。
与其它IaC扫描工具的比较
与其他IaC代码扫描工具相比,KubeLinter非常容易设置。但是,与OPA相比,它的功能有限。例如,它的唯一用途是检查Kubernetes清单文件。它也只在围棋中可用。
它是可定制和可扩展的,您可以编写额外的策略,从而扩展或适应您组织的策略和需求。
3. cfn_nag
cfn-nag是一个开源的linting工具,用于扫描CloudFormation模板,确保它们符合安全最佳实践。它通过寻找模式并将它们与指定的规则进行比较来实现这一点。这些规则在被列入白名单时适用,在被列入黑名单时不适用。您可以运行cfn_nag_rules查看这些规则的列表。
使用
s\安装说明可以在这里找到。
使用cfn_nag扫描CloudFormation模板:
$ cfn_nag_scan --input-path test_cfn_template.json/yaml
您可以扫描一个目录,这将扫描所有。json、.template、.yml和。yaml文件。
cfn_nag也可以作为CodePipeline操作、Github操作或在Docker上运行。
完成后,您可以:
- 审查结果
- 作必要的修改
- 再次运行扫描,直到获得所需的结果
与其它IaC扫描工具的比较
Cfn_nag在某些方面类似于Kube-Linter。首先,它们都是静态分析工具,可以应用指定的规则集,也可以避免这些规则集。
其次,它们都侧重于一个特定的IaC工具,并且可以在一种编程语言中使用。cfn_nag:Ruby和Kubelinter:Go。
另一方面,cfn_nag与OPA有很大的不同。虽然OPA有大量的用例,但cfn_nag的全部关注点都是加强安全性遵从性。
4. CloudFormation Guard
也称为cfn-guard,CloudFormation Guard是一个开源工具,可以查找不兼容的代码。作为一个多用途、策略即代码的工具,它可以很好地与许多具有JSON和YAML生成的文件配置的IaC代码工具一起工作。例如CloudFormation,Terraform和Kubernetes等。
为了实现这一点,cfn-guard提供了一种域特定语言(DSL),它允许您定义、测试和强制策略规则。
5. Checkov
Checkov是一个开源静态分析工具,可以帮助您扫描云架构中的错误配置。
checkov使用策略即代码框架,同时提供命令行界面帮助您管理扫描结果并提供多平台支持,您可以使用它扫描流行IaC的配置,如Terraform,SDK、CloudFormation、Kubernetes manifests helm图表和docker文件。
正因为如此,您可以使用单个工具来完成许多管道步骤和人工制品,从而促进我们的团队和管道学习和维护工具的nr。
6. Kyvermo
我们主要讨论了“左边”的安全策略,即在开发过程中或在管道的预部署阶段扫描代码,现在我想快速讨论“右边”(运行)的一个专门针对Kubernetes的工具。
Kyverno是为Kubernetes设计的策略引擎。它可以使用允许控制和后台扫描来验证、变异和生成配置。Kyverno策略是通过自定义资源定义实现的Kubernetes资源。
请参见此处的舵形图的安装说明。
Kyverno是作为k8s操作员安装的,将与k8s准入控制集成,默认情况下只能审计,但也可以设置为阻止。
正如我们上面提到的,它使用相同的k8s yaml清单,使用它自己的CRD实现,使它成为k8s本地,而且它将只适用于k8s资源。
总结
随着越来越多的组织意识到建立自动化IT基础设施管理的巨大好处,必须努力确保IaC工具通过充分的安全性和遵从性检查得到增强。
当新成员、承包商等在您的组织中工作时,具有扫描和维护质量标准和遵从性的自动化是很重要的,这允许更集中的安全性和遵从性。
但是,重要的是要理解部署可能是出于必要,也可能是恶意地发生在管道之外,从而破坏安全性和遵从性,因此设置适当的策略以在“右侧”进行监控也应该在您的范围内。
- 点赞
- 收藏
- 关注作者
评论(0)