news 2026/10/21 8:49:54

tfsec 检查规则详解:azure-database-no-public-firewall-access(Azure 数据库防火墙禁止公共访问)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
tfsec 检查规则详解:azure-database-no-public-firewall-access(Azure 数据库防火墙禁止公共访问)
  • 应用安全
  • SAST
  • IaC

【免费下载链接】tfsec

Tfsec is now part of Trivy

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

本篇技术指南围绕 tfsec 内置检查规则azure-database-no-public-firewall-access展开,说明其检查原理、默认严重级别、触发条件与合规写法。读者将掌握如何在 Terraform 配置中识别"允许公共访问"的 Azure SQL / PostgreSQL 防火墙规则,并学会结合 tfsec 命令行参数进行过滤、排除与豁免管理,将数据库防火墙加固落实到 IaC 扫描流程中。

检查规则概览

该规则属于 tfsec 的 Azure 数据库(azure/database)检查类别,在 数据库检查索引 中与no-public-access、enable-ssl-enforcement、enable-audit等规则并列,用于覆盖 Azure 数据库的访问控制面。

项目内容
规则 IDazure-database-no-public-firewall-access
分类azure / database
默认严重级别high(高)
检查目标azurerm_sql_firewall_rule、azurerm_postgresql_firewall_rule等数据库防火墙规则

说明:旧版 tfsec 使用AZUxxx形式的 legacy 规则 ID,其映射关系维护在 internal/pkg/legacy/map.go 中。从源码结构看,Azure 类规则(AZU001~AZU028)均通过该映射表与azure-*新 ID 关联,因此历史告警记录如需迁移,可参考该文件核对对应关系。

规则原理:为什么起始地址为 0.0.0.0 是危险的

Azure 数据库的防火墙规则通过start_ip_address与end_ip_address定义允许访问的 IP 段。官方文档的解释明确指出了风险模式:

Azure services can be allowed access through the firewall using a start and end IP address of 0.0.0.0. No other end ip address should be combined with a start of 0.0.0.0

即:Azure 服务可以通过"起始与结束 IP 均为 0.0.0.0"的规则获得防火墙放行(该写法语义上代表"允许所有 Azure 内部服务访问")。但若把起始 IP 设为0.0.0.0、结束 IP 设为其他宽泛地址(如255.255.255.255),则会形成对整个公网 IPv4 地址空间的开放,任何互联网主机都能尝试连接数据库。

因此规则的核心判定逻辑可以概括为:

  • 起始 IP 为0.0.0.0,且结束 IP 不是0.0.0.0→不安全,触发 high 告警(存在公共可达的 IP 段);
  • 起始 IP 与结束 IP 均为0.0.0.0→ 视为仅向 Azure 内部服务开放,判定通过。

可能的影响

按文档声明,该问题的影响为:

Publicly accessible databases could lead to compromised data

公开可达的数据库会暴露在公网扫描与暴力破解之下,一旦被攻破,将直接导致数据泄露、篡改或勒索。这正是该规则被标记为high严重级别的原因——它不只是一个最佳实践建议,而是关乎数据资产底线的高危风险。

不安全示例(触发检查)

以下 Terraform 配置将触发azure-database-no-public-firewall-access检查失败,因为它把 SQL 与 PostgreSQL 的防火墙规则均配置为0.0.0.0→255.255.255.255:

resource "azurerm_sql_firewall_rule" "bad_example" { name = "bad_rule" resource_group_name = azurerm_resource_group.example.name server_name = azurerm_sql_server.example.name start_ip_address = "0.0.0.0" end_ip_address = "255.255.255.255" } resource "azurerm_postgresql_firewall_rule" "bad_example" { name = "bad_example" resource_group_name = azurerm_resource_group.example.name server_name = azurerm_postgresql_server.example.name start_ip_address = "0.0.0.0" end_ip_address = "255.255.255.255" }

触发条件要点

  • start_ip_address = "0.0.0.0"且end_ip_address = "255.255.255.255":允许全部 IPv4 地址访问,属于最典型的公共访问配置;
  • 从规则解释推断,任何"起始为0.0.0.0而结束地址非0.0.0.0"的组合都在告警范围内——即只要该 IP 段宽度超出"仅 Azure 服务"语义,就会被视为公共可达。

安全示例(合规写法)

以下配置会通过检查:起始与结束 IP 均为0.0.0.0,表示仅允许 Azure 服务本身访问,不向公网开放:

resource "azurerm_sql_firewall_rule" "good_example" { name = "good_rule" resource_group_name = azurerm_resource_group.example.name server_name = azurerm_sql_server.example.name start_ip_address = "0.0.0.0" end_ip_address = "0.0.0.0" }

更严格的合规建议

原文档建议"不要使用过宽的 IP 段作为 SQL 防火墙范围"。在实际加固中,除0.0.0.0/0.0.0.0写法外,还应遵循以下原则:

  • 为每个连接方(办公出口、应用服务器、运维跳板机等)配置精确的单个 IP,即start_ip_address与end_ip_address相同;
  • 使用明确的 CIDR 表达内网段,避免1.0.0.0~255.255.255.255这类宽泛区间;
  • 优先配合虚拟网络服务终结点(VNet Service Endpoint)或专用链接(Private Link)替代公网防火墙规则;
  • 将"允许 Azure 服务访问"的能力限制在确实需要集成的场景(如应用层服务访问),并配合 enable-ssl-enforcement 规则 强制 TLS、no-public-access 规则 检查其他公共暴露面,形成纵深防御。

