☰
tfsec 检查规则详解:为 Google Cloud SQL 数据库实例启用自动备份(google-sql-enable-backup)
2026/10/15 2:02:43 网站建设 项目流程
  • 应用安全
  • SAST
  • IaC

【免费下载链接】tfsec

Tfsec is now part of Trivy

项目地址:https://gitcode.com/gh_mirrors/tf/tfsec
点击查看免费下载

本文是 tfsec 安全检查规则google-sql-enable-backup的深度技术解读。该规则用于检测 Terraform 中 Google Cloud SQL(google_sql_database_instance)实例是否启用了自动备份,属于 Google SQL 服务、默认严重级别为medium的内置检查。读完本文,你将掌握该规则的判定逻辑、不安全的 Terraform 写法与正确修复写法、如何在本地与 CI 中运行/过滤该检查,以及如何基于源码理解 tfsec 规则文档的生成机制。

一、规则概览:身份、归属与严重级别

google-sql-enable-backup是 tfsec 针对 Google 云平台提供的内置检查之一,其官方规则文档位于 docs/checks/google/sql/enable-backup/index.md,规则全称(Check ID)为google-sql-enable-backup,主题是“Enable automated backups to recover from>resource "google_sql_database_instance" "db" { name = "db" database_version = "POSTGRES_12" region = "us-central1" settings { backup_configuration { enabled = false } } }

需要特别说明:即使完全省略backup_configuration块,也同样无法通过该检查。因为 Cloud SQL 的自动备份默认关闭,tfsec 判定的是“实例最终是否处于备份开启状态”。因此,安全写法必须显式声明enabled = true。

3.2 安全示例(通过google-sql-enable-backup检查)

以下配置通过将enabled设置为true,显式开启了自动备份:

resource "google_sql_database_instance" "db" { name = "db" database_version = "POSTGRES_12" region = "us-central1" settings { backup_configuration { enabled = true } } }

3.3 关键字段说明

字段取值说明
database_versionPOSTGRES_12等数据库引擎版本,示例为 PostgreSQL 12
regionus-central1等实例部署区域
settings.backup_configuration.enabledtrue/false自动备份开关,本规则唯一关注的判定点

需要指出的是,backup_configuration块在官方 Terraform 资源文档中还支持start_time(备份开始时间)、日志保留等附加配置;本规则只要求enabled为true,其余字段可结合实际容灾需求(如备份窗口、PITR 时间点恢复)进一步补充,相关细节可参见原文档 Links 部分指向的 Terraform 官方资源文档与 Google Cloud 备份/恢复文档。

四、tfsec 如何执行与渲染该检查(源码级解析)

4.1 规则文档的自动生成

本文解读的这份规则页面并非手写,而是由 tfsec 文档生成器自动产出的。在 cmd/tfsec-docs/webpage.go 的generateWebPage函数中,每个检查的ID、ShortCode、Severity、Summary、Explanation、Impact、Resolution、BadExample、GoodExample、Links会被填充进baseWebPageTemplate模板,最终渲染为docs/checks/google/sql/enable-backup/index.md这样的页面文件。也就是说,你看到的“不安全示例/安全示例/影响/修复”结构,正是 tfsec 规则元数据的标准化呈现。

4.2 扫描引擎与依赖

当前 tfsec 的扫描能力由 aquasecurity/defsec 中,项目直接依赖github.com/aquasecurity/defsec v0.84.1;internal/app/tfsec/cmd/flags.go 与 internal/app/tfsec/cmd/root.go 中则通过 defsec 的terraformscanner 加载并执行规则。因此,google-sql-enable-backup的实际判定逻辑运行在 defsec 的 Google SQL 规则集中,tfsec 负责解析 HCL、构建执行上下文并汇总结果。

从源码结构可以推断:与 AWS 规则拥有独立旧编号(如AWS052)不同,google-sql-enable-backup直接使用 defsec 的统一 ID 体系——internal/pkg/legacy/map.go 与 internal/pkg/ignores/migration.go 中列出的旧 ID 到新 ID 的迁移映射仅覆盖 AWS 规则,未包含任何google-*规则。

4.3 命令行为:退出码与严重级别过滤

tfsec 可直接对当前目录或指定目录执行扫描:

# 扫描当前目录下的 Terraform 文件 tfsec . # 扫描指定目录 tfsec path/to/terraform

