You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

tfsec自定义GCP Cloud SQL检查报错:MatchSpec格式解析失败

解决tfsec自定义检查反序列化错误:无法将!!map反序列化为[]custom.MatchSpec

问题根源

你遇到的错误是因为tfsec自定义检查的YAML配置中,matchSpec字段格式不符合要求——它必须是数组类型,但你写成了单个map对象。tfsec尝试解析时无法将单个map转换成预期的[]custom.MatchSpec(匹配规则数组),因此抛出序列化错误。

修复后的自定义检查YAML

针对GCP Cloud SQL实例禁用远程访问的需求,正确的自定义检查配置如下:

---
checks:
  - code: CUSTOM_GCP_SQL_REMOTE_ACCESS_OFF
    description: "确保Cloud SQL实例禁用远程访问(public_ip_enabled = false)"
    requiredTypes:
      - resource
    requiredLabels:
      - google_sql_database_instance
    severity: ERROR
    matchSpec:
      - name: "settings.ip_configuration.public_ip_enabled"
        op: eq
        value: false

关键修正点

  • matchSpec必须是数组:哪怕只有一条匹配规则,也要用-开头定义为数组元素,不能直接写map结构。
  • 路径匹配:直接通过settings.ip_configuration.public_ip_enabled定位目标字段即可,因为google_sql_database_instance的settings是单个对象,无需使用subMatch。

验证示例

  1. 合规的Terraform代码示例:
resource "google_sql_database_instance" "compliant_db" {
  name             = "compliant-db"
  database_version = "POSTGRES_14"
  region           = "us-central1"

  settings {
    tier = "db-f1-micro"

    ip_configuration {
      public_ip_enabled = false # 符合检查要求
    }
  }
}
  1. 运行tfsec .,该实例不会触发自定义检查错误;若将public_ip_enabled改为true,则会触发CUSTOM_GCP_SQL_REMOTE_ACCESS_OFF的错误提示。

关于subMatch的正确用法(嵌套列表场景)

如果目标字段嵌套在列表类型的属性中(比如部分资源的settings是列表),才需要用到subMatch,格式同样要遵循数组要求:

matchSpec:
  - name: "settings"
    subMatch:
      - name: "ip_configuration.public_ip_enabled"
        op: eq
        value: false

内容的提问来源于stack exchange,提问作者Carl L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:35:18