如何运行检查

tfsec 默认对当前目录递归扫描,无需参数即可执行:

tfsec .

针对该规则,常用的观察方式如下。

仅报告本规则:使用--filter-results只保留指定规则的结果:

tfsec --filter-results azure-database-no-public-firewall-access .

包含通过项:默认只输出失败结果,使用--include-passed可以看到该规则的"通过"清单,便于验证加固效果:

tfsec --include-passed .

按严重级别收敛:该规则为 high,可通过--minimum-severity控制输出下限(CRITICAL、HIGH、MEDIUM、LOW):

tfsec --minimum-severity HIGH .

其他常用参数还包括--format(json、sarif、markdown、junit等输出格式)、--out(结果写入文件)、--exclude(排除规则 ID)与--config-file(使用配置文件),完整参数表见 使用指南,也可通过tfsec --help随时查阅。

在 CI 中排除或豁免该规则

临时排除:若团队确实需要宽泛防火墙段(例如非生产环境),可在命令行层面排除规则 ID:

tfsec --exclude azure-database-no-public-firewall-access .

代码内豁免:更推荐的方式是在 Terraform 源码中添加忽略注释,tfsec 的豁免机制支持指定规则 ID、过期时间与工作区范围,详见 忽略指南:

resource "azurerm_sql_firewall_rule" "example" { name = "dev_rule" resource_group_name = azurerm_resource_group.example.name server_name = azurerm_sql_server.example.name start_ip_address = "0.0.0.0" end_ip_address = "10.0.0.0" #tfsec:ignore:azure-database-no-public-firewall-access }

若希望豁免自动过期、避免"永久忽略"造成的安全债,可追加:exp:yyyy-mm-dd过期声明:

#tfsec:ignore:azure-database-no-public-firewall-access:exp:2027-01-01 resource "azurerm_sql_firewall_rule" "example" { ... }

过期后该豁免自动失效,规则将重新生效,强制团队定期复核是否仍需要公共访问。

相关检查与文档导航

同一azure/database分类下的其他规则共同构成了 Azure 数据库安全基线,建议一并启用:

  • no-public-access:确保数据库本身不对外公开访问;
  • enable-ssl-enforcement:强制数据库连接使用 SSL;
  • enable-audit:开启数据库审计;
  • retention-period-set:审计日志保留期不低于 90 天。

规则在文档站中的导航配置见 mkdocs.yml(checks/azure/database/no-public-firewall-access节点),完整规则清单可查看 rules.md。

总结

azure-database-no-public-firewall-access是 tfsec 针对 Azure SQL/PostgreSQL 防火墙配置的高危检查:只要start_ip_address为0.0.0.0且结束地址宽于0.0.0.0,即判定为公共可达并产生 high 告警。修复方向是收敛 IP 段为精确地址、以0.0.0.0/0.0.0.0仅放行 Azure 服务,或在 CI 中通过--filter-results、--exclude与tfsec:ignore注释管理例外场景。将该规则纳入 Terraform 扫描流水线,可以在基础设施代码提交阶段就拦截潜在的数据暴露风险。

  • 应用安全
  • SAST
  • IaC

【免费下载链接】tfsec

Tfsec is now part of Trivy

项目地址:https://gitcode.com/gh_mirrors/tf/tfsec
点击查看免费下载
上一篇:端侧多模态革命:MiniCPM-V 2.0 全面解析与实战指南
下一篇:Google Gemini API函数调用完全指南:构建智能应用的核心技术

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 9:27:34

属于一个人的数字管家:个人生活自动化脚本工具包全景复盘

十月十四日的夜色深沉,秋虫在窗台外发出细微的鸣唱。我端着一杯温热的麦茶,在终端里敲下一条命令:tree ~/scripts -L 1。 屏幕上整整齐齐地列出了七个小巧的 Python 脚本文件。没有复杂的工程脚手架,没有深不见底的依赖树&#xf…

作者头像 李华
网站建设 2026/10/20 22:26:55

RealVNC嵌入式远程调试实战:低延迟Framebuffer直通与无GUI部署

简介:本资源为RealVNC远程连接工具Windows平台部署包,面向IT运维人员、远程办公用户及系统管理员,解决跨设备桌面控制、远程技术支持与多系统协同管理等实际问题。压缩包共2个文件(1个ZIP安装包 1个HTM说明文档)&…

作者头像 李华
网站建设 2026/10/20 17:53:22

软考 系统架构设计师历年真题集萃(66)

接前一篇文章:软考 系统架构设计师系列知识点之杂项集萃(65) 第106题 一般说来,SoC称为系统级芯片,也称片上系统,它是一个有专用目标的集成电路产品。以下关于SoC不正确的说法是()。 A. SoC是一种技术,是以实际的、确定的系统功能开始,到软/硬件划分,并完成设计的…

作者头像 李华
网站建设 2026/10/20 10:54:56

PyTorch与CUDA、cuDNN版本匹配全解析:从安装验证到排错

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/21 13:59:50

红外扫码与热敏打印:自助收银小票链路全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华