运行入口见 cmd/tfsec/main.go,其中还会在 stderr 打印一条提示:tfsec 已加入 Trivy 家族,后续工程重心将转向 Trivy,tfsec 本体在一段时间内仍可使用。

执行结果对应的退出码逻辑定义在 internal/app/tfsec/cmd/root.go 的getDetailedExitCode函数中:

  • 退出码 0:没有规则失败;
  • 退出码 2:有失败的规则,但全部为 LOW 严重级别;
  • 退出码 1:存在任意 CRITICAL / HIGH / MEDIUM 级别的失败规则。

由于google-sql-enable-backup是 medium 级别,一旦触发失败,命令将以退出码1结束,非常适合直接接入 CI 门禁——任何未开启自动备份的 Cloud SQL 实例都会让流水线失败。

如需按严重级别过滤报告,可使用--minimum-severity/-m参数(见 docs/guides/usage.md):

# 仅报告 MEDIUM 及以上级别的结果 tfsec --minimum-severity MEDIUM . # 排除该规则 tfsec --exclude google-sql-enable-backup .

也可以在配置文件(.tfsec/config.json或config.yml,或通过--config-file指定)中设置全局最小严重级别,详见 docs/guides/configuration/config.md:

{ "minimum_severity": "MEDIUM" }

配置文件的解析实现位于 internal/pkg/config/config.go,其中MinimumSeverity字段对应配置键minimum_severity,SeverityOverrides字段还允许把某个检查的默认级别覆盖为其他级别(例如把google-sql-enable-backup提升为 HIGH),从而按团队策略调整告警优先级。

五、合理豁免:ignore 机制与风险提示

在某些场景下,团队可能希望临时豁免该检查(例如短生命周期的临时分析库、明确不开启备份的开发环境)。tfsec 支持在 HCL 源码中通过注释行内豁免,完整语法见 docs/guides/configuration/ignores.md:

resource "google_sql_database_instance" "db" { name = "db" database_version = "POSTGRES_12" region = "us-central1" settings { backup_configuration { enabled = false #tfsec:ignore:google-sql-enable-backup } } }

或把 ignore 注释单独放在问题行上方:

settings { #tfsec:ignore:google-sql-enable-backup backup_configuration { enabled = false } }

还可以为豁免设置过期时间,避免“忽略后被永久遗忘”:

#tfsec:ignore:google-sql-enable-backup:exp:2026-12-31

过期之后,该豁免自动失效,检查会重新生效。需要注意的是:忽略不等于修复。在涉及生产数据的关键数据库上,建议优先按安全示例显式开启自动备份,而不是依赖 ignore 注释。

六、从检查到落地:推荐实践清单

结合本文内容,可将google-sql-enable-backup的落地实践总结为以下步骤:

  1. 编写时:在所有google_sql_database_instance资源的settings.backup_configuration中显式设置enabled = true;
  2. 本地验证:运行tfsec .或tfsec --minimum-severity MEDIUM .,确认无 medium 及以上告警,退出码为 0;
  3. CI 集成:将 tfsec 加入流水线,利用退出码 1/2/0 语义控制门禁;
  4. 豁免管理:确需豁免的场景使用#tfsec:ignore:google-sql-enable-backup:exp:yyyy-mm-dd并设置过期时间;
  5. 配套加固:结合同目录下的 encrypt-in-transit-data、no-public-access 等 SQL 规则,构建完整的 Cloud SQL 安全基线。

七、相关资源

  • 规则原文:docs/checks/google/sql/enable-backup/index.md
  • SQL 服务检查索引:docs/checks/google/sql/index.md
  • 命令行完整参数表:docs/guides/usage.md
  • 配置文件(最小严重级别、级别覆盖):docs/guides/configuration/config.md
  • 忽略/豁免机制:docs/guides/configuration/ignores.md
  • 规则文档生成器:cmd/tfsec-docs/webpage.go
  • 扫描依赖声明:go.mod
  • 应用安全
  • SAST
  • IaC

【免费下载链接】tfsec

Tfsec is now part of Trivy

项目地址:https://gitcode.com/gh_mirrors/tf/tfsec
点击查看免费下载
上一篇:3步搞定家庭厨房管理系统:Tandoor Recipes部署与运维全攻略
下一篇:告别列表卡顿:Agera响应式RecyclerView完全指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询