静态代码扫描
敏捷方法的主要好处之一是它固有的变更灵活性。您的代码可以根据客户需求不断发展,同时保持软件质量的高标准。为了适应这种灵活性,一定程度的漏洞和缺陷必然会渗透到您的代码中。 静态代码分析工具帮助您在开发的初始阶段识别这些风险,甚至不需要执行,使开发人员能够维护强大的代码基础。
tfsec
Tfsec就是这样一种静态分析工具,它可以帮助您识别Terraform代码中的错误配置和安全风险。 tfsec帮助您识别的一些风险示例如下:
- 可公开访问的s3存储桶
- CIDR块规范中的默认路由(0.0.0.0/0)
- 资源上缺少加密
Terragrunt
基本上,它是一个包装器,允许您在terraform模板中注入“值”,这样您就可以跨环境重用组件,保持基础设施代码的枯燥(不要重复!) 因此,对于设置RDS实例的代码片段..
…相应的terragrunt代码如下所示..
tfsec X Terragrunt
当你使你的terraform模板通用时,更多的变量将被引入到你的。tf文件”。因此,您很难识别错误配置,因为大多数配置都是“可变的”。 在上面的Terragrunt文件中,我故意留下了几个错误的配置..
这两者分别是严重和高度的漏洞。 但是如果您在上面的Terraform文件上运行tfsec命令,您将看到如下报告..
显然,tfsec无法识别“可变”配置是错误的。 这是因为tfsec只与Terraform兼容。它不知道Terragrunt文件的内容及其“输入”。
措施1
通常情况下,您会将Terraform和Terragrunt文件放在不同的存储库中。当您使用Terraform注册表中的模块或提供程序时,这种情况变得更加重要。 在这里,您没有能力在基础设施“源代码”上运行tfsec..因为它存在于远程。 嗯,这不应该是一个担心的原因,因为每当你第一次运行Terraform计划时,所有的远程Terraform文件都会被提取。你只是在文件夹结构中看不到它们。要访问这些文件,可以使用ls-a列出路径中的所有隐藏文件
在.terragrunt-cache下,向下几个目录,您将找到您的terraform文件 实际上,您现在可以在terragrunt.hcl文件所在的位置运行tfsec命令。 Tfsec将查找该文件夹级别的所有tf文件,甚至是.terragrunt-cache下的文件 如果您使用工作流来调配基础结构,您可以按照以下步骤序列对代码运行安全扫描,即
1.首先使用terraform plan创建计划 2.在同一文件夹级别上运行tfsec
措施2
在上一步中,我们解决了在terragrunt中使用tfsec的问题。现在,这种方法本身就足以让大多数人开始使用,但它并不能解决“可变”配置带来的问题。 即使用这种方法,tfsec也会告诉我们..
尽管tfsec与Terragrunt输入不兼容,但它确实为我们提供了一种使用-tfvars-file选项为变量注入值的方法。 tfvars文件是Terraform允许我们传递可变配置值的另一种方式。 一个样本terragrunt.tfvars文件如下所示。
请注意,它非常类似于terragrunt的输入块。盐酸..
如果我们有办法改变。hcl文件到。tfvars,我们可以走了..
您可以使用自己喜欢的编程语言中的脚本来提取这些数据,但我喜欢使用正则表达式..
匹配正则表达式输入={((.\n))}1,我们得到上面提到的.tfvars文件..
如果我们运行tfsec。--tfvars-文件terragrunt.tfvars命令,我们得到预期的结果。
虽然这个方法有点“老套”,但这是我唯一能想到的方法,在出现 terragrunt+tfsec生态系统。