如何使用Trivy保障Terraform代码的安全

💡 原文英文,约4000词,阅读约需15分钟。
📝

内容提要

本文介绍了如何使用Trivy检查AWS Terraform配置的安全问题,提高基础设施即代码(IaC)代码库的安全性。Trivy是一个安全扫描工具,可以扫描各种类型的代码和构件,包括Terraform配置。文章提供了安装Trivy的步骤,并演示了如何扫描示例Terraform模块以发现安全问题。作者还讨论了如何解决这些问题,并介绍了在CI中运行Trivy的方法。最后,文章强调了将Trivy扫描结果上传到GitHub代码扫描的价值。通过使用Trivy进行静态分析,可以提高Terraform配置的安全性。

🔎

延伸解读

Trivy 与 Tfsec 的差异及注意事项

文章指出 Trivy 已整合 Tfsec 的功能,但两者在扫描结果上存在差异。例如,Trivy 会扫描远程模块中的 examples 文件夹,导致误报,而 Tfsec 不会。此外,Trivy 对远程模块的路径处理尚不完善,可能漏报某些问题(如 ALB 监听器未使用 HTTPS)。作者建议同时扫描配置和计划文件以提高准确性,并关注 Trivy 的后续更新。

处理扫描结果的两种策略

对于 Trivy 发现的配置问题,可以选择修改配置或忽略发现。修改配置适用于自有资源,如为 EC2 实例启用 IMDSv2 和加密根卷。对于无法修改的公共模块,可以使用内联注释(如 #trivy:ignore)或 Rego 策略来忽略特定发现。但需注意,内联注释在扫描 Terraform 计划时无效,此时需依赖 Rego 策略。

在 CI 中集成 Trivy 的实践建议

将 Trivy 集成到 CI 管道是确保 IaC 安全的关键步骤。建议使用配置文件(如 trivy.yaml)而非命令行参数,便于本地复现。GitHub Actions 有官方 Action,可运行 fs 扫描(包括漏洞和秘密检测)。对于 GitHub 用户,还可将结果上传至代码扫描,以便跟踪发现。其他 CI 系统可直接调用 CLI,迁移简单。

扫描 Terraform 计划的优势与限制

Trivy 支持扫描 Terraform 计划(转换为 JSON),这比仅扫描配置文件更准确,能发现如 ALB 监听器未使用 HTTPS 等额外问题。但生成计划需要时间,且需认证到云提供商。此外,计划扫描会忽略内联的 #trivy:ignore 注释,因此若主要依赖计划扫描,需改用 Rego 策略来忽略发现。

❓

Q&A

Trivy是什么,它的主要功能是什么?

Trivy是一个安全扫描工具,能够扫描各种类型的代码和构件,包括Terraform配置,以发现已知的安全问题和错误配置。

如何安装Trivy?

可以通过命令行使用brew、apt或choco等包管理工具安装Trivy,具体命令包括:brew install trivy、apt install trivy和choco install trivy。

使用Trivy扫描Terraform模块的步骤是什么?

首先创建一个Terraform模块,然后运行命令trivy config .来扫描当前文件夹,检查配置中的安全问题。

Trivy扫描结果中常见的安全问题有哪些?

常见的安全问题包括负载均衡器未设置为丢弃无效头部、VPC流日志未启用、实例未要求IMDS访问令牌等。

如何在CI/CD管道中集成Trivy?

可以在CI/CD管道中使用Trivy的官方Action,配置文件中指定扫描类型和路径,以便自动化安全检查。

将Trivy扫描结果上传到GitHub的好处是什么?

将Trivy扫描结果上传到GitHub可以帮助跟踪发现的问题,并在合并代码之前进行安全检查,增强项目的安全性。

🏷️

标签

➡️

继续阅读